void TR_svtImp::xmlParse(const string &set, vector< Ptr<Object> > &out) { XMLDocument doc; doc.LoadFile(set.c_str()); XMLElement *root_ = doc.RootElement(); string rootElem(root_->Name()); if (rootElem == "tagset") { string strImage("image"); XMLElement *child = root_->FirstChildElement(strImage.c_str()); while (child) { string imageName = child->FirstChildElement("imageName")->GetText(); string lex = child->FirstChildElement("lex")->GetText(); Ptr<TR_svtObj> curr(new TR_svtObj); curr->fileName = imageName; split(lex, curr->lex, ','); XMLElement *childTaggeds = child->FirstChildElement("taggedRectangles"); if (childTaggeds) { string strTagged("taggedRectangle"); XMLElement *childTagged = childTaggeds->FirstChildElement(strTagged.c_str()); while (childTagged) { tag t; t.value = childTagged->FirstChildElement("tag")->GetText(); t.height = atoi(childTagged->Attribute("height")); t.width = atoi(childTagged->Attribute("width")); t.x = atoi(childTagged->Attribute("x")); t.y = atoi(childTagged->Attribute("y")); curr->tags.push_back(t); childTagged = childTagged->NextSiblingElement(strTagged.c_str()); } } out.push_back(curr); child = child->NextSiblingElement(strImage.c_str()); } } }
bool XMLLodDefinitionSerializer::exportScript(const LodDefinitionPtr& lodDef, const std::string& fileName) const { if (fileName == "") { return false; } TiXmlDocument xmlDoc; if (!oslink::directory(mExportDirectory).isExisting()) { S_LOG_INFO("Creating directory " << mExportDirectory); oslink::directory::mkdir(mExportDirectory.c_str()); } // <lod>...</lod> TiXmlElement rootElem("lod"); { // <automatic enabled="true|false" /> TiXmlElement autElem("automatic"); autElem.SetAttribute("enabled", lodDef->getUseAutomaticLod() ? "true" : "false"); // <manual>...</manual> TiXmlElement manElem("manual"); { // <type>user|automatic</type> TiXmlElement typeElem("type"); TiXmlText typeText(lodDef->getType() == LodDefinition::LT_AUTOMATIC_VERTEX_REDUCTION ? "automatic" : "user"); typeElem.InsertEndChild(typeText); manElem.InsertEndChild(typeElem); // <strategy>distance|pixelcount</strategy> TiXmlElement strategyElem("strategy"); TiXmlText strategyText(lodDef->getStrategy() == LodDefinition::LS_DISTANCE ? "distance" : "pixelcount"); strategyElem.InsertEndChild(strategyText); manElem.InsertEndChild(strategyElem); // <level>...</level> <level>...</level> <level>...</level> const LodDefinition::LodDistanceMap& manualLod = lodDef->getManualLodData(); LodDefinition::LodDistanceMap::const_iterator it; for (it = manualLod.begin(); it != manualLod.end(); it++) { // <level distance="10">...</level> TiXmlElement levelElem("level"); levelElem.SetAttribute("distance", Ogre::StringConverter::toString(it->first)); const LodDistance& dist = it->second; { if (lodDef->getType() == LodDefinition::LT_USER_CREATED_MESH) { // <meshName>.../test.mesh</meshName> TiXmlElement meshElem("meshName"); TiXmlText meshText(dist.getMeshName()); meshElem.InsertEndChild(meshText); levelElem.InsertEndChild(meshElem); } else { // <method>constant|proportional</method> TiXmlElement methodElem("method"); const char* pMethodText; switch (dist.getReductionMethod()) { case Ogre::LodLevel::VRM_PROPORTIONAL: pMethodText = "proportional"; break; case Ogre::LodLevel::VRM_CONSTANT: pMethodText = "constant"; break; case Ogre::LodLevel::VRM_COLLAPSE_COST: pMethodText = "collapsecost"; break; default: assert(0); break; } TiXmlText methodText(pMethodText); methodElem.InsertEndChild(methodText); // <value>0.5</value> TiXmlElement valueElem("value"); TiXmlText valueText(Ogre::StringConverter::toString(dist.getReductionValue())); valueElem.InsertEndChild(valueText); levelElem.InsertEndChild(methodElem); levelElem.InsertEndChild(valueElem); } } manElem.InsertEndChild(levelElem); } } rootElem.InsertEndChild(autElem); rootElem.InsertEndChild(manElem); } xmlDoc.InsertEndChild(rootElem); S_LOG_INFO("Saved file " << (mExportDirectory + fileName)); return xmlDoc.SaveFile((mExportDirectory + fileName).c_str()); }