]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Fix for the problem that selection of sub-elements of compsolids for concealment...
authormpv <mpv@opencascade.com>
Thu, 27 Aug 2015 09:11:13 +0000 (12:11 +0300)
committermpv <mpv@opencascade.com>
Thu, 27 Aug 2015 09:11:13 +0000 (12:11 +0300)
src/Model/Model_ResultCompSolid.cpp
src/Model/Model_ResultCompSolid.h

index 16fda2569cb37f5f07ebccb8775cd11621d28a25..633e8cd08d920035e40ca45483629af46de0ff02 100755 (executable)
@@ -23,7 +23,8 @@
 Model_ResultCompSolid::Model_ResultCompSolid()
 {
   myBuilder = new Model_BodyBuilder(this);
-  setIsConcealed(false);
+  myLastConcealed = false;
+  setIsConcealed(myLastConcealed);
   myIsDisabled = true; // by default it is not initialized and false to be after created
   updateSubs(shape()); // in case of open, etc.
 }
@@ -99,13 +100,20 @@ bool Model_ResultCompSolid::setDisabled(std::shared_ptr<ModelAPI_Result> theThis
 
 bool Model_ResultCompSolid::isConcealed()
 {
-  if (ModelAPI_ResultCompSolid::isConcealed())
-    return true;
-  std::vector<std::shared_ptr<ModelAPI_ResultBody> >::const_iterator aSubIter = mySubs.cbegin();
-  for(; aSubIter != mySubs.cend(); aSubIter++)
-    if ((*aSubIter)->isConcealed())
-      return true;
-  return false;
+  bool aResult = false;;
+  if (ModelAPI_ResultCompSolid::isConcealed()) {
+    aResult = true;
+  } else {
+    std::vector<std::shared_ptr<ModelAPI_ResultBody> >::const_iterator aSubIter = mySubs.cbegin();
+    for(; aSubIter != mySubs.cend(); aSubIter++)
+      if ((*aSubIter)->isConcealed())
+        aResult = true;
+  }
+  if (myLastConcealed != aResult) {
+    myLastConcealed = aResult;
+    setIsConcealed(aResult); // set for all subs the same result
+  }
+  return aResult;
 }
 
 void Model_ResultCompSolid::setIsConcealed(const bool theValue)
@@ -160,6 +168,7 @@ void Model_ResultCompSolid::updateSubs(const std::shared_ptr<GeomAPI_Shape>& the
         aECreator->sendUpdated(aSub, EVENT_UPD);
       }
       aSub->setDisabled(aSub, isDisabled());
+      aSub->setIsConcealed(myLastConcealed);
     }
     // erase left, unused results
     while(mySubs.size() > aSubIndex) {
index 3f228b388610fd8e2a85dfc3f6ba5f6c171380c1..21fb163b9769a7ef3ca15542319b63b7b2999764 100755 (executable)
@@ -21,6 +21,10 @@ class Model_ResultCompSolid : public ModelAPI_ResultCompSolid
 {
   /// Sub-bodies if this is compsolid: zero base index to subs
   std::vector<std::shared_ptr<ModelAPI_ResultBody> > mySubs;
+  /// Flag that stores the previous state of "concealed": if it is changed,
+  /// The event must be generated to redisplay this and all subs.
+  bool myLastConcealed;
+
 
 public: