]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp
Salome HOME
Implementation Export STL
[modules/shaper.git] / src / ExchangePlugin / ExchangePlugin_ExportFeature.cpp
index d898a08e5dd8895c829986908eed8143629eae56..0d38d857ca1723dc2dcb588318fa9312bab4d1c7 100644 (file)
@@ -27,6 +27,7 @@
 #include <ostream>
 #endif
 
+
 #include <Config_Common.h>
 #include <Config_PropManager.h>
 
@@ -34,6 +35,7 @@
 #include <GeomAlgoAPI_CompoundBuilder.h>
 #include <GeomAlgoAPI_IGESExport.h>
 #include <GeomAlgoAPI_STEPExport.h>
+#include <GeomAlgoAPI_STLExport.h>
 #include <GeomAlgoAPI_Tools.h>
 #include <GeomAlgoAPI_XAOExport.h>
 
@@ -48,6 +50,7 @@
 #include <ModelAPI_AttributeStringArray.h>
 #include <ModelAPI_AttributeIntArray.h>
 #include <ModelAPI_AttributeTables.h>
+#include <ModelAPI_AttributeDouble.h>
 #include <ModelAPI_Data.h>
 #include <ModelAPI_Document.h>
 #include <ModelAPI_Object.h>
@@ -98,9 +101,27 @@ void ExchangePlugin_ExportFeature::initAttributes()
     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(),
@@ -128,6 +149,11 @@ void ExchangePlugin_ExportFeature::attributeChanged(const std::string& theID)
     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());
+  }
+
 }
 
 /*
@@ -170,6 +196,9 @@ void ExchangePlugin_ExportFeature::exportFile(const std::string& theFileName,
   if (aFormatName == "XAO") {
     exportXAO(theFileName);
     return;
+  }else if (aFormatName == "STL") {
+    exportSTL(theFileName);
+    return;
   }
 
   // make shape for export from selected shapes
@@ -316,6 +345,49 @@ static bool isInResults(AttributeSelectionListPtr theSelection,
   return false;
 }
 
+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,
+                      "STL",
+                      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 {