X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangeAPI%2FExchangeAPI_Export.cpp;h=2d764635a27b543c56fcc5f751cba48a17417922;hb=c6745a6b1ad00c0285fab5aeac2cb0d57afef5cc;hp=71666dca3b28ca86cf1970627ddaff1ee5155172;hpb=82beaf3018c2932ab40753f2ef7f0834b4ab43b5;p=modules%2Fshaper.git diff --git a/src/ExchangeAPI/ExchangeAPI_Export.cpp b/src/ExchangeAPI/ExchangeAPI_Export.cpp index 71666dca3..2d764635a 100644 --- a/src/ExchangeAPI/ExchangeAPI_Export.cpp +++ b/src/ExchangeAPI/ExchangeAPI_Export.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2019 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 @@ -12,19 +12,21 @@ // // 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 +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "ExchangeAPI_Export.h" //-------------------------------------------------------------------------------------- +#include +//-------------------------------------------------------------------------------------- #include #include #include #include #include +#include //-------------------------------------------------------------------------------------- ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature) @@ -51,6 +53,27 @@ 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 } +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) + : ModelHighAPI_Interface(theFeature) +{ + initialize(); + fillAttribute("XAO", theFeature->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())); + fillAttribute(theFilePath, theFeature->string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())); + fillAttribute(theAuthor, theFeature->string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())); + fillAttribute(theGeometryName, + theFeature->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())); + fillAttribute("XAO", theFeature->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID())); + std::list aListOfOneSel; + aListOfOneSel.push_back(theResult); + fillAttribute(aListOfOneSel, + theFeature->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID())); + execute(); + apply(); // finish operation to make sure the export is done on the current state of the history +} + + /// Constructor with values for export in other formats than XAO. ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, const std::string & theFilePath, @@ -72,10 +95,28 @@ ExchangeAPI_Export::~ExchangeAPI_Export() { } +// this method is needed on Windows because back-slashes in python may cause error +static void correctSeparators(std::string& thePath) { + // replace single "\" or triple "\\\" or more by double "\" + for (std::size_t aFind = thePath.find('\\'); aFind != std::string::npos; + aFind = thePath.find('\\', aFind)) { + // search the next + std::size_t aFind2 = thePath.find('\\', aFind + 1); + if (aFind2 == std::string::npos || aFind2 > aFind + 1) { // single, so add one more + thePath.replace(aFind, 1, 2, '\\'); + } else { // if there is more than double "\", remove them + for (aFind2 = thePath.find('\\', aFind2 + 1); + aFind2 != std::string::npos && aFind2 <= aFind + 2; + aFind2 = thePath.find('\\', aFind2)) { + thePath.erase(aFind2, 1); + } + } + aFind += 2; + } +} void ExchangeAPI_Export::dump(ModelHighAPI_Dumper& theDumper) const { - FeaturePtr aBase = feature(); const std::string& aDocName = theDumper.name(aBase->document()); @@ -84,24 +125,35 @@ void ExchangeAPI_Export::dump(ModelHighAPI_Dumper& theDumper) const std::string exportType = aBase->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())->value(); if (exportType == "XAO") { - std::string tmpXAOFile = aBase->string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value(); - theDumper << "exportToXAO(" << aDocName << ", '" << tmpXAOFile << "'" ; + std::string aTmpXAOFile = + aBase->string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value(); + correctSeparators(aTmpXAOFile); + theDumper << "exportToXAO(" << aDocName << ", '" << aTmpXAOFile << "'" ; + AttributeSelectionListPtr aShapeSelected = + aBase->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID()); + if (aShapeSelected->isInitialized() && aShapeSelected->size() == 1) { + theDumper<<", "<value(0); + } + std::string theAuthor = aBase->string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())->value(); - if (not theAuthor.empty()) + if (! theAuthor.empty()) theDumper << ", '" << theAuthor << "'"; - std::string theGeometryName = aBase->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value(); - if (not theGeometryName.empty()) + std::string theGeometryName = + aBase->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value(); + if (! theGeometryName.empty()) theDumper << ", '" << theGeometryName << "'"; theDumper << ")" << std::endl; } else { - theDumper << "exportToFile(" << aDocName << ", " << - aBase->string(ExchangePlugin_ExportFeature::FILE_PATH_ID()) << ", " << - aBase->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID()) ; - std::string theFileFormat = aBase->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID())->value(); - if (not theFileFormat.empty()) - theDumper << ", '" << theFileFormat << "'"; - theDumper << ")" << std::endl; + std::string aFilePath = aBase->string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->value(); + correctSeparators(aFilePath); + theDumper << "exportToFile(" << aDocName << ", \"" << aFilePath << "\", " << + aBase->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID()); + std::string theFileFormat = + aBase->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID())->value(); + if (!theFileFormat.empty()) + theDumper << ", '" << theFileFormat << "'"; + theDumper << ")" << std::endl; } } @@ -127,4 +179,28 @@ ExportPtr exportToXAO(const std::shared_ptr & thePart, return ExportPtr(new ExchangeAPI_Export(aFeature, theFilePath, theAuthor, theGeometryName)); } +ExportPtr exportToXAO(const std::shared_ptr & thePart, + const std::string & theFilePath, const ModelHighAPI_Selection& theSelectedShape, + const std::string & theAuthor, const std::string & theGeometryName) +{ + apply(); // finish previous operation to make sure all previous operations are done + std::shared_ptr aFeature = + thePart->addFeature(ExchangePlugin_ExportFeature::ID()); + // special internal case when for XAO a selection list is filled + return ExportPtr(new ExchangeAPI_Export(aFeature, theFilePath, theSelectedShape, "XAO")); +} + +void exportPart(const std::shared_ptr & thePart, + const std::string & theFilePath, + const std::list & theSelected) +{ + FeaturePtr aFeature = thePart->addFeature(ExchangePlugin_ExportPart::ID()); + aFeature->string(ExchangePlugin_ExportPart::FILE_PATH_ID())->setValue(theFilePath); + if (!theSelected.empty()) { + fillAttribute(theSelected, + aFeature->selectionList(ExchangePlugin_ExportPart::SELECTION_LIST_ID())); + } + // restart transaction to execute and delete the macro-feature + apply(); +} //--------------------------------------------------------------------------------------