int main(int argc, char *argv[]) { char* file_name; if (argc == 2) { file_name = argv[1]; } else { fprintf(stderr,"usage:\n"); fprintf(stderr,"ps_load <file_name>\n"); exit(1); } PSreader* psreader = 0; if (strstr(file_name, "compressed")) { PSreader_oocc* psreader_oocc = new PSreader_oocc(); psreader_oocc->open(file_name); psreader = psreader_oocc; } else if (strstr(file_name, ".sma") || strstr(file_name, ".obj") || strstr(file_name, ".smf")) { FILE* sma_fp = fopen(file_name, "r"); if (sma_fp == 0) { fprintf(stderr,"ERROR: cannot open %s\n",file_name); exit(1); } SMreader_sma* smreader_sma = new SMreader_sma(); smreader_sma->open(sma_fp); PSconverter* psconverter = new PSconverter(); psconverter->open(smreader_sma, 256, 512); psreader = psconverter; } else { fprintf(stderr,"ERROR: cannot guess input type from file name\n"); exit(1); } float* vertices = 0; int vertices_alloced = 1024; int vertices_number = 0; int* faces = 0; int faces_alloced = 512; int faces_number = 0; if (psreader->nverts == -1) { fprintf(stderr,"nverts not defined\n"); } else { fprintf(stderr,"nverts %d\n",psreader->nverts); vertices_alloced = psreader->nverts; } vertices = allocVertices(0, vertices_alloced); if (psreader->nfaces == -1) { fprintf(stderr,"nfaces not defined\n"); } else { fprintf(stderr,"nfaces %d\n",psreader->nfaces); faces_alloced = psreader->nfaces; } faces = allocFaces(0, faces_alloced); int i; while(psreader->read_triangle()) { // make sure there is memory for the next face if (faces_number == faces_alloced) { faces_alloced *= 2; faces = allocFaces(faces, faces_alloced); } // copy new face into memory VecCopy3iv(&(faces[faces_number*3]), psreader->t_idx); faces_number++; for (i = 0; i < 3; i++) { // check for new vertices if (PS_IS_NEW_VERTEX(psreader->t_vflag[i])) { // make sure there is memory for the next vertex if (vertices_number == vertices_alloced) { vertices_alloced *= 2; vertices = allocVertices(vertices, vertices_alloced); } // copy new face into memory VecCopy3fv(&(vertices[vertices_number*3]), psreader->t_pos_f[i]); vertices_number++; } } } fprintf(stderr,"vertex counters: %d %d %d (should be equal)\n",vertices_number,psreader->v_count,psreader->nverts); fprintf(stderr,"face counters: %d %d %d (should be equal)\n",faces_number,psreader->f_count,psreader->nfaces); psreader->close(); deallocVertices(vertices); deallocFaces(faces); return 1; }
void veccopy3iv(int v[3], const int a[3]) { VecCopy3iv(v, a); }