Salome HOME
Issue 1299 Angle presentation: complementary angle.
[modules/shaper.git] / src / ExchangePlugin / ExchangePlugin_ExportFeature.cpp
index 1cf82bb0b9e974efa70b184d76aff35858c5c128..f4ff3d3ad9fa976278264117b9b8005ad04e6db5 100644 (file)
@@ -26,8 +26,6 @@
 #include <ModelAPI_Object.h>
 #include <ModelAPI_ResultBody.h>
 
-#include <TopoDS_Shape.hxx>
-
 #include <algorithm>
 #include <iterator>
 #include <string>
@@ -58,8 +56,8 @@ const std::string& ExchangePlugin_ExportFeature::getKind()
  */
 void ExchangePlugin_ExportFeature::initAttributes()
 {
-  data()->addAttribute(ExchangePlugin_ExportFeature::FILE_FORMAT_ID(), ModelAPI_AttributeString::typeId());
   data()->addAttribute(ExchangePlugin_ExportFeature::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());
 }
 
@@ -85,10 +83,21 @@ void ExchangePlugin_ExportFeature::execute()
       this->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID());
   std::list<std::shared_ptr<GeomAPI_Shape> > aShapes;
   for (int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i) {
-    aShapes.push_back(aSelectionListAttr->value(i)->value());
+    AttributeSelectionPtr anAttrSelection = aSelectionListAttr->value(i);
+    std::shared_ptr<GeomAPI_Shape> aCurShape = anAttrSelection->value();
+    if (aCurShape.get() == NULL)
+      aCurShape = anAttrSelection->context()->shape();
+    if (aCurShape.get() != NULL)
+      aShapes.push_back(aCurShape);
+  }
+
+  // Store compound if we have more than one shape.
+  std::shared_ptr<GeomAPI_Shape> aShape;
+  if(aShapes.size() == 1) {
+    aShape = aShapes.front();
+  } else {
+    aShape = GeomAlgoAPI_CompoundBuilder::compound(aShapes);
   }
-  std::shared_ptr<GeomAPI_Shape> aShape =
-      GeomAlgoAPI_CompoundBuilder::compound(aShapes);
 
   exportFile(aFilePath, aFormat, aShape);
 }
@@ -116,15 +125,13 @@ bool ExchangePlugin_ExportFeature::exportFile(const std::string& theFileName,
 
   // Perform the export
   std::string anError;
-
-  TopoDS_Shape aShape(theShape->impl<TopoDS_Shape>());
   bool aResult = false;
   if (aFormatName == "BREP") {
-    aResult = BREPExport::Export(theFileName, aFormatName, aShape, anError);
+    aResult = BREPExport(theFileName, aFormatName, theShape, anError);
   } else if (aFormatName == "STEP") {
-    aResult = STEPExport::Export(theFileName, aFormatName, aShape, anError);
+    aResult = STEPExport(theFileName, aFormatName, theShape, anError);
   } else if (aFormatName.substr(0, 4) == "IGES") {
-    aResult = IGESExport::Export(theFileName, aFormatName, aShape, anError);
+    aResult = IGESExport(theFileName, aFormatName, theShape, anError);
   } else {
     anError = "Unsupported format " + aFormatName;
   }