Salome HOME
Merge branch 'Dev_1.2.0' of newgeom:newgeom into Dev_1.2.0
[modules/shaper.git] / src / Model / Model_Document.cpp
index b1477e5c8f727c8d723ef6319533a0d2e7986a04..82ae16d6520b8e50cb5634d48785e26b7f9f8bc7 100644 (file)
@@ -569,8 +569,10 @@ void Model_Document::removeFeature(FeaturePtr theFeature)
   if (theFeature == currentFeature(false)) {
     int aCurrentIndex = index(theFeature);
     if (aCurrentIndex != -1) {
-      setCurrentFeature(std::dynamic_pointer_cast<ModelAPI_Feature>(
-        object(ModelAPI_Feature::group(), aCurrentIndex - 1)), false);
+      ObjectPtr aPrevObj;
+      if (aCurrentIndex != 0)
+        aPrevObj = object(ModelAPI_Feature::group(), aCurrentIndex - 1);
+      setCurrentFeature(std::dynamic_pointer_cast<ModelAPI_Feature>(aPrevObj), false);
     }
   }
   myObjs->removeFeature(theFeature);
@@ -654,6 +656,7 @@ void Model_Document::setCurrentFeature(std::shared_ptr<ModelAPI_Feature> theCurr
   const bool theVisible)
 {
   TDF_Label aRefLab = generalLabel().FindChild(TAG_CURRENT_FEATURE);
+  CompositeFeaturePtr aMain; // main feature that may nest the new current
   if (theCurrent.get()) {
     /*
     if (theVisible) { // make features below which are not in history also enabled: sketch subs
@@ -673,7 +676,8 @@ void Model_Document::setCurrentFeature(std::shared_ptr<ModelAPI_Feature> theCurr
       CompositeFeaturePtr aComposite = 
         std::dynamic_pointer_cast<ModelAPI_CompositeFeature>((*aRefToMe)->owner());
       if (aComposite.get() && aComposite->isSub(theCurrent)) {
-        theCurrent = aComposite;
+        aMain = aComposite;
+        break;
       }
     }
 
@@ -694,10 +698,6 @@ void Model_Document::setCurrentFeature(std::shared_ptr<ModelAPI_Feature> theCurr
   static Events_Loop* aLoop = Events_Loop::loop();
   static Events_ID aRedispEvent = aLoop->eventByName(EVENT_OBJECT_TO_REDISPLAY);
 
-  // if the current feature is composite features, all sub-features also must be enabled
-  CompositeFeaturePtr aCurComp = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(theCurrent);
-
-
   bool aPassed = false; // flag that the current object is already passed in cycle
   FeaturePtr anIter = myObjs->lastFeature();
   for(; anIter.get(); anIter = myObjs->nextFeature(anIter, true)) {
@@ -705,7 +705,7 @@ void Model_Document::setCurrentFeature(std::shared_ptr<ModelAPI_Feature> theCurr
     if (anIter == theCurrent) aPassed = true;
 
     bool aDisabledFlag = !aPassed;
-    if (aCurComp.get() && aCurComp->isSub(anIter))
+    if (aMain.get() && aMain->isSub(anIter))
       aDisabledFlag = false;
     if (anIter->setDisabled(aDisabledFlag)) {
       // state of feature is changed => so feature become updated