//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);
}
|