X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelHighAPI%2FModelHighAPI_Folder.cpp;h=18ac4e6e2eaca285d1b9b053e028d482a02957f7;hb=a13f87935d2a6f52f942790b6abc874f1016c9fc;hp=7cfa3215b1570c8234700928e8a74b604ad193c7;hpb=7ab55ab9035e1f5c3249ec8d76993bb6aff006df;p=modules%2Fshaper.git diff --git a/src/ModelHighAPI/ModelHighAPI_Folder.cpp b/src/ModelHighAPI/ModelHighAPI_Folder.cpp index 7cfa3215b..18ac4e6e2 100644 --- a/src/ModelHighAPI/ModelHighAPI_Folder.cpp +++ b/src/ModelHighAPI/ModelHighAPI_Folder.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,33 +12,111 @@ // // 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 "ModelHighAPI_Folder.h" -#include +#include +#include +#include +#include #include -#include +#include //-------------------------------------------------------------------------------------- ModelHighAPI_Folder::ModelHighAPI_Folder(const std::shared_ptr & theFolder) + : ModelHighAPI_Interface(FeaturePtr()), + myFolder(theFolder) { + initialize(); } - ModelHighAPI_Folder::~ModelHighAPI_Folder() { } +bool ModelHighAPI_Folder::initialize() +{ + if (!myFolder) { + throwException(ID() + " exception: The folder is NULL."); + return false; + } + + myFirstFeature = myFolder->reference(ModelAPI_Folder::FIRST_FEATURE_ID()); + if (!myFirstFeature) + return false; + myAttrGetter[ModelAPI_Folder::FIRST_FEATURE_ID()] = "firstFeature"; + + myLastFeature = myFolder->reference(ModelAPI_Folder::LAST_FEATURE_ID()); + if (!myLastFeature) + return false; + myAttrGetter[ModelAPI_Folder::LAST_FEATURE_ID()] = "lastFeature"; + + return true; +} + +void ModelHighAPI_Folder::setName(const std::wstring& theName) +{ + if (myFolder && myFolder->data() && myFolder->data()->isValid()) + myFolder->data()->setName(theName); +} + +std::wstring ModelHighAPI_Folder::name() const +{ + return myFolder->data()->name(); +} + +void ModelHighAPI_Folder::dump(ModelHighAPI_Dumper& theDumper) const +{ + const std::string& aDocName = theDumper.name(myFolder->document()); + + AttributeReferencePtr aStartRef = firstFeature(); + AttributeReferencePtr aEndRef = lastFeature(); + + // do not dump empty folders + if (!aEndRef->value()) + return; + + // Dump folder when its features have been already dumped. + // Otherwise, store the folder postponed. + if (theDumper.isDumped(EntityPtr(aEndRef->value()))) + theDumper << myFolder << " = model.addFolder(" << aDocName << ", " + << aStartRef << ", " << aEndRef << ")" << std::endl; + else + theDumper.postpone(myFolder); +} + //-------------------------------------------------------------------------------------- -std::shared_ptr addFolder(const std::shared_ptr& thePart) +std::shared_ptr addFolder(const std::shared_ptr& theDoc) { - std::shared_ptr aFolder;//// = thePart->addFolder(); + std::shared_ptr aFolder = theDoc->addFolder(); return std::shared_ptr(new ModelHighAPI_Folder(aFolder)); } + +std::shared_ptr addFolder(const std::shared_ptr& theDoc, + const ModelHighAPI_Reference& theFirstFeature, + const ModelHighAPI_Reference& theLastFeature) +{ + std::shared_ptr aFolder = theDoc->addFolder(theFirstFeature.feature()); + + AttributeReferencePtr aFirstFeatAttr = aFolder->reference(ModelAPI_Folder::FIRST_FEATURE_ID()); + fillAttribute(theFirstFeature.feature(), aFirstFeatAttr); + + AttributeReferencePtr aLastFeatAttr = aFolder->reference(ModelAPI_Folder::LAST_FEATURE_ID()); + fillAttribute(theLastFeature.feature(), aLastFeatAttr); + + // to update the folder state in the Object Browser + theDoc->updateHistory(ModelAPI_Feature::group()); + + return std::shared_ptr(new ModelHighAPI_Folder(aFolder)); +} + +void removeFolder(std::shared_ptr& theFolder) +{ + theFolder->folder()->document()->removeFolder(theFolder->folder()); +}