예제 #1
0
/// 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();
}
예제 #2
0
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();
}