]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
1. This is a fix for the disabled object visualized in the viewer. 2. Comment multi...
authornds <natalia.donis@opencascade.com>
Fri, 22 May 2015 18:13:12 +0000 (21:13 +0300)
committernds <natalia.donis@opencascade.com>
Fri, 22 May 2015 18:13:12 +0000 (21:13 +0300)
Scenario: create a sketch with a circle. Create an extrusion. Set extrusion height is 0. Set height more than 0. Apply. Hide extrusion result. A cylinder is visualized in the viewer.

src/FeaturesPlugin/FeaturesPlugin_Boolean.cpp
src/FeaturesPlugin/boolean_widget.xml
src/ModuleBase/ModuleBase_Tools.cpp
src/XGUI/XGUI_Displayer.cpp
src/XGUI/XGUI_Displayer.h
src/XGUI/XGUI_Workshop.cpp

index f52353397cd33038c352ef1a98cbcfb3280e55ff..913d8ade0589eb7a631a6fb79a9343e22d943957 100644 (file)
@@ -15,7 +15,7 @@
 #include <GeomAlgoAPI_Boolean.h>
 using namespace std;
 
-//#define DEBUG_ONE_OBJECT
+#define DEBUG_ONE_OBJECT
 
 #define FACE 4
 #define _MODIFY_TAG 1
index e1443e531c8ff456970a73001450b6e18f90a8bd..040124714edbacb11d3476633954099f10dbac0d 100644 (file)
@@ -1,14 +1,7 @@
 <!-- Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
 
 <source>
-  <!--<shape_selector id="main_object" 
-    label="Main object" 
-    icon=":icons/cut_shape.png" 
-    tooltip="Select an object solid"
-    shape_types="solid shell"
-    concealment="true"
-  />-->
-  <multi_selector id="main_objects" 
+  <!--<multi_selector id="main_objects" 
     label="Main object" 
     icon=":icons/cut_shape.png" 
     tooltip="Select an object solid"
     type_choice="Solids"
     concealment="true" >
        <validator id="PartSet_DifferentObjects"/>
-  </multi_selector>
-  <!--<shape_selector id="tool_object" 
+  </multi_selector>-->
+  <shape_selector id="main_object"
+    label="Main object"
+    icon=":icons/cut_shape.png"
+    tooltip="Select an object solid"
+    shape_types="solid shell"
+    concealment="true"
+  />
+  <shape_selector id="tool_object" 
     label="Tool object" 
     icon=":icons/cut_tool.png" 
     tooltip="Select a tool solid"
     shape_types="solid"
     concealment="true" >
        <validator id="PartSet_DifferentObjects"/>
-  </shape_selector>-->
+  </shape_selector>
   <choice id="bool_type" 
     label="Type" 
     tooltip="Type of boolean operation"
index 5fa98fc5db0d58d8552e91a059219f65cfe97a00..745497c8abd58c1650826c19e4faab3a8b3efa8c 100644 (file)
@@ -22,6 +22,8 @@
 #include <QBitmap>
 #include <QDoubleSpinBox>
 
+#include <sstream>
+
 namespace ModuleBase_Tools {
 
 //******************************************************************
@@ -125,18 +127,33 @@ void setSpinValue(QDoubleSpinBox* theSpin, double theValue)
 
 QString objectInfo(const ObjectPtr& theObj, const bool isUseAttributesInfo)
 {
+  QString aFeatureStr = "feature";
+  if (!theObj.get())
+    return aFeatureStr;
+
+  std::ostringstream aPtrStr;
+  aPtrStr << "[" << theObj.get() << "]";
+
   ResultPtr aRes = std::dynamic_pointer_cast<ModelAPI_Result>(theObj);
   FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theObj);
-  QString aFeatureStr = "feature";
   if(aRes.get()) {
-    aFeatureStr.append("(Result)");
+    aFeatureStr.append(QString("(result%1)").arg(aPtrStr.str().c_str()).toStdString() .c_str());
+    if (aRes->isDisabled())
+      aFeatureStr.append("[disabled]");
+    if (aRes->isConcealed())
+      aFeatureStr.append("[concealed]");
+
     aFeature = ModelAPI_Feature::feature(aRes);
   }
+  else
+    aFeatureStr.append(aPtrStr.str().c_str());
+
   if (aFeature.get()) {
     aFeatureStr.append(QString(": %1").arg(aFeature->getKind().c_str()).toStdString().c_str());
-    if (aFeature->data().get() && aFeature->data()->isValid())
+    if (aFeature->data().get() && aFeature->data()->isValid()) {
       aFeatureStr.append(QString(", name=%1").arg(aFeature->data()->name().c_str()).toStdString()
                                                                                        .c_str());
+    }
     if (isUseAttributesInfo) {
       std::list<AttributePtr> anAttrs = aFeature->data()->attributes("");
       std::list<AttributePtr>::const_iterator anIt = anAttrs.begin(), aLast = anAttrs.end();
index 83fa8010dd1dce83aedec88d74947ef59887dbd6..fd7e7707991bcdb668d8d9bf98bba9c5f5d7139a 100644 (file)
@@ -20,6 +20,7 @@
 #include <ModelAPI_AttributeIntArray.h>
 
 #include <ModuleBase_ResultPrs.h>
+#include <ModuleBase_Tools.h>
 
 #include <GeomAPI_Shape.h>
 #include <GeomAPI_IPresentable.h>
@@ -93,14 +94,6 @@ void XGUI_Displayer::display(ObjectPtr theObject, bool isUpdateViewer)
   if (isVisible(theObject)) {
     redisplay(theObject, isUpdateViewer);
   } else {
-#ifdef DEBUG_DISPLAY
-    FeaturePtr aFeature = ModelAPI_Feature::feature(theObject);
-    if (aFeature.get() != NULL) {
-      qDebug(QString("display feature: %1, displayed: %2").
-        arg(aFeature->data()->name().c_str()).
-        arg(displayedObjects().size()).toStdString().c_str());
-    }
-#endif
     AISObjectPtr anAIS;
 
     GeomPresentablePtr aPrs = std::dynamic_pointer_cast<GeomAPI_IPresentable>(theObject);
@@ -152,7 +145,8 @@ void XGUI_Displayer::display(ObjectPtr theObject, AISObjectPtr theAIS,
 
   Handle(AIS_InteractiveObject) anAISIO = theAIS->impl<Handle(AIS_InteractiveObject)>();
   if (!anAISIO.IsNull()) {
-    myResult2AISObjectMap[theObject] = theAIS;
+    appendResultObject(theObject, theAIS);
+
     bool aCanBeShaded = ::canBeShaded(anAISIO);
     // In order to avoid extra closing/opening context
     SelectMgr_IndexedMapOfOwner aSelectedOwners;
@@ -217,7 +211,7 @@ void XGUI_Displayer::redisplay(ObjectPtr theObject, bool isUpdateViewer)
       return;
     }
     if (aAIS_Obj != aAISObj) {
-      myResult2AISObjectMap[theObject] = aAIS_Obj;
+      appendResultObject(theObject, aAIS_Obj);
     }
     aAISIO = aAIS_Obj->impl<Handle(AIS_InteractiveObject)>();
   }
@@ -902,3 +896,31 @@ QColor XGUI_Displayer::setObjectColor(ObjectPtr theObject, const QColor& theColo
     updateViewer();
   return QColor(aR, aG, aB);
 }
+
+void XGUI_Displayer::appendResultObject(ObjectPtr theObject, AISObjectPtr theAIS)
+{
+  myResult2AISObjectMap[theObject] = theAIS;
+
+#ifdef DEBUG_DISPLAY
+  std::ostringstream aPtrStr;
+  aPtrStr << theObject.get();
+  qDebug(QString("display object: %1").arg(aPtrStr.str().c_str()).toStdString().c_str());
+  qDebug(getResult2AISObjectMapInfo().c_str());
+#endif
+}
+
+std::string XGUI_Displayer::getResult2AISObjectMapInfo() const
+{
+  QStringList aContent;
+  foreach (ObjectPtr aObj, myResult2AISObjectMap.keys()) {
+    AISObjectPtr aAISObj = myResult2AISObjectMap[aObj];
+    std::ostringstream aPtrStr;
+    aPtrStr << "aObj = " << aObj.get() << ":";
+    aPtrStr << "anAIS = " << aAISObj.get() << ":";
+    aPtrStr << "[" << ModuleBase_Tools::objectInfo(aObj).toStdString().c_str() << "]";
+    
+    aContent.append(aPtrStr.str().c_str());
+  }
+  return QString("myResult2AISObjectMap: size = %1\n%2").arg(myResult2AISObjectMap.size()).
+                                            arg(aContent.join("\n")).toStdString().c_str();
+}
index 493a077a204aa1d1c72e1e39530e71322c653faa..cf35c008302d2284daa9baae23e467d37da95e93 100644 (file)
@@ -251,6 +251,15 @@ private:
    */
   bool customizeObject(ObjectPtr theObject);
 
+  /// Append the objects in the internal map. Checks whether the map already contains the object
+  /// \param theObject an object to display
+  /// \param theAIS AIOS object to display
+  void appendResultObject(ObjectPtr theObject, AISObjectPtr theAIS);
+
+  /// Returns an information about alredy displayed objects
+  /// \return a string representation
+  std::string getResult2AISObjectMapInfo() const;
+
  protected:
    /// Reference to workshop
   XGUI_Workshop* myWorkshop;
index 8774bbf917c3de5619be7cabed1909d1e41eaab7..df417b4d922960e74515de604e8130e49c1ee4ec 100644 (file)
@@ -514,7 +514,8 @@ void XGUI_Workshop::onFeatureCreatedMsg(const std::shared_ptr<ModelAPI_ObjectUpd
     ObjectPtr anObject = *aIt;
     // the validity of the data should be checked here in order to avoid display of the objects,
     // which were created, then deleted, but flush for the creation event happens after that
-    if (!anObject->data() || !anObject->data()->isValid())
+    // we should not display disabled objects
+    if (!anObject->data() || !anObject->data()->isValid() || anObject->isDisabled())
       continue;
     //ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(*aIt);
     //if (aPart) {