]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Display shapes in shaded mode
authorvsv <vitaly.smetannikov@opencascade.com>
Tue, 23 Sep 2014 15:20:38 +0000 (19:20 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Tue, 23 Sep 2014 15:20:38 +0000 (19:20 +0400)
src/PartSet/PartSet_Module.cpp
src/XGUI/XGUI_Displayer.cpp
src/XGUI/XGUI_Displayer.h

index 97f253c6766468ff7f7dae10564be001c944d3e4..fe04a7f98c2e30535bf96eaa1a05f4c3a6e8f442 100644 (file)
@@ -171,6 +171,9 @@ void PartSet_Module::onOperationStarted()
     XGUI_PropertyPanel* aPropPanel = myWorkshop->propertyPanel();
     connect(aPropPanel, SIGNAL(storedPoint2D(ObjectPtr, const std::string&)), this,
             SLOT(onStorePoint2D(ObjectPtr, const std::string&)), Qt::UniqueConnection);
+    XGUI_Displayer* aDisplayer = myWorkshop->displayer();
+    aDisplayer->openLocalContext();
+    aDisplayer->deactivateObjectsOutOfContext();
   }
 }
 
@@ -368,6 +371,7 @@ void PartSet_Module::onFeatureConstructed(ObjectPtr theFeature, int theMode)
       if (!isDisplay)
         aDisplayer->erase((*aSFIt), false);
     }
+    aDisplayer->deactivateObjectsOutOfContext();
   }
   if (isDisplay)
     ModelAPI_EventCreator::get()->sendUpdated(
@@ -524,6 +528,8 @@ void PartSet_Module::activateFeature(ObjectPtr theFeature, const bool isUpdateVi
     if (aSketchOp) {
       Handle(StdSelect_FaceFilter) aFilter = new StdSelect_FaceFilter(StdSelect_Plane);
       aDisplayer->activateObjectsOutOfContext(aModes, aFilter);
+    } else {
+      aDisplayer->deactivateObjectsOutOfContext();
     }
   }
 }
index 83b2f0eb704ebb9b8c695ece351a013867dc6fcf..68e8b68bdf16e7720c362e0da0c88edb7d904462 100644 (file)
@@ -48,6 +48,7 @@ void XGUI_Displayer::display(ObjectPtr theObject, bool isUpdateViewer)
     boost::shared_ptr<GeomAPI_AISObject> anAIS;
 
     GeomPresentablePtr aPrs = boost::dynamic_pointer_cast<GeomAPI_IPresentable>(theObject);
+    bool isShading = false;
     if (aPrs) {
       anAIS = aPrs->getAISObject(boost::shared_ptr<GeomAPI_AISObject>());
     } else {
@@ -57,16 +58,17 @@ void XGUI_Displayer::display(ObjectPtr theObject, bool isUpdateViewer)
         if (aShapePtr) {
           anAIS = boost::shared_ptr<GeomAPI_AISObject>(new GeomAPI_AISObject());
           anAIS->createShape(aShapePtr);
+          isShading = true;
         }
       }
     }
     if (anAIS)
-      display(theObject, anAIS, isUpdateViewer);
+      display(theObject, anAIS, isShading, isUpdateViewer);
   }
 }
 
-void XGUI_Displayer::display(ObjectPtr theObject, boost::shared_ptr<GeomAPI_AISObject> theAIS,
-                             bool isUpdateViewer)
+void XGUI_Displayer::display(ObjectPtr theObject, boost::shared_ptr<GeomAPI_AISObject> theAIS, 
+                             bool isShading, bool isUpdateViewer)
 {
   Handle(AIS_InteractiveContext) aContext = AISContext();
   if (aContext.IsNull())
@@ -75,7 +77,8 @@ void XGUI_Displayer::display(ObjectPtr theObject, boost::shared_ptr<GeomAPI_AISO
   Handle(AIS_InteractiveObject) anAISIO = theAIS->impl<Handle(AIS_InteractiveObject)>();
   if (!anAISIO.IsNull()) {
     myResult2AISObjectMap[theObject] = theAIS;
-    aContext->Display(anAISIO, isUpdateViewer);
+    aContext->Display(anAISIO, false);
+    aContext->SetDisplayMode(anAISIO, isShading? Shading : Wireframe, isUpdateViewer);
   }
 }
 
@@ -97,36 +100,6 @@ void XGUI_Displayer::erase(ObjectPtr theObject, const bool isUpdateViewer)
   myResult2AISObjectMap.erase(theObject);
 }
 
-/*bool XGUI_Displayer::redisplay(ObjectPtr theObject,
- boost::shared_ptr<GeomAPI_AISObject> theAIS,
- const bool isUpdateViewer)
- {
- bool isCreated = false;
- Handle(AIS_InteractiveObject) anAIS = 
- theAIS ? theAIS->impl<Handle(AIS_InteractiveObject)>() : Handle(AIS_InteractiveObject)();
- Handle(AIS_InteractiveContext) aContext = AISContext();
- // Open local context if there is no one
- if (!aContext->HasOpenedContext()) {
- aContext->ClearCurrents(false);
- aContext->OpenLocalContext(false /use displayed objects/, true /allow shape decomposition/);
- // set mouse sensitivity
- //aContext->SetSensitivityMode(StdSelect_SM_WINDOW);
- //aContext->SetPixelTolerance(MOUSE_SENSITIVITY_IN_PIXEL);
- }
- // display or redisplay presentation
- boost::shared_ptr<GeomAPI_AISObject> anObj = myResult2AISObjectMap[theObject];
- if (isVisible(theObject) && anObj && !anObj->empty()) {
- aContext->Redisplay(anAIS, isUpdateViewer);
- //aContext->RecomputeSelectionOnly(anAIS);
- }
- else {
- myResult2AISObjectMap[theObject] = theAIS;
- aContext->Display(anAIS, isUpdateViewer);
- isCreated = true;
- }
- return isCreated;
- }*/
-
 void XGUI_Displayer::redisplay(ObjectPtr theObject, bool isUpdateViewer)
 {
   if (!isVisible(theObject))
@@ -343,6 +316,20 @@ void XGUI_Displayer::eraseDeletedResults(const bool isUpdateViewer)
     updateViewer();
 }
 
+void XGUI_Displayer::openLocalContext()
+{
+  Handle(AIS_InteractiveContext) aContext = AISContext();
+  if (aContext.IsNull())
+    return;
+  // Open local context if there is no one
+  if (!aContext->HasOpenedContext()) {
+    aContext->ClearCurrents(false);
+    //aContext->OpenLocalContext(false/*use displayed objects*/, true/*allow shape decomposition*/);
+    aContext->OpenLocalContext();
+    aContext->NotUseDisplayedObjects();
+  }
+}
+
 void XGUI_Displayer::closeLocalContexts(const bool isUpdateViewer)
 {
   AISContext()->ClearSelected(false);
index cf3a7679898e6a564ec868d3313e4a151fb9394a..f3236af3069d26c135025fee1c8495c153401427 100644 (file)
@@ -105,6 +105,8 @@ class XGUI_EXPORT XGUI_Displayer
   /// \param isUpdateViewer the parameter whether the viewer should be update immediatelly
   void eraseDeletedResults(const bool isUpdateViewer = true);
 
+  void openLocalContext();
+
   /// Deactivates selection of sub-shapes
   /// \param isUpdateViewer the parameter whether the viewer should be update immediatelly
   void closeLocalContexts(const bool isUpdateViewer = true);
@@ -155,7 +157,7 @@ class XGUI_EXPORT XGUI_Displayer
   /// \param theAIS AIS presentation
   /// \param isUpdateViewer the parameter whether the viewer should be update immediatelly
   /// Returns true if the Feature succesfully displayed
-  void display(ObjectPtr theObject, boost::shared_ptr<GeomAPI_AISObject> theAIS,
+  void display(ObjectPtr theObject, boost::shared_ptr<GeomAPI_AISObject> theAIS, bool isShading,
                bool isUpdateViewer = true);
 
   /// Display the shape and activate selection of sub-shapes