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