/// Convert an AS object to an XML string. std::string ExternalInterface::_objectToXML(as_object *obj) { // GNASH_REPORT_FUNCTION; if ( ! _visited.insert(obj).second ) { return "<circular/>"; } std::stringstream ss; ss << "<object>"; if (obj) { // Get all the properties VM& vm = getVM(*obj); string_table& st = vm.getStringTable(); typedef std::vector<ObjectURI> URIs; URIs uris; Enumerator en(uris); obj->visitKeys(en); for (URIs::const_reverse_iterator i = uris.rbegin(), e = uris.rend(); i != e; ++i) { as_value val = getMember(*obj, *i); const std::string& id = i->toString(st); ss << "<property id=\"" << id << "\">"; ss << _toXML(val); ss << "</property>"; } } ss << "</object>"; return ss.str(); }
std::string RobotNode::toXML( const std::string &modelPath /*= "models"*/, bool storeSensors ) { std::stringstream ss; ss << "\t<RobotNode name='" << name << "'>" << endl; if (!localTransformation.isIdentity()) { ss << "\t\t<Transform>" << endl; ss << BaseIO::toXML(localTransformation,"\t\t\t"); ss << "\t\t</Transform>" << endl; } ss << _toXML(modelPath); if (physics.isSet()) ss << physics.toXML(2); if (visualizationModel && visualizationModel->getTriMeshModel() && visualizationModel->getTriMeshModel()->faces.size()>0) { std::string visuFile = getFilenameReplacementVisuModel(); ss << visualizationModel->toXML(modelPath,visuFile,2); } if (collisionModel && collisionModel->getTriMeshModel() && collisionModel->getTriMeshModel()->faces.size()>0) { std::string colFile = getFilenameReplacementColModel(); ss << collisionModel->toXML(modelPath,colFile,2); } if (storeSensors) { for (size_t i=0;i<sensors.size();i++) { ss << sensors[i]->toXML(modelPath,2); } } std::vector<SceneObjectPtr> children = this->getChildren(); for (size_t i=0;i<children.size();i++) { // check if child is a RobotNode RobotNodePtr crn = boost::dynamic_pointer_cast<RobotNode>(children[i]); if (crn) ss << "\t\t<Child name='" << children[i]->getName() << "'/>" << endl; } ss << "\t</RobotNode>" << endl << endl; return ss.str(); }