Example #1
0
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;
}