From 5fa5757dc6fe8956fc410811126019bf14c97bdd Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me?= Date: Sun, 20 Sep 2020 21:48:15 +0200 Subject: [PATCH] Implementation Export STL --- src/ExchangeAPI/ExchangeAPI_Export.cpp | 94 +++++++++++++++++++ src/ExchangeAPI/ExchangeAPI_Export.h | 42 ++++++++- .../ExchangePlugin_ExportFeature.cpp | 72 ++++++++++++++ .../ExchangePlugin_ExportFeature.h | 63 +++++++++++++ src/ExchangePlugin/ExchangePlugin_msg_fr.ts | 79 ++++++++++++++++ src/ExchangePlugin/export_widget.xml | 58 ++++++++++++ src/GeomAlgoAPI/CMakeLists.txt | 2 + src/GeomAlgoAPI/GeomAlgoAPI_STLExport.cpp | 88 +++++++++++++++++ src/GeomAlgoAPI/GeomAlgoAPI_STLExport.h | 39 ++++++++ src/ModelHighAPI/ModelHighAPI_Macro.h | 53 +++++++++++ src/PythonAPI/model/exchange/__init__.py | 2 +- 11 files changed, 589 insertions(+), 3 deletions(-) create mode 100644 src/GeomAlgoAPI/GeomAlgoAPI_STLExport.cpp create mode 100644 src/GeomAlgoAPI/GeomAlgoAPI_STLExport.h diff --git a/src/ExchangeAPI/ExchangeAPI_Export.cpp b/src/ExchangeAPI/ExchangeAPI_Export.cpp index 000e178ab..4e9b4b9c3 100644 --- a/src/ExchangeAPI/ExchangeAPI_Export.cpp +++ b/src/ExchangeAPI/ExchangeAPI_Export.cpp @@ -53,6 +53,51 @@ ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& apply(); // finish operation to make sure the export is done on the current state of the history } +// Constructor with values for STL of selected result export. +ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, + const std::string & theFilePath, + const ModelHighAPI_Selection& theSelectedShape, + double aDeflectionRelative, + double aDeflectionAbsolute, + const bool anIsRelative, + const bool anIsASCII) + : ModelHighAPI_Interface(theFeature) +{ + initialize(); + fillAttribute("STL", theFeature->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())); + fillAttribute(theFilePath, theFeature->string(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID())); + + if (anIsRelative) { + fillAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_RELATIVE(), + theFeature->string(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE()) ); + fillAttribute(aDeflectionRelative, + theFeature->real(ExchangePlugin_ExportFeature::STL_RELATIVE()) ); + } + else { + fillAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_ABSOLUTE(), + theFeature->string(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE()) ); + fillAttribute(aDeflectionAbsolute, + theFeature->real(ExchangePlugin_ExportFeature::STL_ABSOLUTE()) ); + } + + if(anIsASCII){ + fillAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE_ASCII(), + theFeature->string(ExchangePlugin_ExportFeature::STL_FILE_TYPE())); + } + else + { + fillAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE_BINARY(), + theFeature->string(ExchangePlugin_ExportFeature::STL_FILE_TYPE())); + } + + fillAttribute(theSelectedShape,theFeature->selection(ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED())); + fillAttribute("STL", theFeature->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID())); + execute(); + apply(); // finish operation to make sure the export is done on the current state of the history +} + + + ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, const std::string & theFilePath, const ModelHighAPI_Selection& theResult, const std::string & theAuthor, const std::string & theGeometryName) @@ -74,6 +119,7 @@ ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& } + /// Constructor with values for export in other formats than XAO. ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, const std::string & theFilePath, @@ -144,6 +190,33 @@ void ExchangeAPI_Export::dump(ModelHighAPI_Dumper& theDumper) const theDumper << ", '" << theGeometryName << "'"; theDumper << ")" << std::endl; } + else if (exportType == "STL") { + std::string aTmpSTLFile = + aBase->string(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID())->value(); + correctSeparators(aTmpSTLFile); + theDumper << "exportToSTL(" << aDocName << ", '" << aTmpSTLFile << "'" ; + AttributeSelectionPtr aShapeSelected = + aBase->selection(ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED()); + + theDumper<<","<< aShapeSelected; + + theDumper <<","<< stlabsolute() <<","<< stlrelative(); + + if (stldeflectionType()->value() == ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_RELATIVE()) { + theDumper <<","<< "True"; + } + else { + theDumper <<","<< "False"; + } + + if (stlfileType()->value() == ExchangePlugin_ExportFeature::STL_FILE_TYPE_BINARY()) { + theDumper << "False"; + } + else { + theDumper << "True"; + } + theDumper << ")" << std::endl; + } else { std::string aFilePath = aBase->string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->value(); correctSeparators(aFilePath); @@ -179,6 +252,27 @@ ExportPtr exportToXAO(const std::shared_ptr & thePart, return ExportPtr(new ExchangeAPI_Export(aFeature, theFilePath, theAuthor, theGeometryName)); } +ExportPtr exportToSTL(const std::shared_ptr & thePart, + const std::string & theFilePath, + const ModelHighAPI_Selection& theSelectedShape, + double aDeflectionRelative, + double aDeflectionAbsolute, + const bool anIsRelative, + const bool anIsASCII) +{ + apply(); // finish previous operation to make sure all previous operations are done + std::shared_ptr aFeature = + thePart->addFeature(ExchangePlugin_ExportFeature::ID()); + + return ExportPtr(new ExchangeAPI_Export(aFeature, + theFilePath, + theSelectedShape, + aDeflectionRelative, + aDeflectionAbsolute, + anIsRelative, + anIsASCII)); +} + ExportPtr exportToXAO(const std::shared_ptr & thePart, const std::string & theFilePath, const ModelHighAPI_Selection& theSelectedShape, const std::string & /*theAuthor*/, const std::string & /*theGeometryName*/) diff --git a/src/ExchangeAPI/ExchangeAPI_Export.h b/src/ExchangeAPI/ExchangeAPI_Export.h index 24211c9fa..d867da1bf 100644 --- a/src/ExchangeAPI/ExchangeAPI_Export.h +++ b/src/ExchangeAPI/ExchangeAPI_Export.h @@ -51,6 +51,16 @@ public: const std::string & theFilePath, const std::string & theAuthor = std::string(), const std::string & theGeometryName = std::string()); + + /// Constructor with values for STL of selected result export. + EXCHANGEAPI_EXPORT + explicit ExchangeAPI_Export(const std::shared_ptr& theFeature, + const std::string & theFilePath, + const ModelHighAPI_Selection& theSelectedShape, + double aDeflectionRelative , + double aDeflectionAbsolute, + const bool anIsRelative, + const bool anIsASCII); /// Constructor with values for XAO of selected result export. EXCHANGEAPI_EXPORT @@ -71,7 +81,7 @@ public: EXCHANGEAPI_EXPORT virtual ~ExchangeAPI_Export(); - INTERFACE_7(ExchangePlugin_ExportFeature::ID(), + INTERFACE_15(ExchangePlugin_ExportFeature::ID(), exportType, ExchangePlugin_ExportFeature::EXPORT_TYPE_ID(), ModelAPI_AttributeString, /** ExportType */, filePath, ExchangePlugin_ExportFeature::FILE_PATH_ID(), @@ -85,7 +95,23 @@ public: xaoAuthor, ExchangePlugin_ExportFeature::XAO_AUTHOR_ID(), ModelAPI_AttributeString, /** xao author */, xaoGeometryName, ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID(), - ModelAPI_AttributeString, /** xao geometry name */) + ModelAPI_AttributeString, /** xao geometry name */, + stlFilePath, ExchangePlugin_ExportFeature::STL_FILE_PATH_ID(), + ModelAPI_AttributeString, /** stl_file_path */, + stlobjectselected, ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED(), + ModelAPI_AttributeSelection, /** Object selected to export in stl file*/, + stldeflectionType, ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE(), + ModelAPI_AttributeString, /** Type of the defelection */, + stlrelative, ExchangePlugin_ExportFeature::STL_RELATIVE(), + ModelAPI_AttributeDouble, /** Relative*/, + stlabsolute, ExchangePlugin_ExportFeature::STL_ABSOLUTE(), + ModelAPI_AttributeDouble, /** Absolute */, + stlfileType, ExchangePlugin_ExportFeature::STL_FILE_TYPE(), + ModelAPI_AttributeString, /** Type of the stl file*/, + stldeflectionTypeabsolute, ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_ABSOLUTE(), + ModelAPI_AttributeString, /** Type of the defelection */, + stldeflectionTyperelative, ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_RELATIVE(), + ModelAPI_AttributeString, /** Type of the defelection */) /// Dump wrapped feature EXCHANGEAPI_EXPORT @@ -113,6 +139,18 @@ ExportPtr exportToXAO(const std::shared_ptr & thePart, const std::string & theAuthor = std::string(), const std::string & theGeometryName = std::string()); +/**\ingroup CPPHighAPI + * \brief Exports to STL file the result of the current document + */ +EXCHANGEAPI_EXPORT +ExportPtr exportToSTL(const std::shared_ptr & thePart, + const std::string & theFilePath, + const ModelHighAPI_Selection& theSelectedShape, + double aDeflectionRelative, + double aDeflectionAbsolute, + const bool anIsRelative, + const bool anIsASCII); + /**\ingroup CPPHighAPI * \brief Exports to XAO file the selected result with groups parts related to it only. */ diff --git a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp index d898a08e5..0d38d857c 100644 --- a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp +++ b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp @@ -27,6 +27,7 @@ #include #endif + #include #include @@ -34,6 +35,7 @@ #include #include #include +#include #include #include @@ -48,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -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 { diff --git a/src/ExchangePlugin/ExchangePlugin_ExportFeature.h b/src/ExchangePlugin/ExchangePlugin_ExportFeature.h index 1067d99af..bc975ea5b 100644 --- a/src/ExchangePlugin/ExchangePlugin_ExportFeature.h +++ b/src/ExchangePlugin/ExchangePlugin_ExportFeature.h @@ -60,6 +60,66 @@ public: static const std::string MY_XAO_FILE_PATH_ID("xao_file_path"); return MY_XAO_FILE_PATH_ID; } + /// attribute name of stl file path + inline static const std::string& STL_FILE_PATH_ID() + { + static const std::string MY_STL_FILE_PATH_ID("stl_file_path"); + return MY_STL_FILE_PATH_ID; + } + /// Attribute name for selected object to export in stl file path. + inline static const std::string& STL_OBJECT_SELECTED() + { + static const std::string ATTR_ID("stl_object_selected"); + return ATTR_ID; + } + /// Attribute name for deflection type. + inline static const std::string& STL_DEFLECTION_TYPE() + { + static const std::string ATTR_ID("stl_deflection_type"); + return ATTR_ID; + } + /// Attribute name for deflection type relative. + inline static const std::string& STL_DEFLECTION_TYPE_RELATIVE() + { + static const std::string ATTR_ID("stl_deflection_type_relative"); + return ATTR_ID; + } + /// Attribute name for deflection type absolute. + inline static const std::string& STL_DEFLECTION_TYPE_ABSOLUTE() + { + static const std::string ATTR_ID("stl_deflection_type_absolute"); + return ATTR_ID; + } + /// Attribute name for relative. + inline static const std::string& STL_RELATIVE() + { + static const std::string ATTR_ID("stl_relative"); + return ATTR_ID; + } + /// Attribute name for absolute. + inline static const std::string& STL_ABSOLUTE() + { + static const std::string ATTR_ID("stl_absolute"); + return ATTR_ID; + } + /// Attribute name for stl file type. + inline static const std::string& STL_FILE_TYPE() + { + static const std::string ATTR_ID("stl_file_type"); + return ATTR_ID; + } + /// Attribute name for stl file type ascii. + inline static const std::string& STL_FILE_TYPE_ASCII() + { + static const std::string ATTR_ID("stl_file_type_acii"); + return ATTR_ID; + } + /// Attribute name for stl file type binary. + inline static const std::string& STL_FILE_TYPE_BINARY() + { + static const std::string ATTR_ID("stl_file_type_binary"); + return ATTR_ID; + } /// attribute name of file format inline static const std::string& FILE_FORMAT_ID() { @@ -129,6 +189,9 @@ protected: /// Performs export to XAO file EXCHANGEPLUGIN_EXPORT void exportXAO(const std::string& theFileName); + + /// Performs export to STL file + EXCHANGEPLUGIN_EXPORT void exportSTL(const std::string& theFileName); }; #endif /* EXPORT_EXPORTFEATURE_H_ */ diff --git a/src/ExchangePlugin/ExchangePlugin_msg_fr.ts b/src/ExchangePlugin/ExchangePlugin_msg_fr.ts index 3e4061b1e..110053a1d 100644 --- a/src/ExchangePlugin/ExchangePlugin_msg_fr.ts +++ b/src/ExchangePlugin/ExchangePlugin_msg_fr.ts @@ -134,6 +134,10 @@ XAO XAO + + STL + STL + Export:file_path @@ -193,6 +197,81 @@ Veuillez saisir le nom de la géométrie + + Export:stl_file_path + + Export file + Fichier d'export + + + + Export:stl_file_path:ExchangePlugin_ExportFormat + + %1 is not initialized. + %1 n'est pas initialisé. + + + File name is empty. + Le nom du fichier est vide. + + + + Export:stl_object_selected + + Object + Objet + + + Object to export. + Objet à exporter. + + + + Export:stl_file_type + + File type + type du fichier + + + Binary + Binaire + + + ASCII + ASCII + + + + Export:Deflection + + Deflection + Déflection + + + Relative + Relative + + + Relative value. + Valeur relative + + + Calculate by size of shape + Calcul par rapport à la taille de la shape + + + Absolute + Absolue + + + Value indicate by user + Valeur indiquée par l'utilisateur + + + Absolute value. + Valeur absolue. + + diff --git a/src/ExchangePlugin/export_widget.xml b/src/ExchangePlugin/export_widget.xml index 9e134b805..d77786ee5 100644 --- a/src/ExchangePlugin/export_widget.xml +++ b/src/ExchangePlugin/export_widget.xml @@ -31,5 +31,63 @@ placeholder="Please input the geometry name"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/GeomAlgoAPI/CMakeLists.txt b/src/GeomAlgoAPI/CMakeLists.txt index 95e749c10..2d3df2aee 100644 --- a/src/GeomAlgoAPI/CMakeLists.txt +++ b/src/GeomAlgoAPI/CMakeLists.txt @@ -48,6 +48,7 @@ SET(PROJECT_HEADERS GeomAlgoAPI_IGESImport.h GeomAlgoAPI_BREPExport.h GeomAlgoAPI_STEPExport.h + GeomAlgoAPI_STLExport.h GeomAlgoAPI_IGESExport.h GeomAlgoAPI_Transform.h GeomAlgoAPI_ShapeTools.h @@ -113,6 +114,7 @@ SET(PROJECT_SOURCES GeomAlgoAPI_IGESImport.cpp GeomAlgoAPI_BREPExport.cpp GeomAlgoAPI_STEPExport.cpp + GeomAlgoAPI_STLExport.cpp GeomAlgoAPI_IGESExport.cpp GeomAlgoAPI_Transform.cpp GeomAlgoAPI_ShapeTools.cpp diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_STLExport.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_STLExport.cpp new file mode 100644 index 000000000..e7d82b642 --- /dev/null +++ b/src/GeomAlgoAPI/GeomAlgoAPI_STLExport.cpp @@ -0,0 +1,88 @@ +// Copyright (C) 2014-2020 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "GeomAlgoAPI_STLExport.h" + +#include "GeomAlgoAPI_Tools.h" + +#include + +// OOCT includes +#include +#include +#include +#include +#include +#include +#include + + + +#define MAX2(X, Y) ( Abs(X) > Abs(Y) ? Abs(X) : Abs(Y) ) +#define MAX3(X, Y, Z) ( MAX2 ( MAX2(X, Y) , Z ) ) + +bool STLExport(const std::string& theFileName, + const std::string& /*theFormatName*/, + const std::shared_ptr& theShape, + const double aDeflection, + const bool anIsRelative, + const bool anIsASCII, + std::string& theError) +{ + #ifdef _DEBUG + std::cout << "Export STl into file " << theFileName << std::endl; + #endif + + if (!theShape.get()) { + theError = "STl Export failed: An invalid argument"; + return false; + } + + try + { + // Set "C" numeric locale to save numbers correctly + GeomAlgoAPI_Tools::Localizer loc; + + double lDeflection = aDeflection; + StlAPI_Writer aWriter; + // copy source shape + BRepBuilderAPI_Copy aCopy( theShape->impl(), Standard_False ); + TopoDS_Shape aCopyShape = aCopy.Shape(); + // ASCII mode + aWriter.ASCIIMode() = anIsASCII; + if ( anIsRelative ) { + Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax; + Bnd_Box bndBox; + BRepBndLib::Add( theShape->impl(), bndBox ); + bndBox.Get( aXmin, aYmin, aZmin, aXmax, aYmax, aZmax ); + lDeflection = MAX3( aXmax-aXmin, aYmax-aYmin, aZmax-aZmin ) * aDeflection; + } + //Compute triangulation + BRepTools::Clean( aCopyShape ); + BRepMesh_IncrementalMesh aMesh( aCopyShape, lDeflection ); + aWriter.Write( aCopyShape, theFileName.c_str() ); + + return true; + } + catch( Standard_Failure ) + { + theError = "Exception catched in STlExport"; + } + return false; +} diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_STLExport.h b/src/GeomAlgoAPI/GeomAlgoAPI_STLExport.h new file mode 100644 index 000000000..327dce41e --- /dev/null +++ b/src/GeomAlgoAPI/GeomAlgoAPI_STLExport.h @@ -0,0 +1,39 @@ +// Copyright (C) 2014-2020 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef GEOMALGOAPI_STLEXPORT_H_ +#define GEOMALGOAPI_STLEXPORT_H_ + +#include + +#include + +#include + +/// Implementation of the export STL files algorithms +GEOMALGOAPI_EXPORT +bool STLExport(const std::string& theFileName, + const std::string& /*theFormatName*/, + const std::shared_ptr& theShape, + const double aDeflection, + const bool anIsRelative, + const bool anIsASCII, + std::string& theError); + +#endif /* GEOMALGOAPI_STLEXPORT_H_ */ diff --git a/src/ModelHighAPI/ModelHighAPI_Macro.h b/src/ModelHighAPI/ModelHighAPI_Macro.h index 333de514e..a372090fe 100644 --- a/src/ModelHighAPI/ModelHighAPI_Macro.h +++ b/src/ModelHighAPI/ModelHighAPI_Macro.h @@ -535,6 +535,59 @@ SET_ATTRIBUTE(N_13, T_13, AN_13) \ END_INIT() \ public: +//-------------------------------------------------------------------------------------- +#define INTERFACE_15(KIND, \ + N_0, AN_0, T_0, C_0, \ + N_1, AN_1, T_1, C_1, \ + N_2, AN_2, T_2, C_2, \ + N_3, AN_3, T_3, C_3, \ + N_4, AN_4, T_4, C_4, \ + N_5, AN_5, T_5, C_5, \ + N_6, AN_6, T_6, C_6, \ + N_7, AN_7, T_7, C_7, \ + N_8, AN_8, T_8, C_8, \ + N_9, AN_9, T_9, C_9, \ + N_10, AN_10, T_10, C_10, \ + N_11, AN_11, T_11, C_11, \ + N_12, AN_12, T_12, C_12, \ + N_13, AN_13, T_13, C_13, \ + N_14, AN_14, T_14, C_14) \ + public: \ + INTERFACE_COMMON(KIND) \ + DEFINE_ATTRIBUTE(N_0, T_0, C_0) \ + DEFINE_ATTRIBUTE(N_1, T_1, C_1) \ + DEFINE_ATTRIBUTE(N_2, T_2, C_2) \ + DEFINE_ATTRIBUTE(N_3, T_3, C_3) \ + DEFINE_ATTRIBUTE(N_4, T_4, C_4) \ + DEFINE_ATTRIBUTE(N_5, T_5, C_5) \ + DEFINE_ATTRIBUTE(N_6, T_6, C_6) \ + DEFINE_ATTRIBUTE(N_7, T_7, C_7) \ + DEFINE_ATTRIBUTE(N_8, T_8, C_8) \ + DEFINE_ATTRIBUTE(N_9, T_9, C_9) \ + DEFINE_ATTRIBUTE(N_10, T_10, C_10) \ + DEFINE_ATTRIBUTE(N_11, T_11, C_11) \ + DEFINE_ATTRIBUTE(N_12, T_12, C_12) \ + DEFINE_ATTRIBUTE(N_13, T_13, C_13) \ + DEFINE_ATTRIBUTE(N_14, T_14, C_14) \ + protected: \ + START_INIT() \ + SET_ATTRIBUTE(N_0, T_0, AN_0) \ + SET_ATTRIBUTE(N_1, T_1, AN_1) \ + SET_ATTRIBUTE(N_2, T_2, AN_2) \ + SET_ATTRIBUTE(N_3, T_3, AN_3) \ + SET_ATTRIBUTE(N_4, T_4, AN_4) \ + SET_ATTRIBUTE(N_5, T_5, AN_5) \ + SET_ATTRIBUTE(N_6, T_6, AN_6) \ + SET_ATTRIBUTE(N_7, T_7, AN_7) \ + SET_ATTRIBUTE(N_8, T_8, AN_8) \ + SET_ATTRIBUTE(N_9, T_9, AN_9) \ + SET_ATTRIBUTE(N_10, T_10, AN_10) \ + SET_ATTRIBUTE(N_11, T_11, AN_11) \ + SET_ATTRIBUTE(N_12, T_12, AN_12) \ + SET_ATTRIBUTE(N_13, T_13, AN_13) \ + SET_ATTRIBUTE(N_14, T_14, AN_14) \ + END_INIT() \ + public: //-------------------------------------------------------------------------------------- #define INTERFACE_16(KIND, \ diff --git a/src/PythonAPI/model/exchange/__init__.py b/src/PythonAPI/model/exchange/__init__.py index a37fdd678..0e71bf080 100644 --- a/src/PythonAPI/model/exchange/__init__.py +++ b/src/PythonAPI/model/exchange/__init__.py @@ -19,7 +19,7 @@ """Package for Exchange plugin for the Parametric Geometry API of the Modeler. """ -from ExchangeAPI import addImport, exportToFile, exportToXAO +from ExchangeAPI import addImport, exportToFile, exportToXAO, exportToSTL from ExchangeAPI import exportPart, importPart from .tools import * -- 2.39.2