#include "submesh.h" namespace OgreMayaExporter { /***** Class Submesh *****/ // constructor Submesh::Submesh(const MString& name) { clear(); m_name = name; } // destructor Submesh::~Submesh() { clear(); } // clear data void Submesh::clear() { m_name = ""; m_numTriangles = 0; m_pMaterial = NULL; m_vertices.clear(); m_faces.clear(); m_uvsets.clear(); m_use32bitIndexes = false; } // return number of triangles composing the mesh long Submesh::numTriangles() { return m_numTriangles; } // return number of vertices composing the mesh long Submesh::numVertices() { return m_numVertices; } // return submesh name MString& Submesh::name() { return m_name; } /***** load data *****/ MStatus Submesh::loadMaterial(MObject& shader,MStringArray& uvsets,ParamList& params) { MPlug plug; MPlugArray srcplugarray; bool foundShader = false; MStatus stat; MFnLambertShader* pShader; //get shader from shading group MFnDependencyNode shadingGroup(shader); plug = shadingGroup.findPlug("surfaceShader"); plug.connectedTo(srcplugarray,true,false,&stat); for (int i=0; iname().asChar() << "\n"; //check if this material has already been created Material* pMaterial = MaterialSet::getSingleton().getMaterial(pShader->name()); //if the material has already been created, update the pointer if (pMaterial) m_pMaterial = pMaterial; //else create it and add it to the material set else { pMaterial = new Material(); pMaterial->load(pShader,uvsets,params); m_pMaterial = pMaterial; MaterialSet::getSingleton().addMaterial(pMaterial); } //delete temporary shader delete pShader; //loading complete return MS::kSuccess; } MStatus Submesh::load(std::vector& faces, std::vector& vertInfo, MFloatPointArray& points, MFloatVectorArray& normals, MStringArray& texcoordsets,ParamList& params,bool opposite) { //save uvsets info for (int i=m_uvsets.size(); i 65535) || (m_faces.size() > 65535)) m_use32bitIndexes = true; else m_use32bitIndexes = false; return MS::kSuccess; } /***** write data *****/ MStatus Submesh::writeXML(ParamList ¶ms) { // Start submesh description params.outMesh << "\t\tname().asChar() << "\" "; // Write use32bitIndexes flag params.outMesh << "use32bitindexes=\""; if (m_use32bitIndexes) params.outMesh << "true"; else params.outMesh << "false"; params.outMesh << "\" "; // Write use32bitIndexes flag params.outMesh << "usesharedvertices=\""; if (params.useSharedGeom) params.outMesh << "true"; else params.outMesh << "false"; params.outMesh << "\" "; // Write operation type flag params.outMesh << "operationtype=\"triangle_list\">\n"; // Write submesh polygons params.outMesh << "\t\t\t\n"; for (int i=0; i\n"; } params.outMesh << "\t\t\t\n"; // Write mesh geometry if (!params.useSharedGeom) { params.outMesh << "\t\t\t\n"; params.outMesh << "\t\t\t\t\n"; else params.outMesh << 0 << "\">\n"; //write vertex data for (i=0; i\n"; //write vertex position params.outMesh << "\t\t\t\t\t\t\n"; //write vertex normal if (params.exportVertNorm) { params.outMesh << "\t\t\t\t\t\t\n"; } //write vertex colour if (params.exportVertCol) { float r,g,b,a; if (params.exportVertColWhite) { r = g = b = a = 1.0f; } else { r = m_vertices[i].r; g = m_vertices[i].g; b = m_vertices[i].b; a = m_vertices[i].a; } params.outMesh << "\t\t\t\t\t\t\n"; }//write vertex texture coordinates if (params.exportTexCoord) { for (int j=0; j\n"; } } params.outMesh << "\t\t\t\t\t\n"; } //end vertex data params.outMesh << "\t\t\t\t\n"; //end geometry description params.outMesh << "\t\t\t\n"; // Write bone assignments if (params.exportVBA) { params.outMesh << "\t\t\t\n"; for (i=0; i 0.001) { params.outMesh << "\t\t\t\t\n"; } } } params.outMesh << "\t\t\t\n"; } } // End submesh description params.outMesh << "\t\t\n"; return MS::kSuccess; } }; //end of namespace