/** * Exports the visual representation of all objects (including entities) of the document-> */ bool RExporter::exportDocument() { startExport(); if (!exportDocumentSettings()) { return false; } exportLinetypes(); exportLayers(); exportBlocks(); exportViews(); if (isVisualExporter()) { exportEntities(false); } else { exportEntities(true); } endExport(); return true; }
bool XMLModelDefinitionSerializer::exportScript(ModelDefinitionPtr modelDef, const std::string& directory, const std::string& filename) { if (filename == "") { return false; } TiXmlDocument xmlDoc; try { if (!oslink::directory(directory).isExisting()) { S_LOG_INFO("Creating directory " << directory); oslink::directory::mkdir(directory.c_str()); } TiXmlElement elem("models"); TiXmlElement modelElem("model"); modelElem.SetAttribute("name", modelDef->getName().c_str()); std::string useScaleOf; switch (modelDef->getUseScaleOf()) { case ModelDefinition::MODEL_ALL: useScaleOf = "all"; break; case ModelDefinition::MODEL_DEPTH: useScaleOf = "depth"; break; case ModelDefinition::MODEL_HEIGHT: useScaleOf = "height"; break; case ModelDefinition::MODEL_NONE: useScaleOf = "none"; break; case ModelDefinition::MODEL_WIDTH: useScaleOf = "width"; break; } modelElem.SetAttribute("usescaleof", useScaleOf.c_str()); if (modelDef->getRenderingDistance() != 0.0f) { modelElem.SetDoubleAttribute("renderingdistance", modelDef->getRenderingDistance()); } if (modelDef->getScale() != 0) { modelElem.SetDoubleAttribute("scale", modelDef->getScale()); } modelElem.SetAttribute("showcontained", modelDef->getShowContained() ? "true" : "false"); if (modelDef->getContentOffset() != Ogre::Vector3::ZERO) { TiXmlElement contentOffset("contentoffset"); XMLHelper::fillElementFromVector3(contentOffset, modelDef->getContentOffset()); modelElem.InsertEndChild(contentOffset); } const RenderingDefinition* renderingDef = modelDef->getRenderingDefinition(); if (renderingDef) { TiXmlElement rendering("rendering"); rendering.SetAttribute("scheme", renderingDef->getScheme().c_str()); for (StringParamStore::const_iterator I = renderingDef->getParameters().begin(); I != renderingDef->getParameters().end(); ++I) { TiXmlElement param("param"); param.SetAttribute("key", I->first.c_str()); param.SetValue(I->second.c_str()); rendering.InsertEndChild(param); } modelElem.InsertEndChild(rendering); } TiXmlElement translate("translate"); XMLHelper::fillElementFromVector3(translate, modelDef->getTranslate()); modelElem.InsertEndChild(translate); TiXmlElement rotation("rotation"); XMLHelper::fillElementFromQuaternion(rotation, modelDef->getRotation()); modelElem.InsertEndChild(rotation); modelElem.SetAttribute("icon", modelDef->getIconPath().c_str()); if (modelDef->getRenderingDefinition()) { TiXmlElement rendering("rendering"); rendering.SetAttribute("scheme", modelDef->getRenderingDefinition()->getScheme().c_str()); for (StringParamStore::const_iterator I = modelDef->getRenderingDefinition()->getParameters().begin(); I != modelDef->getRenderingDefinition()->getParameters().end(); ++I) { TiXmlElement param("param"); param.SetAttribute("key", I->first.c_str()); param.SetValue(I->second.c_str()); } } //start with submodels exportSubModels(modelDef, modelElem); //now do actions exportActions(modelDef, modelElem); exportAttachPoints(modelDef, modelElem); exportViews(modelDef, modelElem); exportLights(modelDef, modelElem); exportParticleSystems(modelDef, modelElem); exportBoneGroups(modelDef, modelElem); exportPoses(modelDef, modelElem); elem.InsertEndChild(modelElem); xmlDoc.InsertEndChild(elem); xmlDoc.SaveFile((directory + filename).c_str()); S_LOG_INFO("Saved file " << (directory + filename)); return true; } catch (...) { S_LOG_FAILURE("An error occurred saving the modeldefinition for "<< modelDef->getName() << "." ); return false; } }