]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Provide selection of external edges and vertexes
authorvsv <vitaly.smetannikov@opencascade.com>
Thu, 16 Oct 2014 15:19:53 +0000 (19:19 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Thu, 16 Oct 2014 15:19:53 +0000 (19:19 +0400)
src/PartSet/PartSet_Module.cpp
src/XGUI/XGUI_Displayer.cpp
src/XGUI/XGUI_Displayer.h
src/XGUI/XGUI_ModuleConnector.cpp

index e2de98ee00d82505b80ff099305edd73cc1c0516..84bf567a3c4f153e35e7770a1f265cbb16da05d7 100644 (file)
@@ -155,11 +155,10 @@ void PartSet_Module::onOperationStarted(ModuleBase_Operation* theOperation)
     PartSet_OperationSketch* aSketchOp = dynamic_cast<PartSet_OperationSketch*>(aPreviewOp);
     if (aSketchOp) {
       if (aSketchOp->isEditOperation()) {
-        aDisplayer->openLocalContext();
-        //setSketchingMode();
+        setSketchingMode();
       } else {
         aDisplayer->openLocalContext();
-        aDisplayer->activateObjectsOutOfContext();
+        aDisplayer->activateObjectsOutOfContext(QIntList());
         myPlaneFilter = new StdSelect_FaceFilter(StdSelect_Plane);
         aDisplayer->addSelectionFilter(myPlaneFilter);
         QIntList aModes = sketchSelectionModes(aPreviewOp->feature());
@@ -376,6 +375,10 @@ void PartSet_Module::setSketchingMode()
   //aModes << TopAbs_VERTEX << TopAbs_EDGE;
   //aModes << AIS_DSM_Text << AIS_DSM_Line;
   aDisplayer->setSelectionModes(aModes);
+  aDisplayer->openLocalContext();
+  // Get default selection modes
+  aModes = sketchSelectionModes(ObjectPtr());
+  aDisplayer->activateObjectsOutOfContext(aModes);
 }
 
 void PartSet_Module::onFeatureConstructed(ObjectPtr theFeature, int theMode)
index 35d68866174e006d198df467a3ccaef874d6f93c..26469989924db36a6acae8f56539e062bf07f090 100644 (file)
@@ -396,7 +396,7 @@ void XGUI_Displayer::erase(boost::shared_ptr<GeomAPI_AISObject> theAIS, const bo
   }
 }
 
-void XGUI_Displayer::activateObjectsOutOfContext()
+void XGUI_Displayer::activateObjectsOutOfContext(const QIntList& theModes)
 {
   Handle(AIS_InteractiveContext) aContext = AISContext();
   // Open local context if there is no one
@@ -409,6 +409,13 @@ void XGUI_Displayer::activateObjectsOutOfContext()
   for (aIt = myResult2AISObjectMap.begin(); aIt != myResult2AISObjectMap.end(); aIt++) {
     anAISIO = (*aIt).second->impl<Handle(AIS_InteractiveObject)>();
     aContext->Load(anAISIO, -1, true);
+    if (theModes.size() == 0)
+      aContext->Activate(anAISIO);
+    else {
+      foreach(int aMode, theModes) {
+        aContext->Activate(anAISIO, aMode);
+      }
+    }
   }
 }
 
index 4902fbceb494e2aaf5b898df48ea22f4aa14af13..e5a7405d0f2395dacb15bddd8b7303f1c6feb329 100644 (file)
@@ -92,6 +92,7 @@ class XGUI_EXPORT XGUI_Displayer
   /// \param isUpdateViewer the parameter whether the viewer should be update immediatelly
   void eraseDeletedResults(const bool isUpdateViewer = true);
 
+  /// Opens local context. Does nothing if it is already opened.
   void openLocalContext();
 
   /// Deactivates selection of sub-shapes
@@ -126,16 +127,17 @@ class XGUI_EXPORT XGUI_Displayer
   void deactivate(ObjectPtr theFeature);
 
   /// Activates the given object (it can be selected)
+  /// \param theModes - modes on which it has to be activated (can be empty)
   void activate(ObjectPtr theFeature, const QIntList& theModes);
 
   /// Returns true if the given object can be selected
   bool isActive(ObjectPtr theObject) const;
 
   /// Activates in local context displayed outside of the context.
-  /// \param theModes - selection modes to activate
-  /// \param theFilter - filter for selection
-  void activateObjectsOutOfContext();
+  /// \param theModes - modes on which it has to be activated (can be empty)
+  void activateObjectsOutOfContext(const QIntList& theModes);
 
+  /// Activates in local context displayed outside of the context.
   void deactivateObjectsOutOfContext();
 
   /// Sets display mode for the given object if this object is displayed
index a63b563566ac45fca8c9cffb2a7d9640ed622760..ce9ca36806ef450d1215e75cc810f00564de51e6 100644 (file)
@@ -54,7 +54,8 @@ void XGUI_ModuleConnector::activateSubShapesSelection(const QIntList& theTypes)
 {
   XGUI_Displayer* aDisp = myWorkshop->displayer();
   aDisp->openLocalContext();
-  aDisp->activateObjectsOutOfContext();
+  // Use empty list because we will use standard modes
+  aDisp->activateObjectsOutOfContext(QIntList());
   aDisp->setSelectionModes(theTypes);
 }