]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
feat : Cylinder + Refacto and Clean
authorNicolas RECHATIN <nicolas.rechatin@cea.fr>
Fri, 6 Jan 2023 13:17:40 +0000 (14:17 +0100)
committerNicolas RECHATIN <nicolas.rechatin@cea.fr>
Fri, 6 Jan 2023 13:17:40 +0000 (14:17 +0100)
src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp
src/ExchangePlugin/ExchangePlugin_ExportRoot.cpp
src/ExchangePlugin/ExchangePlugin_ExportRoot.h
src/GeomAlgoAPI/GeomAlgoAPI_ROOTExport.cpp
src/GeomAlgoAPI/GeomAlgoAPI_ROOTExport.h

index fea4b32193e907e31473c91dac62e884feb30add..95ac37d45d9965c47f0c13151ba3e5494a8441eb 100644 (file)
@@ -76,9 +76,9 @@
 #include <ExchangePlugin_Tools.h>
 
 #ifdef WIN32
-# define _separator_ '\\'
+#define _separator_ '\\'
 #else
-# define _separator_ '/'
+#define _separator_ '/'
 #endif
 
 ExchangePlugin_ExportFeature::ExchangePlugin_ExportFeature()
@@ -87,7 +87,7 @@ ExchangePlugin_ExportFeature::ExchangePlugin_ExportFeature()
 
 ExchangePlugin_ExportFeature::~ExchangePlugin_ExportFeature()
 {
-  // TODO Auto-generated destructor stub
+    // TODO Auto-generated destructor stub
 }
 
 /*
@@ -95,91 +95,92 @@ ExchangePlugin_ExportFeature::~ExchangePlugin_ExportFeature()
  */
 void ExchangePlugin_ExportFeature::initAttributes()
 {
-  data()->addAttribute(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::FILE_PATH_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::FILE_FORMAT_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::SELECTION_LIST_ID(),
-    ModelAPI_AttributeSelectionList::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID(),
-    ModelAPI_AttributeSelectionList::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED(),
-    ModelAPI_AttributeSelection::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE(),
-   ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::STL_RELATIVE(),
-    ModelAPI_AttributeDouble::typeId());
-
-  double defelection = Config_PropManager::real("Visualization", "body_deflection");
-  real(ExchangePlugin_ExportFeature::STL_RELATIVE())->setValue(defelection);
-
-  data()->addAttribute(ExchangePlugin_ExportFeature::STL_ABSOLUTE(),
-    ModelAPI_AttributeDouble::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE(),
-   ModelAPI_AttributeString::typeId());
-
-  ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
-    ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID());
-  ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
-    ExchangePlugin_ExportFeature::STL_FILE_PATH_ID());
-  ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
-    ExchangePlugin_ExportFeature::XAO_AUTHOR_ID());
-  ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
-    ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID());
-  ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
-    ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID());
-
-  data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_FILE_PATH_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_MANAGER_NAME_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_MANAGER_TITLE_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::EXP_NAME_FILE_ID(),
-    ModelAPI_AttributeString::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::MAIN_OBJECT_ID(),
-    ModelAPI_AttributeSelection::typeId());
-  data()->addAttribute(ExchangePlugin_ExportFeature::MAT_FILE_ID(),
-    ModelAPI_AttributeString::typeId());
-
-  // to support previous version of document, move the selection list
-  // if the type of export operation is XAO
-  AttributeStringPtr aTypeAttr = string(EXPORT_TYPE_ID());
-  if (aTypeAttr->isInitialized() && aTypeAttr->value() == "XAO") {
-    bool aWasBlocked = data()->blockSendAttributeUpdated(true, false);
-    AttributeSelectionListPtr aSelList = selectionList(SELECTION_LIST_ID());
-    AttributeSelectionListPtr aXAOSelList = selectionList(XAO_SELECTION_LIST_ID());
-    if (aSelList->size() > 0 && aXAOSelList->size() == 0)
-      aSelList->copyTo(aXAOSelList);
-    aSelList->clear();
-    data()->blockSendAttributeUpdated(aWasBlocked, false);
-  }
+    data()->addAttribute(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::FILE_PATH_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::FILE_FORMAT_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::SELECTION_LIST_ID(),
+                         ModelAPI_AttributeSelectionList::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID(),
+                         ModelAPI_AttributeSelectionList::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED(),
+                         ModelAPI_AttributeSelection::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::STL_RELATIVE(),
+                         ModelAPI_AttributeDouble::typeId());
+
+    double defelection = Config_PropManager::real("Visualization", "body_deflection");
+    real(ExchangePlugin_ExportFeature::STL_RELATIVE())->setValue(defelection);
+
+    data()->addAttribute(ExchangePlugin_ExportFeature::STL_ABSOLUTE(),
+                         ModelAPI_AttributeDouble::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE(),
+                         ModelAPI_AttributeString::typeId());
+
+    ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
+                                                                 ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID());
+    ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
+                                                                 ExchangePlugin_ExportFeature::STL_FILE_PATH_ID());
+    ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
+                                                                 ExchangePlugin_ExportFeature::XAO_AUTHOR_ID());
+    ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
+                                                                 ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID());
+    ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
+                                                                 ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID());
+
+    data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_FILE_PATH_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_MANAGER_NAME_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_MANAGER_TITLE_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::EXP_NAME_FILE_ID(),
+                         ModelAPI_AttributeString::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::MAIN_OBJECT_ID(),
+                         ModelAPI_AttributeSelection::typeId());
+    data()->addAttribute(ExchangePlugin_ExportFeature::MAT_FILE_ID(),
+                         ModelAPI_AttributeString::typeId());
+
+    // to support previous version of document, move the selection list
+    // if the type of export operation is XAO
+    AttributeStringPtr aTypeAttr = string(EXPORT_TYPE_ID());
+    if (aTypeAttr->isInitialized() && aTypeAttr->value() == "XAO")
+    {
+        bool aWasBlocked = data()->blockSendAttributeUpdated(true, false);
+        AttributeSelectionListPtr aSelList = selectionList(SELECTION_LIST_ID());
+        AttributeSelectionListPtr aXAOSelList = selectionList(XAO_SELECTION_LIST_ID());
+        if (aSelList->size() > 0 && aXAOSelList->size() == 0)
+            aSelList->copyTo(aXAOSelList);
+        aSelList->clear();
+        data()->blockSendAttributeUpdated(aWasBlocked, false);
+    }
 }
 
-void ExchangePlugin_ExportFeature::attributeChanged(const std::stringtheID)
+void ExchangePlugin_ExportFeature::attributeChanged(const std::string &theID)
 {
-  if (theID == XAO_FILE_PATH_ID()) {
-    string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(
-      string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value());
-  }
-  else if (theID == STL_FILE_PATH_ID()) {
-    string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(
-      string(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID())->value());
-  }
-  else if (theID == ROOT_FILE_PATH_ID()) {
-    string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(
-      string(ExchangePlugin_ExportFeature::ROOT_FILE_PATH_ID())->value());
-  }
+    if (theID == XAO_FILE_PATH_ID())
+    {
+        string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value());
+    }
+    else if (theID == STL_FILE_PATH_ID())
+    {
+        string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(string(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID())->value());
+    }
+    else if (theID == ROOT_FILE_PATH_ID())
+    {
+        string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(string(ExchangePlugin_ExportFeature::ROOT_FILE_PATH_ID())->value());
+    }
 }
 
 /*
@@ -187,551 +188,631 @@ void ExchangePlugin_ExportFeature::attributeChanged(const std::string& theID)
  */
 void ExchangePlugin_ExportFeature::execute()
 {
-  AttributeStringPtr aFormatAttr =
-      this->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID());
-  std::string aFormat = aFormatAttr->value();
+    AttributeStringPtr aFormatAttr =
+        this->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID());
+    std::string aFormat = aFormatAttr->value();
 
-  AttributeStringPtr aFilePathAttr =
-      this->string(ExchangePlugin_ExportFeature::FILE_PATH_ID());
+    AttributeStringPtr aFilePathAttr =
+        this->string(ExchangePlugin_ExportFeature::FILE_PATH_ID());
 
-  std::string aFilePath = aFilePathAttr->value();
-  if (aFilePath.empty())
-    return;
+    std::string aFilePath = aFilePathAttr->value();
+    if (aFilePath.empty())
+        return;
 
-  exportFile(aFilePath, aFormat);
+    exportFile(aFilePath, aFormat);
 }
 
-void ExchangePlugin_ExportFeature::exportFile(const std::stringtheFileName,
-                                              const std::stringtheFormat)
+void ExchangePlugin_ExportFeature::exportFile(const std::string &theFileName,
+                                              const std::string &theFormat)
 {
-  std::string aFormatName = theFormat;
-
-  if (aFormatName.empty()) { // get default format for the extension
-    // ".brep" -> "BREP"
-    std::string anExtension = GeomAlgoAPI_Tools::File_Tools::extension(theFileName);
-    if (anExtension == "BREP" || anExtension == "BRP") {
-      aFormatName = "BREP";
-    } else if (anExtension == "STEP" || anExtension == "STP") {
-      aFormatName = "STEP";
-    } else if (anExtension == "IGES" || anExtension == "IGS") {
-      aFormatName = "IGES-5.1";
-    } else if (anExtension == "C") {
-      aFormatName = "ROOT";
-    } else {
-      aFormatName = anExtension;
+    std::string aFormatName = theFormat;
+
+    if (aFormatName.empty())
+    { // get default format for the extension
+        // ".brep" -> "BREP"
+        std::string anExtension = GeomAlgoAPI_Tools::File_Tools::extension(theFileName);
+        if (anExtension == "BREP" || anExtension == "BRP")
+        {
+            aFormatName = "BREP";
+        }
+        else if (anExtension == "STEP" || anExtension == "STP")
+        {
+            aFormatName = "STEP";
+        }
+        else if (anExtension == "IGES" || anExtension == "IGS")
+        {
+            aFormatName = "IGES-5.1";
+        }
+        else if (anExtension == "C")
+        {
+            aFormatName = "ROOT";
+        }
+        else
+        {
+            aFormatName = anExtension;
+        }
+    }
+
+    if (aFormatName == "XAO")
+    {
+        exportXAO(theFileName);
+        return;
     }
-  }
-
-  if (aFormatName == "XAO") {
-    exportXAO(theFileName);
-    return;
-  } else if (aFormatName == "STL") {
-    exportSTL(theFileName);
-    return;
-  } else if (aFormatName == "ROOT") {
-    exportROOT(theFileName);
-    return;
-  }
-
-  // make shape for export from selected shapes
-  AttributeSelectionListPtr aSelectionListAttr =
-      this->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID());
-  std::list<GeomShapePtr> aShapes;
-  std::list<ResultPtr> aContexts;
-  for (int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i) {
-    AttributeSelectionPtr anAttrSelection = aSelectionListAttr->value(i);
-
-    /// do not export pictures
-    ResultPtr aBodyContext =
-      std::dynamic_pointer_cast<ModelAPI_Result>(anAttrSelection->context());
-    if (aBodyContext.get() && aBodyContext->hasTexture())
-      continue;
-
-    std::shared_ptr<GeomAPI_Shape> aCurShape = anAttrSelection->value();
-    if (aCurShape.get() == NULL)
-      aCurShape = anAttrSelection->context()->shape();
-    if (aCurShape.get() != NULL)
+    else if (aFormatName == "STL")
     {
-      aShapes.push_back(aCurShape);
-      aContexts.push_back(anAttrSelection->context());
+        exportSTL(theFileName);
+        return;
+    }
+    else if (aFormatName == "ROOT")
+    {
+        exportROOT(theFileName);
+        return;
+    }
+
+    // make shape for export from selected shapes
+    AttributeSelectionListPtr aSelectionListAttr =
+        this->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID());
+    std::list<GeomShapePtr> aShapes;
+    std::list<ResultPtr> aContexts;
+    for (int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i)
+    {
+        AttributeSelectionPtr anAttrSelection = aSelectionListAttr->value(i);
+
+        /// do not export pictures
+        ResultPtr aBodyContext =
+            std::dynamic_pointer_cast<ModelAPI_Result>(anAttrSelection->context());
+        if (aBodyContext.get() && aBodyContext->hasTexture())
+            continue;
+
+        std::shared_ptr<GeomAPI_Shape> aCurShape = anAttrSelection->value();
+        if (aCurShape.get() == NULL)
+            aCurShape = anAttrSelection->context()->shape();
+        if (aCurShape.get() != NULL)
+        {
+            aShapes.push_back(aCurShape);
+            aContexts.push_back(anAttrSelection->context());
+        }
+    }
+
+    // Store compound if we have more than one shape.
+    std::shared_ptr<GeomAPI_Shape> aShape =
+        aShapes.size() == 1 ? aShapes.front() : GeomAlgoAPI_CompoundBuilder::compound(aShapes);
+
+    // Perform the export
+    std::string anError;
+    bool aResult = false;
+    if (aFormatName == "BREP")
+    {
+        aResult = BREPExport(theFileName, aFormatName, aShape, anError);
+    }
+    else if (aFormatName == "STEP")
+    {
+        aResult = STEPExport(theFileName, aShapes, aContexts, anError);
+    }
+    else if (aFormatName.substr(0, 4) == "IGES")
+    {
+        aResult = IGESExport(theFileName, aFormatName, aShape, anError);
+    }
+    else
+    {
+        anError = "Unsupported format: " + aFormatName;
+    }
+
+    if (!aResult || !anError.empty())
+    {
+        setError("An error occurred while exporting " + theFileName + ": " + anError);
+        return;
     }
-  }
-
-  // Store compound if we have more than one shape.
-  std::shared_ptr<GeomAPI_Shape> aShape =
-    aShapes.size() == 1 ? aShapes.front() : GeomAlgoAPI_CompoundBuilder::compound(aShapes);
-
-  // Perform the export
-  std::string anError;
-  bool aResult = false;
-  if (aFormatName == "BREP") {
-    aResult = BREPExport(theFileName, aFormatName, aShape, anError);
-  } else if (aFormatName == "STEP") {
-    aResult = STEPExport(theFileName, aShapes, aContexts, anError);
-  } else if (aFormatName.substr(0, 4) == "IGES") {
-    aResult = IGESExport(theFileName, aFormatName, aShape, anError);
-  } else {
-    anError = "Unsupported format: " + aFormatName;
-  }
-
-  if (!aResult || !anError.empty()) {
-    setError("An error occurred while exporting " + theFileName + ": " + anError);
-    return;
-  }
 }
 
 /// Returns XAO string by the value from the table
-static std::string valToString(const ModelAPI_AttributeTables::Value& theVal,
-  const ModelAPI_AttributeTables::ValueType& theType) {
-  std::ostringstream aStr; // the resulting string value
-  switch(theType) {
-  case ModelAPI_AttributeTables::BOOLEAN:
-    aStr<<(theVal.myBool ? "true" : "false");
-    break;
-  case ModelAPI_AttributeTables::INTEGER:
-    aStr<<theVal.myInt;
-    break;
-  case ModelAPI_AttributeTables::DOUBLE:
-    aStr<<theVal.myDouble;
-    break;
-  case ModelAPI_AttributeTables::STRING:
-    aStr<<theVal.myStr;
-    break;
-  }
-  return aStr.str();
+static std::string valToString(const ModelAPI_AttributeTables::Value &theVal,
+                               const ModelAPI_AttributeTables::ValueType &theType)
+{
+    std::ostringstream aStr; // the resulting string value
+    switch (theType)
+    {
+    case ModelAPI_AttributeTables::BOOLEAN:
+        aStr << (theVal.myBool ? "true" : "false");
+        break;
+    case ModelAPI_AttributeTables::INTEGER:
+        aStr << theVal.myInt;
+        break;
+    case ModelAPI_AttributeTables::DOUBLE:
+        aStr << theVal.myDouble;
+        break;
+    case ModelAPI_AttributeTables::STRING:
+        aStr << theVal.myStr;
+        break;
+    }
+    return aStr.str();
 }
 
-void ExchangePlugin_ExportFeature::exportSTL(const std::stringtheFileName)
+void ExchangePlugin_ExportFeature::exportSTL(const std::string &theFileName)
 {
-  // Get shape.
-  AttributeSelectionPtr aSelection = selection(STL_OBJECT_SELECTED());
-  GeomShapePtr aShape = aSelection->value();
-  if (!aShape.get()) {
-    aShape = aSelection->context()->shape();
-  }
-
-  // Get relative value and percent flag.
-  double aValue;
-  bool anIsRelative = false;
-  bool anIsASCII = false;
-
-  if (string(STL_DEFLECTION_TYPE())->value() == STL_DEFLECTION_TYPE_RELATIVE()) {
-    aValue = real(STL_RELATIVE())->value();
-    anIsRelative = true;
-  } else {
-    aValue = real(STL_ABSOLUTE())->value();
-  }
-
-  if (string(STL_FILE_TYPE())->value() == STL_FILE_TYPE_ASCII()) {
-    anIsASCII = true;
-  }
-  // Perform the export
-  std::string anError;
-  bool aResult = false;
-
-  aResult = STLExport(theFileName,
-                      aShape,
-                      aValue,
-                      anIsRelative,
-                      anIsASCII,
-                      anError);
-
-  if (!aResult || !anError.empty()) {
-    setError("An error occurred while exporting " + theFileName + ": " + anError);
-    return;
-  }
-}
+    // Get shape.
+    AttributeSelectionPtr aSelection = selection(STL_OBJECT_SELECTED());
+    GeomShapePtr aShape = aSelection->value();
+    if (!aShape.get())
+    {
+        aShape = aSelection->context()->shape();
+    }
 
+    // Get relative value and percent flag.
+    double aValue;
+    bool anIsRelative = false;
+    bool anIsASCII = false;
 
-void ExchangePlugin_ExportFeature::exportXAO(const std::string& theFileName)
+    if (string(STL_DEFLECTION_TYPE())->value() == STL_DEFLECTION_TYPE_RELATIVE())
+    {
+        aValue = real(STL_RELATIVE())->value();
+        anIsRelative = true;
+    }
+    else
+    {
+        aValue = real(STL_ABSOLUTE())->value();
+    }
+
+    if (string(STL_FILE_TYPE())->value() == STL_FILE_TYPE_ASCII())
+    {
+        anIsASCII = true;
+    }
+    // Perform the export
+    std::string anError;
+    bool aResult = false;
+
+    aResult = STLExport(theFileName,
+                        aShape,
+                        aValue,
+                        anIsRelative,
+                        anIsASCII,
+                        anError);
+
+    if (!aResult || !anError.empty())
+    {
+        setError("An error occurred while exporting " + theFileName + ": " + anError);
+        return;
+    }
+}
+
+void ExchangePlugin_ExportFeature::exportXAO(const std::string &theFileName)
 {
-  try {
-
-  std::string anError;
-  XAO::Xao aXao;
-
-  // author
-
-  std::string anAuthor = string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())->value();
-  aXao.setAuthor(anAuthor);
-
-  // make shape for export from all results
-  std::list<GeomShapePtr> aShapes;
-  std::list<ResultPtr> aResults;
-  std::list<DocumentPtr> aDocuments; /// documents of Parts selected and used in export
-  std::map<DocumentPtr, GeomTrsfPtr> aDocTrsf; /// translation of the part
-
-  bool anExCludedIsImage = false;
-  AttributeSelectionListPtr aSelection = selectionList(XAO_SELECTION_LIST_ID());
-  bool aIsSelection = aSelection->isInitialized() && aSelection->size() > 0;
-  if (aIsSelection) { // a mode for export to geom result by result
-    for (int a = 0; a < aSelection->size(); a++) {
-      AttributeSelectionPtr anAttr = aSelection->value(a);
-      ResultPtr aBodyContext =
-        std::dynamic_pointer_cast<ModelAPI_Result>(anAttr->context());
-      if (aBodyContext.get() && !aBodyContext->isDisabled() && aBodyContext->shape().get()) {
-          /// do not export pictures
-          if (aBodyContext->hasTexture()){
-            anExCludedIsImage = true;
-            continue;
-          }
-        aResults.push_back(aBodyContext);
-        GeomShapePtr aShape = anAttr->value();
-        if (!aShape.get())
-          aShape = aBodyContext->shape();
-        aShapes.push_back(aShape);
-        if (aBodyContext->groupName() == ModelAPI_ResultPart::group()) {
-          ResultPartPtr aResPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aBodyContext);
-          DocumentPtr aPartDoc = aResPart->partDoc();
-          if (!aPartDoc.get() || !aPartDoc->isOpened()) { // document is not accessible
-            std::string msg = "Can not export XAO for not loaded part";
-            Events_InfoMessage("ExportFeature", msg, this).send();
+    try
+    {
+
+        std::string anError;
+        XAO::Xao aXao;
+
+        // author
+
+        std::string anAuthor = string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())->value();
+        aXao.setAuthor(anAuthor);
+
+        // make shape for export from all results
+        std::list<GeomShapePtr> aShapes;
+        std::list<ResultPtr> aResults;
+        std::list<DocumentPtr> aDocuments;           /// documents of Parts selected and used in export
+        std::map<DocumentPtr, GeomTrsfPtr> aDocTrsf; /// translation of the part
+
+        bool anExCludedIsImage = false;
+        AttributeSelectionListPtr aSelection = selectionList(XAO_SELECTION_LIST_ID());
+        bool aIsSelection = aSelection->isInitialized() && aSelection->size() > 0;
+        if (aIsSelection)
+        { // a mode for export to geom result by result
+            for (int a = 0; a < aSelection->size(); a++)
+            {
+                AttributeSelectionPtr anAttr = aSelection->value(a);
+                ResultPtr aBodyContext =
+                    std::dynamic_pointer_cast<ModelAPI_Result>(anAttr->context());
+                if (aBodyContext.get() && !aBodyContext->isDisabled() && aBodyContext->shape().get())
+                {
+                    /// do not export pictures
+                    if (aBodyContext->hasTexture())
+                    {
+                        anExCludedIsImage = true;
+                        continue;
+                    }
+                    aResults.push_back(aBodyContext);
+                    GeomShapePtr aShape = anAttr->value();
+                    if (!aShape.get())
+                        aShape = aBodyContext->shape();
+                    aShapes.push_back(aShape);
+                    if (aBodyContext->groupName() == ModelAPI_ResultPart::group())
+                    {
+                        ResultPartPtr aResPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aBodyContext);
+                        DocumentPtr aPartDoc = aResPart->partDoc();
+                        if (!aPartDoc.get() || !aPartDoc->isOpened())
+                        { // document is not accessible
+                            std::string msg = "Can not export XAO for not loaded part";
+                            Events_InfoMessage("ExportFeature", msg, this).send();
+                            return;
+                        }
+                        else
+                        {
+                            aDocuments.push_back(aPartDoc);
+                            aDocTrsf[aPartDoc] = aResPart->summaryTrsf();
+                        }
+                    }
+                }
+            }
+        }
+        else
+        {
+            int aBodyCount = document()->size(ModelAPI_ResultBody::group());
+            for (int aBodyIndex = 0; aBodyIndex < aBodyCount; ++aBodyIndex)
+            {
+                ResultBodyPtr aResultBody =
+                    std::dynamic_pointer_cast<ModelAPI_ResultBody>(
+                        document()->object(ModelAPI_ResultBody::group(), aBodyIndex));
+                if (!aResultBody.get())
+                    continue;
+                aShapes.push_back(aResultBody->shape());
+                aResults.push_back(aResultBody);
+            }
+        }
+        if (aShapes.empty())
+        {
+            if (!anExCludedIsImage)
+                setError("No shapes to export");
             return;
-          } else {
-            aDocuments.push_back(aPartDoc);
-            aDocTrsf[aPartDoc] = aResPart->summaryTrsf();
-          }
         }
-      }
-    }
-  } else {
-    int aBodyCount = document()->size(ModelAPI_ResultBody::group());
-    for (int aBodyIndex = 0; aBodyIndex < aBodyCount; ++aBodyIndex) {
-      ResultBodyPtr aResultBody =
-          std::dynamic_pointer_cast<ModelAPI_ResultBody>(
-              document()->object(ModelAPI_ResultBody::group(), aBodyIndex));
-      if (!aResultBody.get())
-        continue;
-      aShapes.push_back(aResultBody->shape());
-      aResults.push_back(aResultBody);
-    }
-  }
-  if (aShapes.empty()) {
-    if(!anExCludedIsImage)
-      setError("No shapes to export");
-    return;
-  }
-
-
-  GeomShapePtr aShape = (aShapes.size() == 1)
-      ? *aShapes.begin()
-      : GeomAlgoAPI_CompoundBuilder::compound(aShapes);
-
-  SetShapeToXAO(aShape, &aXao, anError);
-
-  if (!anError.empty()) {
-    setError("An error occurred while exporting " + theFileName + ": " + anError);
-    return;
-  }
-
-  // geometry name
-  std::string aGeometryName = string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value();
-  if (aGeometryName.empty() && aResults.size() == 1) {
-    // get the name from the first result
-    ResultPtr aResultBody = *aResults.begin();
-    aGeometryName = Locale::Convert::toString(aResultBody->data()->name());
-  }
-
-  aXao.getGeometry()->setName(aGeometryName);
-
-  std::set<ResultPtr> allResultsCashed; // cash to speed up searching in all results selected
-
-  // iterate all documents used
-  if (aDocuments.empty())
-    aDocuments.push_back(document());
-  std::list<DocumentPtr>::iterator aDoc = aDocuments.begin();
-  for(; aDoc != aDocuments.end(); aDoc++) {
-    // groups
-    int aGroupCount = (*aDoc)->size(ModelAPI_ResultGroup::group());
-    for (int aGroupIndex = 0; aGroupIndex < aGroupCount; ++aGroupIndex) {
-      ResultGroupPtr aResultGroup = std::dynamic_pointer_cast<ModelAPI_ResultGroup>(
-          (*aDoc)->object(ModelAPI_ResultGroup::group(), aGroupIndex));
-      if (!aResultGroup.get() || !aResultGroup->shape().get())
-        continue;
-
-      FeaturePtr aGroupFeature = (*aDoc)->feature(aResultGroup);
-
-      AttributeSelectionListPtr aSelectionList =
-          aGroupFeature->selectionList("group_list");
-      if (!ModelAPI_Tools::isInResults(aSelectionList,
-                                       aResults,
-                                       allResultsCashed))// skip group not used in result
-        continue;
-
-      // conversion of dimension
-      std::string aSelectionType = aSelectionList->selectionType();
-      GeomAPI_Shape::ShapeType aSelType = GeomAPI_Shape::shapeTypeByStr(aSelectionType);
-      std::string aDimensionString =
-        ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType);
-      XAO::Dimension aGroupDimension = XAO::XaoUtils::stringToDimension(aDimensionString);
-
-      XAO::Group* aXaoGroup = aXao.addGroup(aGroupDimension,
-        Locale::Convert::toString(aResultGroup->data()->name()));
-
-      try {
-        GeomAPI_ShapeExplorer aGroupResExplorer(aResultGroup->shape(), aSelType);
-        for(; aGroupResExplorer.more(); aGroupResExplorer.next()) {
-          GeomShapePtr aGroupShape = aGroupResExplorer.current();
-          if (aDocTrsf.find(*aDoc) != aDocTrsf.end())
-            aGroupShape->move(aDocTrsf[*aDoc]);
-          int aReferenceID = GeomAlgoAPI_CompoundBuilder::id(aShape, aGroupShape);
-          if (aReferenceID == 0) // selected value does not found in the exported shape
-            continue;
-          std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID);
-          int anElementID =
-            aXao.getGeometry()->getElementIndexByReference(aGroupDimension, aReferenceString);
-          aXaoGroup->add(anElementID);
+
+        GeomShapePtr aShape = (aShapes.size() == 1)
+                                  ? *aShapes.begin()
+                                  : GeomAlgoAPI_CompoundBuilder::compound(aShapes);
+
+        SetShapeToXAO(aShape, &aXao, anError);
+
+        if (!anError.empty())
+        {
+            setError("An error occurred while exporting " + theFileName + ": " + anError);
+            return;
         }
-      } catch (XAO::XAO_Exception& e) {
-        // LCOV_EXCL_START
-        std::string msg = "An error occurred while exporting group " +
-          Locale::Convert::toString(aResultGroup->data()->name());
-        msg += ".\n";
-        msg += e.what();
-        msg += "\n";
-        msg += "=> skipping this group from XAO export.";
-        Events_InfoMessage("ExportFeature", msg, this).send();
-        aXao.removeGroup(aXaoGroup);
-        // LCOV_EXCL_STOP
-      }
-    }
 
-    // fields
-    int aFieldCount = (*aDoc)->size(ModelAPI_ResultField::group());
-    for (int aFieldIndex = 0; aFieldIndex < aFieldCount; ++aFieldIndex) {
-      ResultFieldPtr aResultField = std::dynamic_pointer_cast<ModelAPI_ResultField>(
-        (*aDoc)->object(ModelAPI_ResultField::group(), aFieldIndex));
-
-      FeaturePtr aFieldFeature = (*aDoc)->feature(aResultField);
-
-      AttributeSelectionListPtr aSelectionList =
-          aFieldFeature->selectionList("selected");
-      std::string aSelectionType = aSelectionList->selectionType();
-      bool isWholePart = aSelectionType == "part";
-      // skip field not used in results
-      if (!isWholePart &&
-          !ModelAPI_Tools::isInResults(aSelectionList, aResults, allResultsCashed))
-        continue;
-
-      // conversion of dimension
-      std::string aDimensionString =
-        ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType);
-      XAO::Dimension aFieldDimension = XAO::XaoUtils::stringToDimension(aDimensionString);
-      // get tables and their type
-      std::shared_ptr<ModelAPI_AttributeTables> aTables = aFieldFeature->tables("values");
-      std::string aTypeString = ExchangePlugin_Tools::valuesType2xaoType(aTables->type());
-      XAO::Type aFieldType = XAO::XaoUtils::stringToFieldType(aTypeString);
-
-      XAO::Field* aXaoField = aXao.addField(aFieldType, aFieldDimension, aTables->columns(),
-        Locale::Convert::toString(aResultField->data()->name()));
-
-
-      try {
-        // set components names
-        AttributeStringArrayPtr aComponents = aFieldFeature->stringArray("components_names");
-        for(int aComp = 0; aComp < aComponents->size(); aComp++) {
-          std::string aName = aComponents->value(aComp);
-          aXaoField->setComponentName(aComp, aName);
+        // geometry name
+        std::string aGeometryName = string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value();
+        if (aGeometryName.empty() && aResults.size() == 1)
+        {
+            // get the name from the first result
+            ResultPtr aResultBody = *aResults.begin();
+            aGeometryName = Locale::Convert::toString(aResultBody->data()->name());
         }
 
-        AttributeIntArrayPtr aStamps = aFieldFeature->intArray("stamps");
-        for (int aStepIndex = 0; aStepIndex < aTables->tables(); aStepIndex++) {
-          XAO::Step* aStep = aXaoField->addNewStep(aStepIndex + 1);
-          aStep->setStep(aStepIndex + 1);
-          int aStampIndex = aStamps->value(aStepIndex);
-          aStep->setStamp(aStampIndex);
-          int aNumElements = isWholePart ? aXaoField->countElements() : aTables->rows();
-          int aNumComps = aTables->columns();
-          std::set<int> aFilledIDs; // to fill the rest by defaults
-          // omit default values first row
-          for(int aRow = isWholePart ? 0 : 1; aRow < aNumElements; aRow++) {
-            for(int aCol = 0; aCol < aNumComps; aCol++) {
-              int anElementID = 0;
-              if (!isWholePart) {
-                // element index actually is the ID of the selection
-                AttributeSelectionPtr aSel = aSelectionList->value(aRow - 1);
-                int aReferenceID = GeomAlgoAPI_CompoundBuilder::id(aShape, aSel->value());
-                if (aReferenceID == 0) // selected value does not found in the exported shape
-                  continue;
-
-                std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID);
-                anElementID = aXao.getGeometry()->
-                  getElementIndexByReference(aFieldDimension, aReferenceString);
-              }
-
-              ModelAPI_AttributeTables::Value aVal = aTables->value(
-                isWholePart ? 0 : aRow, aCol, aStepIndex);
-              std::string aStrVal = valToString(aVal, aTables->type());
-              aStep->setStringValue(isWholePart ? aRow : anElementID, aCol, aStrVal);
-              aFilledIDs.insert(anElementID);
+        aXao.getGeometry()->setName(aGeometryName);
+
+        std::set<ResultPtr> allResultsCashed; // cash to speed up searching in all results selected
+
+        // iterate all documents used
+        if (aDocuments.empty())
+            aDocuments.push_back(document());
+        std::list<DocumentPtr>::iterator aDoc = aDocuments.begin();
+        for (; aDoc != aDocuments.end(); aDoc++)
+        {
+            // groups
+            int aGroupCount = (*aDoc)->size(ModelAPI_ResultGroup::group());
+            for (int aGroupIndex = 0; aGroupIndex < aGroupCount; ++aGroupIndex)
+            {
+                ResultGroupPtr aResultGroup = std::dynamic_pointer_cast<ModelAPI_ResultGroup>(
+                    (*aDoc)->object(ModelAPI_ResultGroup::group(), aGroupIndex));
+                if (!aResultGroup.get() || !aResultGroup->shape().get())
+                    continue;
+
+                FeaturePtr aGroupFeature = (*aDoc)->feature(aResultGroup);
+
+                AttributeSelectionListPtr aSelectionList =
+                    aGroupFeature->selectionList("group_list");
+                if (!ModelAPI_Tools::isInResults(aSelectionList,
+                                                 aResults,
+                                                 allResultsCashed)) // skip group not used in result
+                    continue;
+
+                // conversion of dimension
+                std::string aSelectionType = aSelectionList->selectionType();
+                GeomAPI_Shape::ShapeType aSelType = GeomAPI_Shape::shapeTypeByStr(aSelectionType);
+                std::string aDimensionString =
+                    ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType);
+                XAO::Dimension aGroupDimension = XAO::XaoUtils::stringToDimension(aDimensionString);
+
+                XAO::Group *aXaoGroup = aXao.addGroup(aGroupDimension,
+                                                      Locale::Convert::toString(aResultGroup->data()->name()));
+
+                try
+                {
+                    GeomAPI_ShapeExplorer aGroupResExplorer(aResultGroup->shape(), aSelType);
+                    for (; aGroupResExplorer.more(); aGroupResExplorer.next())
+                    {
+                        GeomShapePtr aGroupShape = aGroupResExplorer.current();
+                        if (aDocTrsf.find(*aDoc) != aDocTrsf.end())
+                            aGroupShape->move(aDocTrsf[*aDoc]);
+                        int aReferenceID = GeomAlgoAPI_CompoundBuilder::id(aShape, aGroupShape);
+                        if (aReferenceID == 0) // selected value does not found in the exported shape
+                            continue;
+                        std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID);
+                        int anElementID =
+                            aXao.getGeometry()->getElementIndexByReference(aGroupDimension, aReferenceString);
+                        aXaoGroup->add(anElementID);
+                    }
+                }
+                catch (XAO::XAO_Exception &e)
+                {
+                    // LCOV_EXCL_START
+                    std::string msg = "An error occurred while exporting group " +
+                                      Locale::Convert::toString(aResultGroup->data()->name());
+                    msg += ".\n";
+                    msg += e.what();
+                    msg += "\n";
+                    msg += "=> skipping this group from XAO export.";
+                    Events_InfoMessage("ExportFeature", msg, this).send();
+                    aXao.removeGroup(aXaoGroup);
+                    // LCOV_EXCL_STOP
+                }
             }
-          }
-          if (!isWholePart) { // fill the rest values by default ones
-            XAO::GeometricElementList::iterator allElem =
-              aXao.getGeometry()->begin(aFieldDimension);
-            for(; allElem != aXao.getGeometry()->end(aFieldDimension); allElem++) {
-              if (aFilledIDs.find(allElem->first) != aFilledIDs.end())
-                continue;
-              for(int aCol = 0; aCol < aNumComps; aCol++) {
-                // default value
-                ModelAPI_AttributeTables::Value aVal = aTables->value(0, aCol, aStepIndex);
-                std::string aStrVal = valToString(aVal, aTables->type());
-                aStep->setStringValue(allElem->first, aCol, aStrVal);
-              }
+
+            // fields
+            int aFieldCount = (*aDoc)->size(ModelAPI_ResultField::group());
+            for (int aFieldIndex = 0; aFieldIndex < aFieldCount; ++aFieldIndex)
+            {
+                ResultFieldPtr aResultField = std::dynamic_pointer_cast<ModelAPI_ResultField>(
+                    (*aDoc)->object(ModelAPI_ResultField::group(), aFieldIndex));
+
+                FeaturePtr aFieldFeature = (*aDoc)->feature(aResultField);
+
+                AttributeSelectionListPtr aSelectionList =
+                    aFieldFeature->selectionList("selected");
+                std::string aSelectionType = aSelectionList->selectionType();
+                bool isWholePart = aSelectionType == "part";
+                // skip field not used in results
+                if (!isWholePart &&
+                    !ModelAPI_Tools::isInResults(aSelectionList, aResults, allResultsCashed))
+                    continue;
+
+                // conversion of dimension
+                std::string aDimensionString =
+                    ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType);
+                XAO::Dimension aFieldDimension = XAO::XaoUtils::stringToDimension(aDimensionString);
+                // get tables and their type
+                std::shared_ptr<ModelAPI_AttributeTables> aTables = aFieldFeature->tables("values");
+                std::string aTypeString = ExchangePlugin_Tools::valuesType2xaoType(aTables->type());
+                XAO::Type aFieldType = XAO::XaoUtils::stringToFieldType(aTypeString);
+
+                XAO::Field *aXaoField = aXao.addField(aFieldType, aFieldDimension, aTables->columns(),
+                                                      Locale::Convert::toString(aResultField->data()->name()));
+
+                try
+                {
+                    // set components names
+                    AttributeStringArrayPtr aComponents = aFieldFeature->stringArray("components_names");
+                    for (int aComp = 0; aComp < aComponents->size(); aComp++)
+                    {
+                        std::string aName = aComponents->value(aComp);
+                        aXaoField->setComponentName(aComp, aName);
+                    }
+
+                    AttributeIntArrayPtr aStamps = aFieldFeature->intArray("stamps");
+                    for (int aStepIndex = 0; aStepIndex < aTables->tables(); aStepIndex++)
+                    {
+                        XAO::Step *aStep = aXaoField->addNewStep(aStepIndex + 1);
+                        aStep->setStep(aStepIndex + 1);
+                        int aStampIndex = aStamps->value(aStepIndex);
+                        aStep->setStamp(aStampIndex);
+                        int aNumElements = isWholePart ? aXaoField->countElements() : aTables->rows();
+                        int aNumComps = aTables->columns();
+                        std::set<int> aFilledIDs; // to fill the rest by defaults
+                        // omit default values first row
+                        for (int aRow = isWholePart ? 0 : 1; aRow < aNumElements; aRow++)
+                        {
+                            for (int aCol = 0; aCol < aNumComps; aCol++)
+                            {
+                                int anElementID = 0;
+                                if (!isWholePart)
+                                {
+                                    // element index actually is the ID of the selection
+                                    AttributeSelectionPtr aSel = aSelectionList->value(aRow - 1);
+                                    int aReferenceID = GeomAlgoAPI_CompoundBuilder::id(aShape, aSel->value());
+                                    if (aReferenceID == 0) // selected value does not found in the exported shape
+                                        continue;
+
+                                    std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID);
+                                    anElementID = aXao.getGeometry()->getElementIndexByReference(aFieldDimension, aReferenceString);
+                                }
+
+                                ModelAPI_AttributeTables::Value aVal = aTables->value(
+                                    isWholePart ? 0 : aRow, aCol, aStepIndex);
+                                std::string aStrVal = valToString(aVal, aTables->type());
+                                aStep->setStringValue(isWholePart ? aRow : anElementID, aCol, aStrVal);
+                                aFilledIDs.insert(anElementID);
+                            }
+                        }
+                        if (!isWholePart)
+                        { // fill the rest values by default ones
+                            XAO::GeometricElementList::iterator allElem =
+                                aXao.getGeometry()->begin(aFieldDimension);
+                            for (; allElem != aXao.getGeometry()->end(aFieldDimension); allElem++)
+                            {
+                                if (aFilledIDs.find(allElem->first) != aFilledIDs.end())
+                                    continue;
+                                for (int aCol = 0; aCol < aNumComps; aCol++)
+                                {
+                                    // default value
+                                    ModelAPI_AttributeTables::Value aVal = aTables->value(0, aCol, aStepIndex);
+                                    std::string aStrVal = valToString(aVal, aTables->type());
+                                    aStep->setStringValue(allElem->first, aCol, aStrVal);
+                                }
+                            }
+                        }
+                    }
+                }
+                catch (XAO::XAO_Exception &e)
+                {
+                    // LCOV_EXCL_START
+                    std::string msg = "An error occurred while exporting field " +
+                                      Locale::Convert::toString(aResultField->data()->name());
+                    msg += ".\n";
+                    msg += e.what();
+                    msg += "\n";
+                    msg += "=> skipping this field from XAO export.";
+                    Events_InfoMessage("ExportFeature", msg, this).send();
+                    aXao.removeField(aXaoField);
+                    // LCOV_EXCL_STOP
+                }
             }
-          }
         }
-      } catch (XAO::XAO_Exception& e) {
+
+        // exporting
+        XAOExport(theFileName, &aXao, anError);
+
+        if (!anError.empty())
+        {
+            setError("An error occurred while exporting " + theFileName + ": " + anError);
+            return;
+        }
+
         // LCOV_EXCL_START
-        std::string msg = "An error occurred while exporting field " +
-          Locale::Convert::toString(aResultField->data()->name());
-        msg += ".\n";
-        msg += e.what();
-        msg += "\n";
-        msg += "=> skipping this field from XAO export.";
-        Events_InfoMessage("ExportFeature", msg, this).send();
-        aXao.removeField(aXaoField);
-        // LCOV_EXCL_STOP
-      }
     }
-  }
-
-  // exporting
-  XAOExport(theFileName, &aXao, anError);
-
-  if (!anError.empty()) {
-    setError("An error occurred while exporting " + theFileName + ": " + anError);
-    return;
-  }
-
-// LCOV_EXCL_START
-  } catch (XAO::XAO_Exception& e) {
-    std::string anError = e.what();
-    setError("An error occurred while exporting " + theFileName + ": " + anError);
-    return;
-  }
-// LCOV_EXCL_STOP
+    catch (XAO::XAO_Exception &e)
+    {
+        std::string anError = e.what();
+        setError("An error occurred while exporting " + theFileName + ": " + anError);
+        return;
+    }
+    // LCOV_EXCL_STOP
 }
 
-void ExchangePlugin_ExportFeature::exportROOT(const std::stringtheFileName)
+void ExchangePlugin_ExportFeature::exportROOT(const std::string &theFileName)
 {
-  std::string aName = string(ExchangePlugin_ExportFeature::ROOT_MANAGER_NAME_ID())->value();
-  std::string aTitle = string(ExchangePlugin_ExportFeature::ROOT_MANAGER_TITLE_ID())->value();
-  std::string aFileMat = string(ExchangePlugin_ExportFeature::MAT_FILE_ID())->value();
-
-  FeaturePtr aFeature;
-
-  std::shared_ptr<GeomAlgoAPI_ROOTExport> anAlgo(new GeomAlgoAPI_ROOTExport(theFileName));
-
-  std::list<std::string> listNames = ExchangePlugin_Tools::split(theFileName, _separator_);
-  listNames = ExchangePlugin_Tools::split(listNames.back(), '.');
-
-  // Create the head of file
-  anAlgo->buildHead(listNames.front(), aName, aTitle);
-
-  // Materials and mediums
-  std::map<std::string, std::vector<std::string> > aMaterials;
-  std::map<std::string, std::vector<std::string> > aMedias;
-  readFileMat(aFileMat, aMaterials, aMedias);
-  anAlgo->buildMaterialsMedias(aMaterials, aMedias);
-
-  // Create the end of files
-  std::string aExportFileName = string(ExchangePlugin_ExportFeature::EXP_NAME_FILE_ID())->value();
-  AttributeSelectionPtr anObjectAttr = selection(MAIN_OBJECT_ID());
-  aFeature = anObjectAttr->contextFeature();
-  std::string aNameShape ="";
-  if (aFeature.get()) {
-    aNameShape = Locale::Convert::toString(aFeature->firstResult()->data()->name());
-  } else {
-    ObjectPtr anObject = anObjectAttr->contextObject();
-    aNameShape = Locale::Convert::toString(anObject->data()->name());
-  }
-
-  // Add feature in the file
-  std::list<FeaturePtr> aFeatures = document()->allFeatures();
-  std::list<FeaturePtr>::iterator itFeature = aFeatures.begin();
-  std::vector<std::wstring> aListNamesOfFeatures;
-  std::map<std::wstring, std::string> aMapFeauturesObject;
-  for(; itFeature != aFeatures.end(); ++itFeature)
-  {
-    aFeature = *itFeature;
-    if (aFeature->getKind() == "Box")
+    // Get data from feature
+    std::string aName = string(ExchangePlugin_ExportFeature::ROOT_MANAGER_NAME_ID())->value();
+    std::string aTitle = string(ExchangePlugin_ExportFeature::ROOT_MANAGER_TITLE_ID())->value();
+    std::string aFileMat = string(ExchangePlugin_ExportFeature::MAT_FILE_ID())->value();
+
+    FeaturePtr aFeature;
+
+    std::shared_ptr<GeomAlgoAPI_ROOTExport> anAlgo(new GeomAlgoAPI_ROOTExport(theFileName));
+
+    std::list<std::string> listNames = ExchangePlugin_Tools::split(theFileName, _separator_);
+    listNames = ExchangePlugin_Tools::split(listNames.back(), '.');
+
+    // Create the head of file
+    anAlgo->buildHead(listNames.front(), aName, aTitle);
+
+    // // Materials and mediums
+    // std::map<std::string, std::vector<std::string> > aMaterials;
+    // std::map<std::string, std::vector<std::string> > aMedias;
+    // readFileMat(aFileMat, aMaterials, aMedias);
+    // anAlgo->buildMaterialsMedias(aMaterials, aMedias);
+
+    // Add feature in the file
+    std::list<FeaturePtr> aFeatures = document()->allFeatures();
+    std::list<FeaturePtr>::iterator itFeature = aFeatures.begin();
+    std::vector<std::wstring> aListNamesOfFeatures;
+    std::map<std::wstring, std::string> aMapFeauturesObject;
+    for (; itFeature != aFeatures.end(); ++itFeature)
     {
-      std::vector<double> aCenterDims;
-      aCenterDims = ExchangePlugin_ExportRoot::computeBox(aFeature);
-      std::wstring anObjectName = aFeature->firstResult()->data()->name();
-      anAlgo->buildBox(anObjectName, aCenterDims);
-      aListNamesOfFeatures.push_back(anObjectName);
-      aListNamesOfFeatures.push_back(aFeature->data()->name());
+        aFeature = *itFeature;
+        std::map<std::string, double> aFeatureDimensions;
+        if (aFeature->getKind() == "Box")
+        {
+            aFeatureDimensions = ExchangePlugin_ExportRoot::computeBox(aFeature);
+            std::wstring anObjectName = aFeature->firstResult()->data()->name();
+            anAlgo->buildBox(anObjectName, aFeatureDimensions);
+            aListNamesOfFeatures.push_back(anObjectName);
+            aListNamesOfFeatures.push_back(aFeature->data()->name());
+        }
+        else if (aFeature->getKind() == "Cylinder")
+        {
+            aFeatureDimensions = ExchangePlugin_ExportRoot::computeCylinder(aFeature);
+            std::wstring anObjectName = aFeature->firstResult()->data()->name();
+            anAlgo->buildTube(anObjectName, aFeatureDimensions);
+            aListNamesOfFeatures.push_back(anObjectName);
+            aListNamesOfFeatures.push_back(aFeature->data()->name());
+        }
+    }
+
+    // Create the end of files
+    std::string aExportFileName = string(ExchangePlugin_ExportFeature::EXP_NAME_FILE_ID())->value();
+    AttributeSelectionPtr anObjectAttr = selection(MAIN_OBJECT_ID());
+    aFeature = anObjectAttr->contextFeature();
+    std::string aNameShape = "";
+    if (aFeature.get())
+    {
+        aNameShape = Locale::Convert::toString(aFeature->firstResult()->data()->name());
+    }
+    else
+    {
+        ObjectPtr anObject = anObjectAttr->contextObject();
+        aNameShape = Locale::Convert::toString(anObject->data()->name());
     }
-  }
 
-  // Create the end of file
-  anAlgo->buildEnd(aNameShape, aExportFileName);
+    // Create the end of file
+    anAlgo->buildEnd(aNameShape, aExportFileName);
 
-  // Create the file with the content
-  anAlgo->write();
+    // Create the file with the content
+    anAlgo->write();
 }
 
 bool ExchangePlugin_ExportFeature::isMacro() const
 {
-  if (!data().get() || !data()->isValid())
-    return false;
-  ExchangePlugin_ExportFeature* aThis = ((ExchangePlugin_ExportFeature*)(this));
-  AttributeStringPtr aFormatAttr = aThis->string(FILE_FORMAT_ID());
-  std::string aFormat(aFormatAttr.get() ? aFormatAttr->value() : "");
-
-  if (aFormat.empty()) { // get default format for the extension
-    AttributeStringPtr aFilePathAttr = aThis->string(FILE_PATH_ID());
-    std::string aFilePath = aFilePathAttr->value();
-    if (!aFilePath.empty()) {
-      std::string anExtension = GeomAlgoAPI_Tools::File_Tools::extension(aFilePath);
-      aFormat = anExtension;
+    if (!data().get() || !data()->isValid())
+        return false;
+    ExchangePlugin_ExportFeature *aThis = ((ExchangePlugin_ExportFeature *)(this));
+    AttributeStringPtr aFormatAttr = aThis->string(FILE_FORMAT_ID());
+    std::string aFormat(aFormatAttr.get() ? aFormatAttr->value() : "");
+
+    if (aFormat.empty())
+    { // get default format for the extension
+        AttributeStringPtr aFilePathAttr = aThis->string(FILE_PATH_ID());
+        std::string aFilePath = aFilePathAttr->value();
+        if (!aFilePath.empty())
+        {
+            std::string anExtension = GeomAlgoAPI_Tools::File_Tools::extension(aFilePath);
+            aFormat = anExtension;
+        }
     }
-  }
-
-  if (aFormat == "XAO") { // on export to GEOM the selection attribute is filled - this is
-                          // an exceptional case where export to XAO feature must be kept
-    AttributeSelectionListPtr aList = aThis->selectionList(XAO_SELECTION_LIST_ID());
-    return !aList->isInitialized() || aList->size() == 0;
-  }
-  return true;
-}
 
+    if (aFormat == "XAO")
+    { // on export to GEOM the selection attribute is filled - this is
+      // an exceptional case where export to XAO feature must be kept
+        AttributeSelectionListPtr aList = aThis->selectionList(XAO_SELECTION_LIST_ID());
+        return !aList->isInitialized() || aList->size() == 0;
+    }
+    return true;
+}
 
 //=================================================================================================
 void ExchangePlugin_ExportFeature::readFileMat(const std::string theFileMat,
-                   std::map<std::string, std::vector<std::string> >& theMaterials,
-                   std::map<std::string, std::vector<std::string> >& theMedias)
+                                               std::map<std::string, std::vector<std::string>> &theMaterials,
+                                               std::map<std::string, std::vector<std::string>> &theMedias)
 {
-  std::string aLine;
-  std::ifstream aFile(theFileMat);
-  if (aFile.is_open())
-  {
-    while(getline(aFile, aLine))
+    std::string aLine;
+    std::ifstream aFile(theFileMat);
+    if (aFile.is_open())
     {
-      std::list<std::string> aList = ExchangePlugin_Tools::split(aLine, ' ');
-      std::list<std::string>::iterator itList = aList.begin();
-
-      bool isFirst = true;
-      std::string aName;
-      std::vector<std::string> aData;
-      for (; itList != aList.end(); ++itList)
-      {
-        std::string anElem = *itList;
-        if (isFirst)
+        while (getline(aFile, aLine))
         {
-          aName = anElem;
-          isFirst = false;
-        } else {
-          aData.push_back(anElem);
+            std::list<std::string> aList = ExchangePlugin_Tools::split(aLine, ' ');
+            std::list<std::string>::iterator itList = aList.begin();
+
+            bool isFirst = true;
+            std::string aName;
+            std::vector<std::string> aData;
+            for (; itList != aList.end(); ++itList)
+            {
+                std::string anElem = *itList;
+                if (isFirst)
+                {
+                    aName = anElem;
+                    isFirst = false;
+                }
+                else
+                {
+                    aData.push_back(anElem);
+                }
+            }
+            if (aName == "mat")
+                theMaterials[aData[0]] = aData;
+            else if (aName == "medium")
+                theMedias[aData[0]] = aData;
         }
-      }
-      if (aName == "mat")
-        theMaterials[aData[0]] = aData;
-      else if (aName == "medium")
-        theMedias[aData[0]] = aData;
+        aFile.close();
     }
-    aFile.close();
-  }
 }
index 721f3632b98e237ff713f211835527daca0ff66b..65f7b301024b114b9600593fff1d480f965d6cd2 100644 (file)
@@ -18,6 +18,7 @@
 //
 
 #include <PrimitivesPlugin_Box.h>
+#include <PrimitivesPlugin_Cylinder.h>
 
 #include <GeomAlgoAPI_PointBuilder.h>
 
 
 namespace ExchangePlugin_ExportRoot
 {
-  //===============================================================================================
-  std::vector<double> computeBox(FeaturePtr theFeature)
-  {
-    std::string aMethodName =
-      theFeature->data()->string(PrimitivesPlugin_Box::CREATION_METHOD())->value();
-
-    double OX, OY, OZ;
-    double DX, DY, DZ;
-
-    if (aMethodName == "BoxByDimensions") {
-      DX = (theFeature->data()->real(PrimitivesPlugin_Box::DX_ID())->value())/2;
-      DY = (theFeature->data()->real(PrimitivesPlugin_Box::DY_ID())->value())/2;
-      DZ = (theFeature->data()->real(PrimitivesPlugin_Box::DZ_ID())->value())/2;
-      OX = DX;
-      OY = DY;
-      OZ = DZ;
-    } else if (aMethodName == "BoxByTwoPoints") {
-      // Get the first point
-      AttributeSelectionPtr aRef1 =
-        theFeature->data()->selection(PrimitivesPlugin_Box::POINT_FIRST_ID());
-      GeomShapePtr aShape1 = aRef1->value();
-      if (!aShape1.get())
-        aShape1 = aRef1->context()->shape();
-      std::shared_ptr<GeomAPI_Pnt> aFirstPoint = GeomAlgoAPI_PointBuilder::point(aShape1);
-      // Get the second point
-      AttributeSelectionPtr aRef2 =
-        theFeature->data()->selection(PrimitivesPlugin_Box::POINT_SECOND_ID());
-      GeomShapePtr aShape2 = aRef2->value();
-      if (!aShape2.get())
-        aShape2 = aRef2->context()->shape();
-      std::shared_ptr<GeomAPI_Pnt> aSecondPoint = GeomAlgoAPI_PointBuilder::point(aShape2);
-      DX = fabs(aSecondPoint->x() - aFirstPoint->x())/2;
-      DY = fabs(aSecondPoint->y() - aFirstPoint->y())/2;
-      DZ = fabs(aSecondPoint->z() - aFirstPoint->z())/2;
-      OX = fmin(aFirstPoint->x(), aSecondPoint->x()) + DX;
-      OY = fmin(aFirstPoint->y(), aSecondPoint->y()) + DY;
-      OZ = fmin(aFirstPoint->z(), aSecondPoint->z()) + DZ;
-    } else if (aMethodName == "BoxByOnePointAndDims") {
-      OX = theFeature->data()->real(PrimitivesPlugin_Box::OX_ID())->value();
-      OY = theFeature->data()->real(PrimitivesPlugin_Box::OY_ID())->value();
-      OZ = theFeature->data()->real(PrimitivesPlugin_Box::OZ_ID())->value();
-      DX = theFeature->data()->real(PrimitivesPlugin_Box::HALF_DX_ID())->value();
-      DY = theFeature->data()->real(PrimitivesPlugin_Box::HALF_DY_ID())->value();
-      DZ = theFeature->data()->real(PrimitivesPlugin_Box::HALF_DZ_ID())->value();
-    } else {
-      // ToDo error
-     return;
+    //===============================================================================================
+    std::map<std::string, double> computeBox(FeaturePtr theFeature)
+    {
+        std::string aMethodName =
+            theFeature->data()->string(PrimitivesPlugin_Box::CREATION_METHOD())->value();
+
+        double OX, OY, OZ;
+        double DX, DY, DZ;
+
+        if (aMethodName == "BoxByDimensions")
+        {
+            DX = (theFeature->data()->real(PrimitivesPlugin_Box::DX_ID())->value()) / 2;
+            DY = (theFeature->data()->real(PrimitivesPlugin_Box::DY_ID())->value()) / 2;
+            DZ = (theFeature->data()->real(PrimitivesPlugin_Box::DZ_ID())->value()) / 2;
+            OX = DX;
+            OY = DY;
+            OZ = DZ;
+        }
+        else if (aMethodName == "BoxByTwoPoints")
+        {
+            // Get the first point
+            AttributeSelectionPtr aRef1 =
+                theFeature->data()->selection(PrimitivesPlugin_Box::POINT_FIRST_ID());
+            GeomShapePtr aShape1 = aRef1->value();
+            if (!aShape1.get())
+                aShape1 = aRef1->context()->shape();
+            std::shared_ptr<GeomAPI_Pnt> aFirstPoint = GeomAlgoAPI_PointBuilder::point(aShape1);
+            // Get the second point
+            AttributeSelectionPtr aRef2 =
+                theFeature->data()->selection(PrimitivesPlugin_Box::POINT_SECOND_ID());
+            GeomShapePtr aShape2 = aRef2->value();
+            if (!aShape2.get())
+                aShape2 = aRef2->context()->shape();
+            std::shared_ptr<GeomAPI_Pnt> aSecondPoint = GeomAlgoAPI_PointBuilder::point(aShape2);
+            DX = fabs(aSecondPoint->x() - aFirstPoint->x()) / 2;
+            DY = fabs(aSecondPoint->y() - aFirstPoint->y()) / 2;
+            DZ = fabs(aSecondPoint->z() - aFirstPoint->z()) / 2;
+            OX = fmin(aFirstPoint->x(), aSecondPoint->x()) + DX;
+            OY = fmin(aFirstPoint->y(), aSecondPoint->y()) + DY;
+            OZ = fmin(aFirstPoint->z(), aSecondPoint->z()) + DZ;
+        }
+        else if (aMethodName == "BoxByOnePointAndDims")
+        {
+            OX = theFeature->data()->real(PrimitivesPlugin_Box::OX_ID())->value();
+            OY = theFeature->data()->real(PrimitivesPlugin_Box::OY_ID())->value();
+            OZ = theFeature->data()->real(PrimitivesPlugin_Box::OZ_ID())->value();
+            DX = theFeature->data()->real(PrimitivesPlugin_Box::HALF_DX_ID())->value();
+            DY = theFeature->data()->real(PrimitivesPlugin_Box::HALF_DY_ID())->value();
+            DZ = theFeature->data()->real(PrimitivesPlugin_Box::HALF_DZ_ID())->value();
+        }
+        else
+            return;
+
+        //Prepare data to return
+        std::map<std::string, double> aFeatureDim;
+
+        // Put the center
+        aFeatureDim["OX"] = OX;
+        aFeatureDim["OY"] = OY;
+        aFeatureDim["OZ"] = OZ;
+
+        // Put the dimensions
+        aFeatureDim["DX"] = DX;
+        aFeatureDim["DY"] = DY;
+        aFeatureDim["DZ"] = DZ;
+
+        return aFeatureDim;
     }
 
-    std::vector<double> aCenterDims;
-    // Put the center
-    aCenterDims.push_back(OX);
-    aCenterDims.push_back(OY);
-    aCenterDims.push_back(OZ);
+    //===============================================================================================
+    std::map<std::string, double> computeCylinder(FeaturePtr theFeature)
+    {
+        std::string aMethodName =
+            theFeature->data()->string(PrimitivesPlugin_Cylinder::CREATION_METHOD())->value();
 
-    // Put the dimensions
-    aCenterDims.push_back(DX);
-    aCenterDims.push_back(DY);
-    aCenterDims.push_back(DZ);
+        double radius, halfdz;
+        radius = (theFeature->data()->real(PrimitivesPlugin_Cylinder::RADIUS_ID())->value());
+        halfdz = (theFeature->data()->real(PrimitivesPlugin_Cylinder::HEIGHT_ID())->value()) / 2;
 
-    return aCenterDims;
+        std::map<std::string, double> aFeatureDim;
+        // Put the center
+        aFeatureDim["radius"] = radius;
+        aFeatureDim["halfdz"] = halfdz;
+
+        return aFeatureDim;
+    }
 
-  }
 } // namespace ExchangePlugin_ExportRoot
index 73b6b7dda2577cc0d19b3f39e7d54b73a9d01cdf..c35a2d9ffcccbc4b14d82c417ab2fe003191f52f 100644 (file)
@@ -26,7 +26,8 @@ namespace ExchangePlugin_ExportRoot
   /// \param[in] theFeature a feature to obtain AttributeRefAttr
   /// \param[out] theCenter coordinates of the center of the box
   /// \param[out] theDimensions dimensions of the box
-  EXCHANGEPLUGIN_EXPORT std::vector<double> computeBox(FeaturePtr theFeature);
+  EXCHANGEPLUGIN_EXPORT std::map<std::string, double> computeBox(FeaturePtr theFeature);
+  EXCHANGEPLUGIN_EXPORT std::map<std::string, double> computeCylinder(FeaturePtr theFeature);
 }
 
 #endif /* EXCHANGEPLUGIN_EXPORTROOT_H_ */
index de4214ab7b95cce095ffbf1219ee7d8de89d1cb5..7b670bb8de126b44a65b5c4905d996458c3707a3 100644 (file)
 #include <vector>
 
 //=================================================================================================
-static std::string doubleToString(const doubletheValue)
+static std::string doubleToString(const double &theValue)
 {
-  std::ostringstream str;
-  str << theValue;
-  return str.str();
+    std::ostringstream str;
+    str << theValue;
+    return str.str();
 }
 
 //=================================================================================================
-GeomAlgoAPI_ROOTExport::GeomAlgoAPI_ROOTExport(const std::stringtheFileName)
+GeomAlgoAPI_ROOTExport::GeomAlgoAPI_ROOTExport(const std::string &theFileName)
 {
-  myFileName = theFileName;
+    myFileName = theFileName;
 }
 
 //=================================================================================================
-void GeomAlgoAPI_ROOTExport::buildHead(const std::string& theMethodName, const std::string& theName,
-                                       const std::stringtheTitle)
+void GeomAlgoAPI_ROOTExport::buildHead(const std::string &theMethodName, const std::string &theName,
+                                       const std::string &theTitle)
 {
-  myContent << "void " << theMethodName << "() {" << std::endl;
-  myContent << "gSystem->Load(\"libGeom\");" << std::endl;
-  myContent << "TGeoManager *geom = new TGeoManager(\"" << theName;
-  myContent << "\",\"" << theTitle  << "\");" << std::endl;
-  myContent << std::endl;
+    myContent << "void " << theMethodName << "()" << std::endl
+              << "{" << std::endl
+              << std::endl;
+
+    myContent << "\t"
+              << "TGeoManager *geom = new TGeoManager(\""
+              << theName << "\",\""
+              << theTitle << "\");" << std::endl;
+
+    myContent << "\t"
+              << "// ####################################" << std::endl;
 }
 
 //=================================================================================================
-void GeomAlgoAPI_ROOTExport::buildEnd(const std::string theSolidName,
-                                      const std::string theExportName)
+void GeomAlgoAPI_ROOTExport::buildBox(const std::wstring &theObjectName,
+                                      const std::map<std::string, double> theFeatureDim)
 {
-  myContent << "// ####################################" << std::endl;
-  myContent << "geom->SetTopVolume("  << theSolidName << ");" << std::endl;
-  myContent << "geom->CloseGeometry();" << std::endl;
-  myContent << theSolidName + "->SetVisContainers(kTRUE);" << std::endl;
-  myContent << "geom->SetTopVisible(kTRUE);" << std::endl;
-  myContent << "geom->Export(\"" + theExportName + "\");" << std::endl;
-  myContent << "geom->CheckOverlaps(0.0001);" << std::endl;
-  myContent << "geom->PrintOverlaps();" << std::endl;
-  myContent << theSolidName + "->Draw();" << std::endl;
-  myContent << "}" << std::endl;
+    std::string anObjectName(theObjectName.begin(), theObjectName.end());
+
+    myContent << "\t"
+              << "//Exporting " << anObjectName << std::endl;
+
+    myContent << "\t"
+              << "Double_t point_" << anObjectName << "[3] = {"
+              << doubleToString(theFeatureDim["OX"]) << ","
+              << doubleToString(theFeatureDim["OY"]) << ","
+              << doubleToString(theFeatureDim["OZ"]) << "}" << std::endl;
+
+    myContent << "\t"
+              << "TGeoBBox *" << anObjectName << " = new TGeoBBox(\""
+              << anObjectName << "\","
+              << doubleToString(theFeatureDim["DX"]) << ","
+              << doubleToString(theFeatureDim["DY"]) << ","
+              << doubleToString(theFeatureDim["DZ"]) << ","
+              << "point_" << anObjectName << ");" << std::endl
+              << std::endl;
 }
 
 //=================================================================================================
-void GeomAlgoAPI_ROOTExport::buildMaterialsMedias(
-    const std::map<std::string, std::vector<std::string> > theMaterials,
-    const std::map<std::string, std::vector<std::string> > theMedias)
+void GeomAlgoAPI_ROOTExport::buildTube(const std::wstring &theObjectName,
+                                       const std::map<std::string, double> theFeatureDim)
 {
-  const std::map<std::string, std::vector<std::string> >::const_iterator
-     anItMat = theMaterials.begin(), aLastMat = theMaterials.end();
-  for(; anItMat != aLastMat; anItMat++) {
-    std::vector<std::string> aValues = anItMat->second;
-    myContent << "TGeoMaterial *" << anItMat->first << " = new TGeoMaterial(\"" << aValues[1] <<
-              "\"," << aValues[2] << "," << aValues[3] << "," << aValues[4] << ");" << std::endl;
-  }
-
-  const std::map<std::string, std::vector<std::string> >::const_iterator
-     anItMed = theMedias.begin(), aLastMed = theMedias.end();
-  for(; anItMed != aLastMed; anItMed++) {
-    std::vector<std::string> aValues = anItMed->second;
-    myContent << "TGeoMedium *" << anItMed->first << " = new TGeoMedium(\"" << aValues[1] <<
-              "\"," << aValues[2] << "," << aValues[3] << ");" << std::endl;
-  }
-  myContent << std::endl;
+    // TGeoTube * fuelShape = new TGeoTube("fuelShape",0.,fuelRadius,halfdz);
+    std::string anObjectName(theObjectName.begin(), theObjectName.end());
+
+    myContent << "\t"
+              << "//Exporting " << anObjectName << std::endl;
+
+    myContent << "\t"
+              << "TGeoTube *" << anObjectName << " = new TGeoTube(\""
+              << anObjectName << "\","
+              << "0."
+              << ","
+              << doubleToString(theFeatureDim["radius"]) << ","
+              << doubleToString(theFeatureDim["halfdz"]) << ");"
+              << std::endl
+              << std::endl;
 }
 
 //=================================================================================================
-void GeomAlgoAPI_ROOTExport::buildBox(const std::wstring& theObjectName,
-                                      const std::vector<double> theCenterDims)
+void GeomAlgoAPI_ROOTExport::buildEnd(const std::string theSolidName,
+                                      const std::string theExportName)
 {
-  std::string anObjectName(theObjectName.begin(), theObjectName.end());
-
-  myContent << "Double_t point_" << anObjectName << "[3] = {";
-  myContent << doubleToString(theCenterDims[0]) << "," << doubleToString(theCenterDims[1]) << ",";
-  myContent << (theCenterDims[2]) << "};" << std::endl;
-
-  myContent << "TGeoBBox *" << anObjectName << " = new TGeoBBox(\"";
-  myContent << anObjectName << "\",";
-  myContent << doubleToString(theCenterDims[3]) << "," << doubleToString(theCenterDims[4]) << ",";
-  myContent << doubleToString(theCenterDims[5]) << ",point_";
-  myContent << anObjectName << ");" << std::endl << std::endl;
+    myContent << "\t"
+              << "// ####################################" << std::endl;
+    myContent << "\t"
+              << "geom->SetTopVolume(" << theSolidName << ");" << std::endl;
+    myContent << "\t"
+              << "geom->CloseGeometry();" << std::endl;
+    myContent << "\t"
+              << "geom->Export(\"" + theExportName + "\");" << std::endl;
+    myContent << "\t"
+              << "geom->SetTopVisible();" << std::endl;
+    myContent << "\t"
+              << "geom->CheckOverlaps(1.e-6);" << std::endl;
+    myContent << std::endl
+              << "}" << std::endl;
 }
 
 //=================================================================================================
 bool GeomAlgoAPI_ROOTExport::write()
 {
-  std::ofstream aFile;
-  OSD_OpenStream(aFile, myFileName.c_str(), std::ofstream::out);
-  if (!aFile.is_open())
-    return false;
-
-  aFile << myContent.str() << std::endl;
-  aFile.close();
-  return true;
+    std::ofstream aFile;
+    OSD_OpenStream(aFile, myFileName.c_str(), std::ofstream::out);
+    if (!aFile.is_open())
+        return false;
+
+    aFile << myContent.str() << std::endl;
+    aFile.close();
+    return true;
 }
+
+// //=================================================================================================
+// void GeomAlgoAPI_ROOTExport::buildMaterialsMedias(
+//     const std::map<std::string, std::vector<std::string> > theMaterials,
+//     const std::map<std::string, std::vector<std::string> > theMedias)
+// {
+//   const std::map<std::string, std::vector<std::string> >::const_iterator
+//      anItMat = theMaterials.begin(), aLastMat = theMaterials.end();
+//   for(; anItMat != aLastMat; anItMat++) {
+//     std::vector<std::string> aValues = anItMat->second;
+//     myContent << "TGeoMaterial *" << anItMat->first << " = new TGeoMaterial(\"" << aValues[1] <<
+//               "\"," << aValues[2] << "," << aValues[3] << "," << aValues[4] << ");" << std::endl;
+//   }
+
+//   const std::map<std::string, std::vector<std::string> >::const_iterator
+//      anItMed = theMedias.begin(), aLastMed = theMedias.end();
+//   for(; anItMed != aLastMed; anItMed++) {
+//     std::vector<std::string> aValues = anItMed->second;
+//     myContent << "TGeoMedium *" << anItMed->first << " = new TGeoMedium(\"" << aValues[1] <<
+//               "\"," << aValues[2] << "," << aValues[3] << ");" << std::endl;
+//   }
+//   myContent << std::endl;
+// }
index f300e9e01853627de73d2add193a7bb4cc1dee43..1e3d8bf393070de747b4afd4277917f46a9375bf 100644 (file)
  */
 class GeomAlgoAPI_ROOTExport
 {
- public:
-  GEOMALGOAPI_EXPORT GeomAlgoAPI_ROOTExport(const std::string& theFileName);
+public:
+    GEOMALGOAPI_EXPORT GeomAlgoAPI_ROOTExport(const std::string &theFileName);
 
-  /// Build the head of file
-  GEOMALGOAPI_EXPORT void buildHead(const std::string& theMethodName, const std::string& theName,
-                                    const std::string& theTitle);
+    /// Build the head of file
+    GEOMALGOAPI_EXPORT void buildHead(const std::string &theMethodName, const std::string &theName,
+                                      const std::string &theTitle);
 
-  /// Build the end of file
-  GEOMALGOAPI_EXPORT void buildEnd(const std::string theSolidName,
-                                   const std::string theExportName);
+    /// Build the end of file
+    GEOMALGOAPI_EXPORT void buildEnd(const std::string theSolidName,
+                                     const std::string theExportName);
 
-  /// Build the materials ans mediums
-  GEOMALGOAPI_EXPORT void buildMaterialsMedias(
-    const std::map<std::string, std::vector<std::string> > theMaterials,
-    const std::map<std::string, std::vector<std::string> > theMedias);
+    // /// Build the materials ans mediums
+    // GEOMALGOAPI_EXPORT void buildMaterialsMedias(
+    //   const std::map<std::string, std::vector<std::string> > theMaterials,
+    //   const std::map<std::string, std::vector<std::string> > theMedias);
 
-  /// Build box
-  GEOMALGOAPI_EXPORT void buildBox(const std::wstring& theObjectName,
-                                   const std::vector<double> theCenterDims);
+    /// Build box
+    GEOMALGOAPI_EXPORT void buildBox(const std::wstring &theObjectName,
+                                     const std::map<std::string, double> theFeatureDim);
 
-  /// Write the file
-  GEOMALGOAPI_EXPORT bool write();
+    /// Build Tube
+    GEOMALGOAPI_EXPORT void buildTube(const std::wstring &theObjectName,
+                                      const std::map<std::string, double> theFeatureDim);
 
- private:
-  std::string myFileName; /// File name for materials and medias
-  std::ostringstream myContent; /// X coordinate of the center to create a box.
+    /// Write the file
+    GEOMALGOAPI_EXPORT bool write();
+
+private:
+    std::string myFileName;       /// File name for materials and medias
+    std::ostringstream myContent; /// X coordinate of the center to create a box.
 };
 
 #endif // GEOMALGOAPI_ROOTEXPORT_H_