X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFeaturesPlugin%2FFeaturesPlugin_Recover.cpp;h=cf16130b979520cbe8f40c9d3cd43f0aad4b6716;hb=b461398b1e2fa134eb33cf1ad8bc516e6ee40620;hp=5eb5aa84e27911e9e68b7d56a398197c2134dd36;hpb=95b5b61c8b3e0ab0de64955952894cd32bc49e06;p=modules%2Fshaper.git diff --git a/src/FeaturesPlugin/FeaturesPlugin_Recover.cpp b/src/FeaturesPlugin/FeaturesPlugin_Recover.cpp index 5eb5aa84e..cf16130b9 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_Recover.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_Recover.cpp @@ -1,8 +1,22 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> - -// File: FeaturesPlugin_Recover.cpp -// Created: 29 Jul 2016 -// Author: Natalia ERMOLAEVA +// 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 +// #include "FeaturesPlugin_Recover.h" @@ -10,10 +24,13 @@ #include #include #include +#include #include #include - -using namespace std; +#include +#include +#include +#include FeaturesPlugin_Recover::FeaturesPlugin_Recover() { @@ -21,13 +38,56 @@ FeaturesPlugin_Recover::FeaturesPlugin_Recover() void FeaturesPlugin_Recover::initAttributes() { - data()->addAttribute(BASE_SHAPE_ID(), ModelAPI_AttributeReference::typeId()); + data()->addAttribute(BASE_FEATURE(), ModelAPI_AttributeReference::typeId()); data()->addAttribute(RECOVERED_ENTITIES(), ModelAPI_AttributeRefList::typeId()); - /// temporary modification for empty list - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), RECOVERED_ENTITIES()); } void FeaturesPlugin_Recover::execute() { + int aResultIndex = 0; + AttributeRefListPtr aRecovered = reflist(RECOVERED_ENTITIES()); + for(int anIndex = aRecovered->size() - 1; anIndex >= 0; anIndex--) { + ObjectPtr anObj = aRecovered->object(anIndex); + if (!anObj.get()) + continue; + ResultPtr aResult = std::dynamic_pointer_cast(anObj); + if (!aResult.get()) + continue; + GeomShapePtr aShape = aResult->shape(); + if (!aShape.get()) + continue; + + // Copy shape. + GeomAlgoAPI_Copy aCopyAlgo(aShape); + // Check that algo is done. + if(!aCopyAlgo.isDone()) { + setError("Error: recover algorithm failed."); + return; + } + // Check if shape is not null. + if(!aCopyAlgo.shape().get() || aCopyAlgo.shape()->isNull()) { + setError("Error: resulting shape is null."); + return; + } + // Check that resulting shape is valid. + if(!aCopyAlgo.isValid()) { + setError("Error: resulting shape is not valid."); + return; + } + + // Store result. + ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex); + aResultBody->store(aCopyAlgo.shape());//, aCopyAlgo.shape()); + std::shared_ptr aSubShapes = aCopyAlgo.mapOfSubShapes(); + // like in import: forget any history + int aTag(1); + std::string aNameMS = "Shape"; + aResultBody->loadFirstLevel(aCopyAlgo.shape(), aNameMS, aTag); + + setResult(aResultBody, aResultIndex); + ++aResultIndex; + } + + removeResults(aResultIndex); }