//asc.cpp //email = valcoey@hotmail.com //www = www.oocities.org/valcoey/index.html #include <stdlib.h> #include <string.h> #include <stdio.h> #include "asc.h" void LoadObject(FILE *fin, Object3D& object) { int count, vertexnum, tempA, tempB, tempC; float tempX, tempY, tempZ; char *tempString = new char [80]; while(strncmp(tempString, "Vertices",8)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Vertices\" not found in file.Exitting...\n"); exit(1); } } fgetc(fin); fscanf(fin, "%d", &object.nVertices); object.pVertices = new Point3f[object.nVertices]; while(strncmp(tempString, "Faces", 5)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Faces\" not found in file.Exitting...\n"); exit(1); } } fgetc(fin); fscanf(fin, "%d", &object.nFaces); object.pFaces = new Face[object.nFaces]; while(strncmp(tempString, "Vertex",6)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Vertex\" not found in file.Exitting...\n"); exit(1); } } while(strncmp(tempString,"list:",5)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"list\" not found in file.Exitting...\n"); exit(1); } } for (count = 0; count<object.nVertices; count++) { while(strncmp(tempString,"Vertex",6)) { fscanf(fin, "%s", tempString); if(feof(fin)) { printf("String \"Vertex\" not found in file.Exitting...\n"); exit(1); } } fscanf(fin, "%d", &vertexnum); fscanf(fin, "%s", tempString); fscanf(fin, "%[^:]", tempString); fgetc(fin); fscanf(fin, "%f", &tempX); fscanf(fin, "%[^:]", tempString); fgetc(fin); fscanf(fin, "%f", &tempY); fscanf(fin, "%[^:]", tempString); fgetc(fin); fscanf(fin, "%f", &tempZ); object.pVertices[count].x=tempX; object.pVertices[count].y=tempY; object.pVertices[count].z=tempZ; } while(strncmp(tempString,"Face",4)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Face\" not found in file.Exitting...\n"); exit(1); } } while(strncmp(tempString,"list",4)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"list\" not found in file.Exitting...\n"); exit(1); } } for (count = 0; count<object.nFaces; count++) { while(strncmp(tempString,"Face",4)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Face\" not found in file.Exitting...\n"); exit(1); } } fscanf(fin, "%d", &vertexnum); fscanf(fin, "%s", tempString); while (fgetc(fin) != 'A'); fgetc(fin); fscanf(fin, "%d", &tempA); while (fgetc(fin) != 'B'); fgetc(fin); fscanf(fin, "%d", &tempB); while (fgetc(fin) != 'C'); fgetc(fin); fscanf(fin, "%d", &tempC); object.pFaces[count].vertexIndices[0]=tempA; object.pFaces[count].vertexIndices[1]=tempB; object.pFaces[count].vertexIndices[2]=tempC; } } void LoadScene(char *filename, Object3D& object) { FILE *file_asc; char *tempString = new char[80]; if((file_asc = fopen(filename, "rt"))==NULL) { printf("Error al abrir el archivo!! %s\n", filename); exit(1); } while(!feof(file_asc)) { fscanf(file_asc,"%s",tempString); if(strcmp("Tri-mesh,",tempString)==0) LoadObject(file_asc, object); } fclose(file_asc); } |