]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Result compsolid should change the display flag of sub-results itself.
authornds <nds@opencascade.com>
Fri, 21 Aug 2015 14:19:02 +0000 (17:19 +0300)
committernds <nds@opencascade.com>
Fri, 21 Aug 2015 15:30:51 +0000 (18:30 +0300)
WorkshopListener in displayObject() should ignore the compsolid result and wait when sub-solid results comes in selection.
onFeatureCreateMsg moving rows: 1.canBeDisplayed before setDisplayed, displayObject - this is a previous version. It is more correctly firstly change display state of the object and after try to display it in the viewer. It is possible that flag is switch on, but the object will be visualized during redisplay.

src/ModelAPI/ModelAPI_ResultCompSolid.cpp
src/ModelAPI/ModelAPI_ResultCompSolid.h
src/ModuleBase/ModuleBase_Tools.cpp
src/XGUI/XGUI_ContextMenuMgr.cpp
src/XGUI/XGUI_WorkshopListener.cpp

index dc82ef393b37e981d9ad021a82eadc9504f31ba4..68ba72f549ebbbc88b4f9ebee6a5b6046935ec05 100755 (executable)
@@ -9,3 +9,10 @@
 ModelAPI_ResultCompSolid::~ModelAPI_ResultCompSolid()
 {
 }
+
+void ModelAPI_ResultCompSolid::setDisplayed(const bool theDisplay)
+{
+  ModelAPI_ResultBody::setDisplayed(theDisplay);
+  for (int i = 0; i < numberOfSubs(); i++)
+    subResult(i)->setDisplayed(theDisplay);
+}
index 7f82615bca27d2f3007fae82f5785471766126ea..678594277e0cb408e3f2f4838bdf09647e4b6787 100755 (executable)
@@ -33,6 +33,10 @@ public:
   /// Returns true if feature or reuslt belong to this composite feature as subs
   virtual bool isSub(ObjectPtr theObject) const = 0;
 
+  /// Set displayed flag to the result and all sub results
+  /// \param theDisplay a boolean value
+  MODELAPI_EXPORT virtual void setDisplayed(const bool theDisplay);
+
 protected:
 };
 
index cf6f70d9b66a044db4055c6a806889884acdbc1b..e1b25b8844b55e4792ff433ebccc8df1520c1b5b 100755 (executable)
@@ -159,6 +159,8 @@ QString objectInfo(const ObjectPtr& theObj, const bool isUseAttributesInfo)
       aFeatureStr.append("[disabled]");
     if (aRes->isConcealed())
       aFeatureStr.append("[concealed]");
+    if (ModelAPI_Tools::hasSubResults(aRes))
+      aFeatureStr.append("[hasSubResults]");
 
     aFeature = ModelAPI_Feature::feature(aRes);
   }
index f3625a1f88a70aefc22b951dbe1fe757294c3c1b..28bafc37e37ce35024c643e423ee7432595103a8 100644 (file)
@@ -21,6 +21,7 @@
 #include <ModelAPI_ResultParameter.h>
 #include <ModelAPI_ResultConstruction.h>
 #include <ModelAPI_ResultBody.h>
+#include <ModelAPI_Tools.h>
 
 #include <ModuleBase_IModule.h>
 #include <ModuleBase_Tools.h>
@@ -179,12 +180,19 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu()
           action("SHADING_CMD")->setEnabled(true);
         }
         if (!hasFeature) {
-          if (aObject->isDisplayed()) {
+          bool aHasSubResults = ModelAPI_Tools::hasSubResults(
+                                            std::dynamic_pointer_cast<ModelAPI_Result>(aObject));
+          if (aHasSubResults) {
             action("HIDE_CMD")->setEnabled(true);
-          } else if (hasResult && (!hasParameter)) {
             action("SHOW_CMD")->setEnabled(true);
           }
-
+          else {
+            if (aObject->isDisplayed()) {
+              action("HIDE_CMD")->setEnabled(true);
+            } else if (hasResult && (!hasParameter)) {
+              action("SHOW_CMD")->setEnabled(true);
+            }
+          }
           if (!(hasParameter || hasFeature))
             action("SHOW_ONLY_CMD")->setEnabled(true);
         }
index 9827652996ba1c2410245b2baf6ec6ecf5cb2223..685961c46fc2d5595cb3a117122ac0014066b2ea 100755 (executable)
@@ -225,7 +225,7 @@ void XGUI_WorkshopListener::onFeatureRedisplayMsg(const std::shared_ptr<ModelAPI
   for (aIt = aObjects.begin(); aIt != aObjects.end(); ++aIt) {
     anInfo.append(ModuleBase_Tools::objectInfo((*aIt)));
   }
-  QString anInfoStr = anInfo.join("");
+  QString anInfoStr = anInfo.join(";\t");
   qDebug(QString("onFeatureRedisplayMsg: %1, %2").arg(aObjects.size()).arg(anInfoStr).toStdString().c_str());
 #endif
 
@@ -256,7 +256,7 @@ void XGUI_WorkshopListener::onFeatureRedisplayMsg(const std::shared_ptr<ModelAPI
       bool isVisibleObject = aDisplayer->isVisible(aObj);
       #ifdef DEBUG_FEATURE_REDISPLAY
         QString anObjInfo = ModuleBase_Tools::objectInfo((aObj));
-        qDebug(QString("visible=%1 : display= %2").arg(isVisibleObject).arg(anObjInfo).toStdString().c_str());
+        //qDebug(QString("visible=%1 : display= %2").arg(isVisibleObject).arg(anObjInfo).toStdString().c_str());
         /*FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObj);
         if (aFeature.get()) {
           std::string aKind = aFeature->getKind();
@@ -298,7 +298,7 @@ void XGUI_WorkshopListener::onFeatureCreatedMsg(const std::shared_ptr<ModelAPI_O
   for (aIt = aObjects.begin(); aIt != aObjects.end(); ++aIt) {
     anInfo.append(ModuleBase_Tools::objectInfo((*aIt)));
   }
-  QString anInfoStr = anInfo.join("");
+  QString anInfoStr = anInfo.join(";\t");
   qDebug(QString("onFeatureCreatedMsg: %1, %2").arg(aObjects.size()).arg(anInfoStr).toStdString().c_str());
 #endif
 
@@ -315,8 +315,9 @@ void XGUI_WorkshopListener::onFeatureCreatedMsg(const std::shared_ptr<ModelAPI_O
     if (!aHide) {
       // setDisplayed has to be called in order to synchronize internal state of the object 
       // with list of displayed objects
-      if (displayObject(anObject)) {
+      if (myWorkshop->module()->canDisplayObject(anObject)) {
         anObject->setDisplayed(true);
+        isDisplayed = displayObject(*aIt);
       } else 
         anObject->setDisplayed(false);
     }
@@ -429,8 +430,9 @@ void XGUI_WorkshopListener::addFeature(const std::shared_ptr<Config_FeatureMessa
 bool XGUI_WorkshopListener::displayObject(ObjectPtr theObj)
 {
   XGUI_Workshop* aWorkshop = workshop();
-  if (ModelAPI_Tools::hasSubResults(std::dynamic_pointer_cast<ModelAPI_Result>(theObj)) ||
-      !aWorkshop->module()->canDisplayObject(theObj))
+  // do not display the object if it has sub objects. They should be displayed separately.
+  if (!aWorkshop->module()->canDisplayObject(theObj) ||
+      ModelAPI_Tools::hasSubResults(std::dynamic_pointer_cast<ModelAPI_Result>(theObj)))
     return false;
 
   XGUI_Displayer* aDisplayer = aWorkshop->displayer();