X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Sketch.cpp;h=21247d13a37b631f049f8327f5cf77e5452d0456;hb=34bfe89b8ad83a4a3d5b07bcf08a4df075c3f83c;hp=7b993c2161e0ad1d3daa39ea59f25188c5490430;hpb=ece8ec37099dbbef19853878e70394761ec3b977;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Sketch.cpp b/src/SketchPlugin/SketchPlugin_Sketch.cpp index 7b993c216..21247d13a 100644 --- a/src/SketchPlugin/SketchPlugin_Sketch.cpp +++ b/src/SketchPlugin/SketchPlugin_Sketch.cpp @@ -9,16 +9,14 @@ #include #include -#include #include #include -#include - #include #include #include +#include #include #include #include @@ -56,6 +54,9 @@ void SketchPlugin_Sketch::initAttributes() data()->addAttribute(SketchPlugin_SketchEntity::EXTERNAL_ID(), ModelAPI_AttributeSelection::typeId()); ModelAPI_Session::get()->validators()->registerNotObligatory( getKind(), SketchPlugin_SketchEntity::EXTERNAL_ID()); + data()->addAttribute(SketchPlugin_Sketch::SOLVER_ERROR(), ModelAPI_AttributeString::typeId()); + ModelAPI_Session::get()->validators()->registerNotObligatory( + getKind(), SketchPlugin_Sketch::SOLVER_ERROR()); } void SketchPlugin_Sketch::execute() @@ -73,7 +74,7 @@ void SketchPlugin_Sketch::execute() data()->attribute(SketchPlugin_Sketch::NORM_ID())); std::list aFeatures = aRefList->list(); - if (aFeatures.empty()) + if (aFeatures.empty()) // actually, this must be avoided by the validators return; std::list::const_iterator anIt = aFeatures.begin(), aLast = aFeatures.end(); @@ -109,8 +110,12 @@ void SketchPlugin_Sketch::execute() } } - if (aFeaturesPreview.empty()) + if (aFeaturesPreview.empty()) { + // no good features for generation of preview => erase result if exists + if (firstResult().get() && !firstResult()->isDisabled()) + removeResults(0, false); return; + } // Collect all edges as one big wire std::shared_ptr aBigWire(new GeomAPI_PlanarEdges); @@ -143,14 +148,6 @@ void SketchPlugin_Sketch::removeFeature(std::shared_ptr theFea // to keep the persistent sub-elements indexing, do not remove elements from list, // but substitute by nulls reflist(SketchPlugin_Sketch::FEATURES_ID())->substitute(theFeature, ObjectPtr()); - - std::map >::iterator aSubIter = mySubs.begin(); - for(; aSubIter != mySubs.end(); aSubIter++) { - if (aSubIter->second == theFeature) { - mySubs.erase(aSubIter); - break; - } - } } int SketchPlugin_Sketch::numberOfSubs(bool forTree) const @@ -166,12 +163,8 @@ std::shared_ptr SketchPlugin_Sketch::subFeature( if (forTree) return FeaturePtr(); - if (mySubs.find(theIndex) != mySubs.end()) - return mySubs[theIndex]; - ObjectPtr anObj = data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->object(theIndex, false); FeaturePtr aRes = std::dynamic_pointer_cast(anObj); - mySubs[theIndex] = aRes; return aRes; } @@ -326,3 +319,9 @@ std::shared_ptr SketchPlugin_Sketch::plane(SketchPlugin_Sketch* the return std::shared_ptr(new GeomAPI_Ax3(anOrigin->pnt(), aDirX->dir(), aNorm->dir())); } + +void SketchPlugin_Sketch::exchangeIDs( + std::shared_ptr theFeature1, std::shared_ptr theFeature2) +{ + reflist(SketchPlugin_Sketch::FEATURES_ID())->exchange(theFeature1, theFeature2); +}