X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangeAPI%2FExchangeAPI_Export.cpp;h=6165c8fa62e8cfa958cb6ba5f2090320e72a0276;hb=a3c4a2b2e6fdc549165b6c660124a75367141a7b;hp=263f14d89ea79a65ce23cfbcf6423eb40496d497;hpb=53ad97caf19acc787fd7353f894e2304280de195;p=modules%2Fshaper.git diff --git a/src/ExchangeAPI/ExchangeAPI_Export.cpp b/src/ExchangeAPI/ExchangeAPI_Export.cpp index 263f14d89..6165c8fa6 100644 --- a/src/ExchangeAPI/ExchangeAPI_Export.cpp +++ b/src/ExchangeAPI/ExchangeAPI_Export.cpp @@ -1,66 +1,153 @@ -// Name : ExchangeAPI_Export.cpp -// Purpose: +// Copyright (C) 2014-2017 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 // -// History: -// 07/06/16 - Sergey POKHODENKO - Creation of the file -//-------------------------------------------------------------------------------------- #include "ExchangeAPI_Export.h" //-------------------------------------------------------------------------------------- +#include +#include #include +#include +#include //-------------------------------------------------------------------------------------- -ExchangeAPI_Export::ExchangeAPI_Export( - const std::shared_ptr & theFeature) + +ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature) : ModelHighAPI_Interface(theFeature) { initialize(); } -ExchangeAPI_Export::ExchangeAPI_Export( - const std::shared_ptr & theFeature, - const std::string & theFilePath, - const std::string & theFileFormat, - const std::list & theSelectionList) +/// Constructor with values for XAO export. +ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, + const std::string & theFilePath, + const std::string & theAuthor, + const std::string & theGeometryName) : ModelHighAPI_Interface(theFeature) { - if (initialize()) { - setFilePath(theFilePath); - setFileFormat(theFileFormat); - setSelectionList(theSelectionList); - execute(); - } + 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())); + 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, + const std::list & theSelectionList, + const std::string & theFileFormat) +: ModelHighAPI_Interface(theFeature) +{ + initialize(); + fillAttribute("Regular", theFeature->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())); + fillAttribute(theFilePath, theFeature->string(ExchangePlugin_ExportFeature::FILE_PATH_ID())); + fillAttribute(theSelectionList, + theFeature->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID())); + fillAttribute(theFileFormat, 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() { +} +// 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::setFilePath(const std::string & theFilePath) +void ExchangeAPI_Export::dump(ModelHighAPI_Dumper& theDumper) const { - fillAttribute(theFilePath, myfilePath); + FeaturePtr aBase = feature(); + const std::string& aDocName = theDumper.name(aBase->document()); + + theDumper << aBase << " = model."; + + std::string exportType = aBase->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())->value(); + + if (exportType == "XAO") { + std::string aTmpXAOFile = + aBase->string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value(); + correctSeparators(aTmpXAOFile); + theDumper << "exportToXAO(" << aDocName << ", '" << aTmpXAOFile << "'" ; + std::string theAuthor = aBase->string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())->value(); + if (! theAuthor.empty()) + theDumper << ", '" << theAuthor << "'"; + std::string theGeometryName = + aBase->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value(); + if (! theGeometryName.empty()) + theDumper << ", '" << theGeometryName << "'"; + theDumper << ")" << std::endl; + } + else { + 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; + } } -void ExchangeAPI_Export::setFileFormat(const std::string & theFileFormat) +ExportPtr exportToFile(const std::shared_ptr & thePart, + const std::string & theFilePath, + const std::list & theSelectionList, + const std::string & theFileFormat) { - fillAttribute(theFileFormat, myfileFormat); + 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, theSelectionList, theFileFormat)); } -void ExchangeAPI_Export::setSelectionList( - const std::list & theSelectionList) +ExportPtr exportToXAO(const std::shared_ptr & thePart, + const std::string & theFilePath, + const std::string & theAuthor, + const std::string & theGeometryName) { - fillAttribute(theSelectionList, myselectionList); + 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, theAuthor, theGeometryName)); } //-------------------------------------------------------------------------------------- -ExportPtr exportToFile( - const std::shared_ptr & thePart, - const std::string & theFilePath, - const std::string & theFileFormat, - const std::list & theSelectionList) -{ - // TODO(spo): check that thePart is not empty - std::shared_ptr aFeature = thePart->addFeature(ExchangeAPI_Export::ID()); - return ExportPtr(new ExchangeAPI_Export(aFeature, theFilePath, theFileFormat, theSelectionList)); -}