X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFeaturesPlugin%2FFeaturesPlugin_Recover.cpp;h=4bbfd76e858d294d47999b3f45cff366337897a5;hb=4f565b2204d3fba046aa8c851abada2a5a17bf6c;hp=5eb5aa84e27911e9e68b7d56a398197c2134dd36;hpb=95b5b61c8b3e0ab0de64955952894cd32bc49e06;p=modules%2Fshaper.git diff --git a/src/FeaturesPlugin/FeaturesPlugin_Recover.cpp b/src/FeaturesPlugin/FeaturesPlugin_Recover.cpp index 5eb5aa84e..4bbfd76e8 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_Recover.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_Recover.cpp @@ -10,10 +10,12 @@ #include #include #include +#include #include #include - -using namespace std; +#include +#include +#include FeaturesPlugin_Recover::FeaturesPlugin_Recover() { @@ -21,13 +23,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); }