Beispiel #1
0
    aiMesh* ReadMesh()
    {
        aiMesh* mesh = new aiMesh();

        while(ReadToEndElement(D3MF::XmlTag::mesh))
        {            
            if(xmlReader->getNodeName() == D3MF::XmlTag::vertices)
            {
                ImportVertices(mesh);
            }
            else if(xmlReader->getNodeName() == D3MF::XmlTag::triangles)
            {
                ImportTriangles(mesh);
            }

        }


        return mesh;
    }
bool	SMDImporter::Parse ( FILE *f )
{
	char *buffer = NULL;

	try 
	{
		fseek(f, 0, SEEK_END );
		long fl = ftell ( f );
		fseek (f, 0,SEEK_SET);
		buffer = new char [fl + 7];
		fread (buffer,fl,sizeof(char),f);
		
		buffer[fl] = '\r';
		buffer[fl+1] = '\n';
		buffer[fl+2] = 'E';
		buffer[fl+3] = 'N';
		buffer[fl+4] = 'D';
		buffer[fl+5] = 0;
		
		fixNames ( buffer );

		char seps[] = " \t\n\r";
		char *token = GetNextToken (buffer, seps);
		int	smdversion = NextTokenAsInteger();

		if ( strcmp ( token, "version" ))
		{
			XSILogMessage ( L"SMDImport: Not an SMD file.", XSI::siErrorMsg );
			return false;
		}

		if ( smdversion != 1 )
		{
			XSILogMessage ( L"SMDImport: Attempting to load unsupported SMD version.", XSI::siWarningMsg );
		}

		while (1)
		{
			char *currenttok = GetNextToken (NULL, seps);

			if ( !strcmp ( currenttok, "nodes"))
			{
				if ( !ImportNodes () )
				{
					return false;
				}
			}

			if ( !strcmp ( currenttok, "skeleton"))
			{
				if ( !ImportSkeleton () )
				{
					return false;
				}
			}

			
			if ( !strcmp ( currenttok, "triangles"))
			{
				if ( !ImportTriangles () )
				{
					return false;
				}
			}

			if ( !strcmp ( currenttok, "vertexanimation"))
			{
				if ( !ImportVertexAnimation () )
				{
					return false;
				}
			}

			
			
			if (!strcmp ( currenttok, "END"))
			{
				break;	// were done
			}

		}

		//
		// Create Hierarchy
		//

		
	}
	catch (...)
	{
		XSILogMessage ( L"SMDImport: Invalid or corrupted SMD file.", XSI::siErrorMsg );
		
		return false;
	}

	delete [] buffer;

	return true;
}