Salome HOME
Make same planes cannot be used twice in partition tool
[modules/shaper.git] / src / XGUI / XGUI_WorkshopListener.cpp
index c79678fb22848785efdf11a3eab448def809f050..03aaf4fa1f10e729201c7bcaafa8a27d82a62145 100755 (executable)
@@ -29,6 +29,7 @@
 #include <ModelAPI_Feature.h>
 #include <ModelAPI_Data.h>
 #include <ModelAPI_ResultBody.h>
+#include <ModelAPI_ResultGroup.h>
 #include <ModelAPI_ResultCompSolid.h>
 #include <ModelAPI_Tools.h>
 
@@ -293,6 +294,11 @@ void XGUI_WorkshopListener::onFeatureRedisplayMsg(const std::shared_ptr<ModelAPI
     if (!aHide) { // check that this is not hidden result
       ResultPtr aRes = std::dynamic_pointer_cast<ModelAPI_Result>(aObj);
       aHide = aRes && aRes->isConcealed();
+
+      // Hide the presentation with an empty shape. But isDisplayed state of the object should not
+      // be changed to the object becomes visible when the shape becomes not empty
+      if (!aHide && aRes.get())
+        aHide = !aRes->shape().get() || aRes->shape()->isNull();
     }
 
 #ifdef DEBUG_RESULT_COMPSOLID
@@ -416,6 +422,10 @@ void XGUI_WorkshopListener::onFeatureCreatedMsg(const std::shared_ptr<ModelAPI_O
       ResultPtr aRes = std::dynamic_pointer_cast<ModelAPI_Result>(anObject);
       bool isConcealed = aRes && aRes->isConcealed();
       aHide = aRes && aRes->isConcealed();
+      // Hide the presentation with an empty shape. But isDisplayed state of the object should not
+      // be changed to the object becomes visible when the shape becomes not empty
+      if (!aHide && aRes.get())
+        aHide = !aRes->shape().get() || aRes->shape()->isNull();
     }
     if (!aHide) {
       // setDisplayed has to be called in order to synchronize internal state of the object 
@@ -566,9 +576,16 @@ bool XGUI_WorkshopListener::displayObject(ObjectPtr theObj, bool& theFirstVisual
     aDisplayed = aDisplayer->display(theObj, false);
     if (aNb == 0)
       theFirstVisualizedBody = true;
-  } else 
+  } else {
     aDisplayed = aDisplayer->display(theObj, false);
-
+    if (aDisplayed) {
+      ResultPtr aGroup = std::dynamic_pointer_cast<ModelAPI_ResultGroup>(theObj);
+      if (aGroup.get() != NULL) {
+        std::shared_ptr<GeomAPI_Shape> aShapePtr = ModelAPI_Tools::shape(aGroup);
+          theFirstVisualizedBody = aShapePtr.get() != NULL;
+      }
+    }
+  }
   return aDisplayed;
 }