X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangeAPI%2FExchangeAPI_Import.cpp;h=b1a6c832d0cee6027f99b2ae059de409be245b16;hb=0f741a0aac31eb97b832f9dc260a875ae7e10246;hp=fe1bf0bf0648435963aa728ba64bc75948c1b500;hpb=53ad97caf19acc787fd7353f894e2304280de195;p=modules%2Fshaper.git diff --git a/src/ExchangeAPI/ExchangeAPI_Import.cpp b/src/ExchangeAPI/ExchangeAPI_Import.cpp index fe1bf0bf0..b1a6c832d 100644 --- a/src/ExchangeAPI/ExchangeAPI_Import.cpp +++ b/src/ExchangeAPI/ExchangeAPI_Import.cpp @@ -1,14 +1,36 @@ -// Name : ExchangeAPI_Import.cpp -// Purpose: +// 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 // -// History: -// 07/06/16 - Sergey POKHODENKO - Creation of the file -//-------------------------------------------------------------------------------------- #include "ExchangeAPI_Import.h" //-------------------------------------------------------------------------------------- +#include +//-------------------------------------------------------------------------------------- +#include +#include #include //-------------------------------------------------------------------------------------- +#include +#include +#include +//-------------------------------------------------------------------------------------- +#include + ExchangeAPI_Import::ExchangeAPI_Import( const std::shared_ptr & theFeature) : ModelHighAPI_Interface(theFeature) @@ -39,12 +61,82 @@ void ExchangeAPI_Import::setFilePath(const std::string & theFilePath) } //-------------------------------------------------------------------------------------- -// TODO(spo): make add* as static functions of the class +void ExchangeAPI_Import::dump(ModelHighAPI_Dumper& theDumper) const +{ + FeaturePtr aBase = feature(); + std::string aPartName = theDumper.name(aBase->document()); + + std::string aFilePath = aBase->string(ExchangePlugin_ImportFeature::FILE_PATH_ID())->value(); + std::string aFrom = "\\"; + std::string aTo = "\\\\"; + for(std::size_t aPos = aFilePath.find(aFrom); + aPos != std::string::npos; + aPos = aFilePath.find(aFrom, aPos)) { + aFilePath.replace(aPos, aFrom.size(), aTo); + aPos += aTo.size(); + } + + theDumper << aBase << " = model.addImport(" << aPartName << ", \"" + << aFilePath << "\")" << std::endl; + // to make import have results + theDumper << "model.do()" << std::endl; + + CompositeFeaturePtr aCompositeFeature = + std::dynamic_pointer_cast(aBase); + if(aCompositeFeature.get()) { + int aNbOfSubs = aCompositeFeature->numberOfSubs(); + for(int anIndex = 0; anIndex < aNbOfSubs; ++anIndex) { + std::string aSubFeatureGet = + theDumper.name(aBase) + ".subFeature(" + std::to_string((long long)anIndex) + ")"; + theDumper.dumpSubFeatureNameAndColor(aSubFeatureGet, aCompositeFeature->subFeature(anIndex)); + } + } +} + +//-------------------------------------------------------------------------------------- ImportPtr addImport( const std::shared_ptr & thePart, const std::string & theFilePath) { - // TODO(spo): check that thePart is not empty std::shared_ptr aFeature = thePart->addFeature(ExchangeAPI_Import::ID()); return ImportPtr(new ExchangeAPI_Import(aFeature, theFilePath)); } + +void importPart(const std::shared_ptr & thePart, + const std::string & theFilePath, + const ModelHighAPI_Reference & theAfterThis) +{ + static const bool THE_VISIBLE_FEATURE = false; + FeaturePtr aCurrentFeature; + if (theAfterThis.feature()) { + aCurrentFeature = thePart->currentFeature(THE_VISIBLE_FEATURE); + thePart->setCurrentFeature(theAfterThis.feature(), THE_VISIBLE_FEATURE); + } + + FeaturePtr aFeature = thePart->addFeature(ExchangePlugin_ImportPart::ID()); + aFeature->string(ExchangePlugin_ImportPart::FILE_PATH_ID())->setValue(theFilePath); + + // specify the ID of selected document + int aTargetPartIndex = 0; + SessionPtr aSession = ModelAPI_Session::get(); + if (aSession->moduleDocument() == thePart) { + // Importing to PartSet has 2 choices: import directly to PartSet (if possible) + // or create a new part. Because then importing to existing part the document + // has to be specified explicitly. + // As a result, parse the list of possible target documents and generate new part + // if the import document is not applicable on PartSet level + // (there is no 'PartSet' in the list of applicable documents). + AttributeStringArrayPtr aDocsList = + aFeature->stringArray(ExchangePlugin_ImportPart::TARGET_PARTS_LIST_ID()); + if (aDocsList->size() > 1 && aDocsList->value(1) == "PartSet") + aTargetPartIndex = 1; + } + aFeature->integer(ExchangePlugin_ImportPart::TARGET_PART_ID())->setValue(aTargetPartIndex); + + // restart transaction to execute and delete the macro-feature + apply(); + + // restore current feature + if (aCurrentFeature) + thePart->setCurrentFeature(aCurrentFeature, THE_VISIBLE_FEATURE); +}