void parseCommandLine(int argc, char *argv[]) { std::cout << "\n"; std::cout << BOLD(FRED("Reconstruct implicit surface from a 3D data set with Level-Set method.\n")); std::cout << "\n"; if(argc == 1) { std::cout << FBLU("Syntax is: narrow_band input.pcd <options>\n"); std::cout << " where options are:\n"; std::cout << "\t-p n" << "\t= grid precision (default: " << FCYN("10") << ")\n"; std::cout << "\t-e n" << "\t= grid expansion factor (default: " << FCYN("3") << ")\n"; std::cout << "\t-iter n" << "\t= number of iterations (default: " << FCYN("1") << ")\n"; std::cout << "\t-dt n" << "\t= time step (default: " << FCYN("0.01") << ")\n"; exit(0); } if(argc > 1) { filename = argv[1]; for (int i = 2; i < argc; i++) { if(strcmp(argv[i],"-p") == 0) prec = atoi(argv[i+1]); if(strcmp(argv[i],"-e") == 0) expand = atoi(argv[i+1]); if(strcmp(argv[i],"-iter") == 0) iter = atoi(argv[i+1]); if(strcmp(argv[i],"-dt") == 0) deltaT = strtod(argv[i+1],NULL); } } }
int main(int argc, char** argv) { Parametro *p = parseParametros(argc, argv); if(p == NULL) return 0; prime.setaParametros(p); //se o usuário escolheu o J, devemos fazer algumas checagens: //1 - o j é valido (entre 0 e m) //2 - a distância é valida (entre 0 e j + distancia <= m) if(p->Jsetado){ if(p->Jselecionado < 0 || p->Jselecionado > prime.m){ cout<<FRED(ERR_J)<<"\n"; return 0; } else if(p->Jdistancia < 1 || (p->Jdistancia + p->Jselecionado) > prime.m){ cout<<FRED(ERR_DISTANCIA)<<"\n"; return 0; } } if(prime.k > prime.m){ cout<<"\n"<<FRED(ERR_KMAIOR)<<prime.m<<"\n"; return 0; } if(prime.versao > 3 || prime.versao < 1){ cout<<FRED(MSG_VERSAO_INCORRETA); cout<<FCYN(MSG_VERSAO_K1_VS1)<<MSG_VERSAO_K1_VS2<<MSG_VERSAO_K1_VS3; return 0; } cout<<"K-difference-primer-1 processando...\n"; cout<<"Versao do algoritmo: "; !(p->escolheuVersao) ? cout<<FCYN("delfaut") : cout<<prime.versao; if(prime.mostrarMatriz) cout<<"\n"<<FMAG(MSG_MATRIZ); if(p->mostrarLog) cout<<KYEL<<"\nLog de infomacoes ativado.\n"<<RST; if(p->Jsetado) { if(p->Jdistancia > 1){ cout<<KCYN<<"\nProcessando os indices "<<RST<<p->Jselecionado; cout<<KCYN<<" ate "<<RST<<(p->Jdistancia + p->Jselecionado) -1; } else cout<<KCYN<<"\nProcessando o indice "<<RST<<p->Jselecionado; cout<<KCYN<<" de alfa.\n"<<RST; } cout<<endl; time_t inicio, fim; time(&inicio); if(prime.tempo) formataTempo(inicio, true); prime.processar(p->Jselecionado, p->Jdistancia); time(&fim); if(prime.tempo) formataTempo(fim, false); if(!prime.mostrarMatriz) prime.mostrarOcorrencias(p); if(prime.tempo){ double seconds = difftime(fim, inicio); formataSegundos(seconds); mostrarMemoria(); } return 1; }