int main(int argc, char **argv) { double * rodriguez = (double*) malloc(sizeof(double) * 3 ); double * translation = (double*) malloc(sizeof(double) * 3 ); double * camera = (double*) malloc(sizeof(double) * 9 ); double scaleToDepthUnit = 1.0; //Internal calibration camera[0]=535.784106; camera[1]=0.0; camera[2]=312.428312; camera[3]=0.0; camera[4]=534.223354; camera[5]=243.889369; camera[6]=0.0; camera[7]=0.0; camera[8]=1.0; translation[0]=0.0; translation[1]=0.0; translation[2]=0.0; rodriguez[0]=0.0; rodriguez[1]=0.0; rodriguez[2]=0.0; setOpenGLNearFarPlanes(1,15000); int i=0; for (i=0; i<argc; i++) { if (strcmp(argv[i],"-test")==0) { internalTest(); exit(0); } else if (strcmp(argv[i],"-intrinsics")==0) { if (i+8<argc) { int z=0; for (z=0; z<9; z++) { camera[z]=atof(argv[z+i+1]); } setOpenGLIntrinsicCalibration( (double*) camera); } } else if (strcmp(argv[i],"-extrinsics")==0) { if (i+7<argc) { translation[0]=atof(argv[i+1]); translation[1]=atof(argv[i+2]); translation[2]=atof(argv[i+3]); rodriguez[0]=atof(argv[i+4]); rodriguez[1]=atof(argv[i+5]); rodriguez[2]=atof(argv[i+6]); scaleToDepthUnit = atof(argv[i+7]); setOpenGLExtrinsicCalibration( (double*) rodriguez, (double*) translation , scaleToDepthUnit); } } else if ( (strcmp(argv[i],"-resolution")==0) || (strcmp(argv[i],"-size")==0) ) { if (i+2<argc) { width=atof(argv[i+1]); height=atof(argv[i+2]); } } else if ( (strcmp(argv[i],"-photo")==0) || (strcmp(argv[i],"-photoshoot")==0) ) { if (i+4<argc) { photoShootOBJ=atoi(argv[i+1]); angleX=atof(argv[i+2]); angleY=atof(argv[i+3]); angleZ=atof(argv[i+4]); columns=atoi(argv[i+5]); rows=atoi(argv[i+6]); } } else if (strcmp(argv[i],"-from")==0) { if (i+1<argc) { readFromArg = i+1 ; } } else if (strcmp(argv[i],"-to")==0) { if (i+1<argc) { writeToArg = i+1 ; doFileOutput=1; fprintf(stderr,"Will write data to %s\n",argv[writeToArg]); } } else if (strcmp(argv[i],"-shader")==0) { enableShaders(argv[i+1],argv[i+2]); } else if (strcmp(argv[i],"-keyboard")==0) { forceKeyboardControl=1; } else if (strcmp(argv[i],"-maxFrames")==0) { maxFrames=atoi(argv[i+1]); } } int started = 0; if (readFromArg!=0) { started=startOGLRendererSandbox(width,height,1 /*View OpenGL Window*/,argv[readFromArg]); } else { started=startOGLRendererSandbox(width,height,1 /*View OpenGL Window*/,0); /*0 defaults to scene.conf*/ } if (!started) { fprintf(stderr,"Could not start OpenGL Renderer Sandbox , please see log to find the exact reason of failure \n"); return 0; } if (photoShootOBJ) { float angXVariance=60,angYVariance=60,angZVariance=30; //fprintf(stderr,"Making a photoshoot of object %u",photoShootOBJ); void * oglPhotoShoot = createOGLRendererPhotoshootSandbox( photoShootOBJ,columns,rows,distance,angleX,angleY,angleZ,angXVariance,angYVariance,angZVariance ); snapOGLRendererPhotoshootSandbox(oglPhotoShoot , photoShootOBJ,columns,rows,distance,angleX,angleY,angleZ,angXVariance,angYVariance,angZVariance); writeOpenGLColor("color.pnm",0,0,width,height); writeOpenGLDepth("depth.pnm",0,0,width,height); destroyOGLRendererPhotoshootSandbox( oglPhotoShoot ); return 0; } if ( forceKeyboardControl ) { setKeyboardControl(1); } char filename[FILENAME_MAX]= {0}; if (doFileOutput) { myMkdir("frames",argv[writeToArg]); } unsigned int snappedFrames=0; while (1) { snapOGLRendererSandbox(); if (doFileOutput) { snprintf(filename,FILENAME_MAX,"frames/%s/colorFrame_0_%05u.pnm",argv[writeToArg],snappedFrames); writeOpenGLColor(filename,0,0,width,height); snprintf(filename,FILENAME_MAX,"frames/%s/depthFrame_0_%05u.pnm",argv[writeToArg],snappedFrames); writeOpenGLDepth(filename,0,0,width,height); ++snappedFrames; } if (maxFrames!=0) { if (maxFrames==snappedFrames) { fprintf(stderr,"Reached target of %u frames , stopping\n",maxFrames); break; } } } free(rodriguez); free(translation); free(camera); stopOGLRendererSandbox(); return 0; }
int main(int argc, char *argv[]) { struct tms usage; FILE *finp; int i,j, ticks; int numinfirst; char chkfile[255]; i=0; dump_file=NULL; do_cluster=do_pairwise_cluster; srandom(563573); bzero(&prog_opts,sizeof(ProgOptionsType)); outf=stdout; // set default distance function dist = d2; distpair= d2pair; #ifdef MPI MPI_Init(&argc, &argv); MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myid); #endif if(myid==0) { // Master process_options(argc, argv); } else { process_slave_options(argc, argv); } if (prog_opts.show_version || (argc==1)) { if (myid==0) printf("Version \n%s\n",version); #ifdef MPI MPI_Finalize(); #endif exit(0); } // Allocate space for the RC table for big words rc_big = calloc(BIG_WORD_TSIZE, sizeof(SeqElt)); // work is an array of work blocks. If non-parallel, there'll only // be one. work[0] acts a template work = (WorkPtr) calloc(num_threads,sizeof(WorkBlock)); work->filename = argv[optind]; work->index = NULL; if(prog_opts.do_dump) dump_file = fopen(prog_opts.dname,"w"); #ifdef MPI if (numprocs > 1) if (myid>0) { // slaves if (prog_opts.split) { MPI_Finalize(); return 0; } handleMPISlaveSetup(&num_seqs); initialise(work, prog_opts.edfile); internalTest(); perform_clustering(work); transmitMPISlaveResponse(work); if (prog_opts.show_perf) show_performance(outf); MPI_Finalize(); exit(0); } #else if (numprocs > 1) { printf("This version of wcd is not compiled with MPI\n"); printf("You cannot run it with a multiple processes\n"); printf("Either only run it with one process or do a \n"); printf(" ./configure --enable-mpi\n"); printf(" make clean\n"); printf(" make \n"); exit(5); } #endif // work out number of sequences // if the user has specified a value for num_seqs then // use that, else use the number of sequences in the file num_seqs = count_seqs(argv[optind], &data_size)+reindex_value; seq = (SeqPtr *) calloc(num_seqs,sizeof(SeqPtr)); seqInfo = (SeqInfoPtr) calloc(num_seqs,sizeof(SeqInfoStruct)); tree= (UnionFindPtr) calloc(num_seqs,sizeof(UnionFindStruct)); data= (SeqPtr) calloc(data_size,sizeof(SeqElt)); init_dummy_sequences(); #ifndef AUXINFO seqID = (SeqIDPtr) calloc(num_seqs,sizeof(SeqIDStruct)); #endif if (seq == NULL) { perror("SeqStruct allocation"); exit(50); } numinfirst = global_i_end = num_seqs; global_j_beg = 0; // if merging, need to check the other file too if (prog_opts.domerge || prog_opts.doadd ) { global_j_beg = global_i_end; num_seqs = handleMerge(argv[optind+2], num_seqs); if (prog_opts.doadd) global_i_end = num_seqs; } initialise(work, prog_opts.edfile); if (data == NULL) { sprintf(chkfile,"Main data store (%d bytes)",data_size); perror(chkfile); exit(51); } for(i=0; i<num_seqs; i++) seqInfo[i].flag=0; // reopen sequence file for reading finp = fopen(argv[optind],"r"); if (finp == NULL) { perror(argv[optind]); exit(51); } // Some messy stuff to hande auxiliary options // Skip to next comment on first reading if (prog_opts.pairwise==1) { sscanf(argv[optind+1], "%d", &i); sscanf(argv[optind+2], "%d", &j); show_pairwise(finp,i,j); return 0; } if (prog_opts.statgen) { compared2nummatches(finp,prog_opts.statgen); return 0; } if (prog_opts.range) { sscanf(argv[optind+1], "%d", &global_i_beg); sscanf(argv[optind+2], "%d", &global_i_end); } if (prog_opts.show_comp==41) { char * fname; fname = malloc(255); sscanf(argv[optind+1], "%s", fname); read_sequences(finp,reindex_value,num_seqs); checkfile = fopen(fname,"r"); sscanf(argv[optind+2], "%d", &j); while (fscanf(checkfile,"%d", &i) != -1) { do_compare(finp,i,j,1); } return 0; } if (prog_opts.show_comp) { sscanf(argv[optind+1], "%d", &i); sscanf(argv[optind+2], "%d", &j); //printf("Comparing %d and %d of %d flag %d\n",i,j,num_seqs,prog_opts.flag); read_sequences(finp,reindex_value,num_seqs); do_compare(finp,i,j,prog_opts.flag); return 0; } if (prog_opts.show_index) { show_sequence(finp, prog_opts.index,prog_opts.flag); return 0; } // Now read in the sequences if (do_cluster == do_pairwise_cluster||do_cluster==do_MPImaster_cluster||do_cluster == do_suffix_cluster) read_sequences(finp,reindex_value,numinfirst); else init_sequences(finp,reindex_value,numinfirst); fclose(finp); //printf("%d Allocated %d, start=%d, last=%d\n",num_seqs,data_size,data,seq[num_seqs-1].seq); if (prog_opts.split) { process_split(prog_opts.clfname1, prog_opts.split); #ifdef MPI MPI_Finalize(); #endif return 0; } if (prog_opts.consfname1) process_constraints(prog_opts.consfname1,0); if (prog_opts.clustercomp) { cluster_compare(argv[optind+1]); return 0; } // If merging or adding need to open the second sequence file if (prog_opts.domerge || prog_opts.doadd) { finp = fopen(argv[optind+2], "r"); if (finp == NULL) { perror(argv[optind]); exit(1); } if (do_cluster == do_pairwise_cluster) read_sequences(finp,numinfirst+reindex_value,num_seqs); else init_sequences(finp,numinfirst+reindex_value,num_seqs); get_clustering(argv[optind+1],0); if (prog_opts.domerge) get_clustering(argv[optind+3],numinfirst); } if (prog_opts.init_cluster) get_clustering(prog_opts.clfname1, 0); if (prog_opts.recluster) reclustering(work,prog_opts.clfname2); else { // This really assumes there is only one thread for suffix if (prog_opts.pairwise==2) { matrix_compare(finp); return 0; } work->workflag = prog_opts.noninterleavednlc;//kludge for suffixarray global_j_end = num_seqs; perform_clustering(work); #ifdef MPI if (myid>0) transmitMPISlaveResponse(work); #endif } if (prog_opts.show_ext) show_EXT(outf); if (prog_opts.show_histo) show_histogram(work); if (prog_opts.show_clust&1) show_clusters(outf); if (prog_opts.show_clust&8) produce_clusters(prog_opts.clthresh,prog_opts.dirname); if (prog_opts.show_perf) show_performance(outf); if (prog_opts.do_dump) { strcpy(chkfile,prog_opts.dname); strcat(chkfile,"-FIN"); fclose(dump_file); dump_file = fopen(chkfile,"w"); times(&usage); ticks = sysconf(_SC_CLK_TCK); fprintf(dump_file,"Completed %ld %ld", usage.tms_utime/ticks, usage.tms_stime*1000/ticks); fclose(dump_file); } if (prog_opts.show_version) fprintf(outf,"\n%s\n",version); fclose(outf); #ifdef MPI MPI_Finalize(); #endif exit(0); }