good ol ASE file parser...

Started by
1 comment, last by adam17 20 years, 3 months ago
all of a sudden my file importer stopped working on me and started giving an access violation. i didn''t change a thing. here is my import function (i know its messy):

void Import_Obj()
{
	fseek(infile, 0L, SEEK_SET);

	outfile << "Import_Obj()" << endl;

	while(!feof(infile))
	{
		fscanf(infile, "%s", &stream);
		S_stream = stream;
		outfile << stream << endl;

		if(S_stream == "*GEOMOBJECT")
		{
			num_obj++;
			Mesh_array.reserve(256);

			Mesh_array.resize(num_obj);

			//outfile << "*GEOMOBJECT" << endl;

		}
		
		if(S_stream == "*MESH_NUMTVERTEX")
		{
			fscanf(infile, "%i", &Mesh_array[num_obj-1].num_t_vertex);

			//outfile << "NUM tVERTEX" << endl;

		}
				
		if(S_stream == "*MESH_NUMVERTEX")
		{
			fscanf(infile, "%i", &Mesh_array[num_obj-1].num_vertex);

			Mesh_array[num_obj-1].vertex.resize(Mesh_array[num_obj-1].num_vertex);
			Mesh_array[num_obj-1].vnormal.resize(Mesh_array[num_obj-1].num_vertex);

			//outfile << "NUM mVERTEX" << endl;

		}

		if(S_stream == "*MESH_NUMFACES")
		{
			fscanf(infile, "%i", &Mesh_array[num_obj-1].num_faces);

			Mesh_array[num_obj-1].face.resize(Mesh_array[num_obj-1].num_faces);
			Mesh_array[num_obj-1].fnormal.resize(Mesh_array[num_obj-1].num_faces);

			//outfile << "NUM FACES" << endl;

		}

		if(S_stream == "*MESH_VERTEX_LIST")
		{
			fscanf(infile, "%s", &stream);									//inputs bracket

			//outfile << "VERTEX LIST:" << endl;


			for(int i=0; i<Mesh_array[num_obj-1].num_vertex; i++)
			{
				fscanf(infile, "%s", &stream);								//inputs "*MESH_VERTEX"

				fscanf(infile, "%s", &stream);								//inputs vertex index


				//Y and Z values are swapped for 3D Studio files

				fscanf(infile, "%f", &Mesh_array[num_obj-1].vertex[i].x);	//converts x value & stores it

				fscanf(infile, "%f", &Mesh_array[num_obj-1].vertex[i].z);	//converts z value & stores it

				fscanf(infile, "%f", &Mesh_array[num_obj-1].vertex[i].y);	//converts y value & stores it


				//outfile << Mesh_array[num_obj-1].vertex.x &lt;&lt; " ";
</font>
				<font color=gray>//outfile &lt;&lt; Mesh_array[num_obj-1].vertex.y &lt;&lt; " ";
</font>
				<font color=gray>//outfile &lt;&lt; Mesh_array[num_obj-1].vertex.z &lt;&lt; endl;
</font>
			}
			<font color=gray>//outfile &lt;&lt; endl;
</font>
		}
		
		<font color=blue>if</font>(S_stream == <font color=darkred>"*MESH_FACE_LIST"</font>)
		{
			fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);
			<font color=gray>//outfile &lt;&lt; "FACE LIST:" &lt;&lt; endl;
</font>

			<font color=blue>for</font>(<font color=blue>int</font> i=0; i&lt;Mesh_array[<font color=purple>num_obj-1</font>].num_faces; i++)
			{
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);

				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%i"</font></font></font></font></font></font>, &Mesh_array[<font color=purple>num_obj-1</font>].face[<font color=purple>i</font>].x);
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%i"</font></font></font></font></font></font>, &Mesh_array[<font color=purple>num_obj-1</font>].face[<font color=purple>i</font>].y);
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%i"</font></font></font></font></font></font>, &Mesh_array[<font color=purple>num_obj-1</font>].face[<font color=purple>i</font>].z);

				<font color=blue>for</font>(<font color=blue>int</font> loop=0; loop&lt;10; loop++)
					fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);
			}
		}

		<font color=blue>if</font>(S_stream == <font color=darkred>"*MESH_NORMALS"</font>)
		{
			fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);
			<font color=gray>//outfile &lt;&lt; "MESH NORMALS" &lt;&lt; endl;
</font>

			<font color=blue>for</font>(<font color=blue>int</font> i=0; i&lt;Mesh_array[<font color=purple>num_obj-1</font>].num_vertex; i++)
			{
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);

				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%f"</font></font></font></font></font></font></font></font></font>, &Mesh_array[<font color=purple>num_obj-1</font>].fnormal[<font color=purple>i</font>].x);
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%f"</font></font></font></font></font></font></font></font></font>, &Mesh_array[<font color=purple>num_obj-1</font>].fnormal[<font color=purple>i</font>].z);
				fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%f"</font></font></font></font></font></font></font></font></font>, &Mesh_array[<font color=purple>num_obj-1</font>].fnormal[<font color=purple>i</font>].y);

				<font color=blue>for</font>(<font color=blue>int</font> loop=0; loop&lt;3; loop++)
				{
					fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);
					fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%s"</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>, &stream);

					fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%f"</font></font></font></font></font></font></font></font></font>, &Mesh_array[<font color=purple>num_obj-1</font>].vnormal[<font color=purple>loop</font>].x);
					fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%f"</font></font></font></font></font></font></font></font></font>, &Mesh_array[<font color=purple>num_obj-1</font>].vnormal[<font color=purple>loop</font>].z);
					fscanf(infile, <font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred><font color=darkred>"%f"</font></font></font></font></font></font></font></font></font>, &Mesh_array[<font color=purple>num_obj-1</font>].vnormal[<font color=purple>loop</font>].y);
				}
			}
		}
	}
}
</pre><!–ENDSCRIPT–>

…and here is my output:

   <!–STARTSCRIPT–><pre class="source">
File exists
Import_Obj()
*3DSMAX_ASCIIEXPORT
200
*COMMENT
<font color=darkred>"AsciiExport
Version
2.00
-
Thu
Dec
11
17:41:39
2003"</font>
*SCENE
{
*SCENE_FILENAME
""
*SCENE_FIRSTFRAME
0
*SCENE_LASTFRAME
100
*SCENE_FRAMESPEED
30
*SCENE_TICKSPERFRAME
160
</pre><!–ENDSCRIPT–>

this is not the &#111;nly ASE file it does this &#111;n.  the parser always stops at the same spot.  any ideas what could be going wrong?
thanks ahead of time
-adam   
Advertisement
ive just wrote one today!
i can send it to you if you want. it loads vertex, normal, texture coord arrays and indicies (the texcoord loads incorrectly i think)

"Knowledge is no more expensive than ignorance, and at least as satisfying." -Barrin
"Knowledge is no more expensive than ignorance, and at least as satisfying." -Barrin
ooooo man that would be nice!! could u email it to me? adam17@houston.rr.com
how is it compiled? .cpp and .h files, dll''s?
anyway that would be so cool thanks alot orbano!
-adam

This topic is closed to new replies.

Advertisement