TiXmlDocument* exportURDF(const ModelInterface &model) { TiXmlDocument *doc = new TiXmlDocument(); TiXmlElement *robot = new TiXmlElement("robot"); robot->SetAttribute("name", model.name_); doc->LinkEndChild(robot); for (std::map<std::string, MaterialSharedPtr>::const_iterator m=model.materials_.begin(); m!=model.materials_.end(); m++) { CONSOLE_BRIDGE_logDebug("urdfdom: exporting material [%s]\n",m->second->name.c_str()); exportMaterial(*(m->second), robot); } for (std::map<std::string, LinkSharedPtr>::const_iterator l=model.links_.begin(); l!=model.links_.end(); l++) { CONSOLE_BRIDGE_logDebug("urdfdom: exporting link [%s]\n",l->second->name.c_str()); exportLink(*(l->second), robot); } for (std::map<std::string, JointSharedPtr>::const_iterator j=model.joints_.begin(); j!=model.joints_.end(); j++) { CONSOLE_BRIDGE_logDebug("urdfdom: exporting joint [%s]\n",j->second->name.c_str()); exportJoint(*(j->second), robot); } return doc; }
//------------------------------ void MaterialExporter::exportConnectedMaterials ( SceneElement* sceneElement ) { // If we have a external reference, we don't need to export the data here. if ( !sceneElement->getIsLocal() ) return; if ( !sceneElement->getIsExportNode () ) return; // Check if it is a mesh object and an export node if ( sceneElement->getType() == SceneElement::MESH ) { MDagPath dagPath = sceneElement->getPath(); // Attach a function set MStatus status; MFnMesh fnMesh ( dagPath.node(), &status ); if ( status != MStatus::kSuccess ) return; // Find how many shaders are used by this instance of the mesh MObjectArray shaders; MIntArray shaderIndices; unsigned instanceNumber = dagPath.instanceNumber(); fnMesh.getConnectedShaders ( instanceNumber, shaders, shaderIndices ); // Find the polygons that correspond to each materials and export them uint realShaderCount = ( uint ) shaders.length(); uint numShaders = ( uint ) std::max ( ( size_t ) 1, ( size_t ) shaders.length() ); for ( uint shaderPosition = 0; shaderPosition < numShaders; ++shaderPosition ) { if ( shaderPosition < realShaderCount ) { // Add shader-specific parameters (TexCoords sets). // Add symbolic name for the material used on this polygon set. MObject shadingEngine = shaders[shaderPosition]; exportMaterial ( shadingEngine ); } } } // recursive call for all the child elements for ( uint i=0; i<sceneElement->getChildCount(); ++i ) { SceneElement* childElement = sceneElement->getChild ( i ); exportConnectedMaterials ( childElement ); } }
bool exportVisual(Visual &vis, TiXmlElement *xml) { // <visual group="default"> // <origin rpy="0 0 0" xyz="0 0 0"/> // <geometry> // <mesh filename="mesh.dae"/> // </geometry> // <material name="Grey"/> // </visual> TiXmlElement * visual_xml = new TiXmlElement("visual"); exportPose(vis.origin, visual_xml); exportGeometry(vis.geometry, visual_xml); if (vis.material) exportMaterial(*vis.material, visual_xml); xml->LinkEndChild(visual_xml); return true; }
//------------------------------------------------------ void MaterialExporter::exportMaterialsByShaderPlug() { // Get all shaders, which are in the default shader list. MObject defaultShaderList = DagHelper::getNode ( ATTR_DEFAULT_SHADER_LIST1 ); MPlug defaultShadersPlug = MFnDependencyNode ( defaultShaderList ).findPlug ( ATTR_SHADERS ); uint shaderCount = defaultShadersPlug.evaluateNumElements(); for ( uint i = 0; i < shaderCount; ++i ) { MObject shader = DagHelper::getNodeConnectedTo ( defaultShadersPlug.elementByPhysicalIndex ( i ) ); MFnDependencyNode shadingEngineFn ( shader ); // Get the name of the current material (this is the maya material id) String mayaMaterialId = DocumentExporter::mayaNameToColladaName ( shadingEngineFn.name(), true ); bool doExportMaterial = true; bool isFromReferencedFile = shadingEngineFn.isFromReferencedFile(); // bool isDefaulNode = shadingEngineFn.isDefaultNode(); // if ( isDefaulNode ) // { // doExportMaterial = false; // } // else if ( isFromReferencedFile ) if ( isFromReferencedFile ) { if ( ExportOptions::exportXRefs() && ExportOptions::dereferenceXRefs() ) doExportMaterial = true; else doExportMaterial = false; } if ( doExportMaterial ) { MObject shadingEngine = ShaderHelper::getShadingEngine ( shader ); exportMaterial ( shadingEngine ); } } }