]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Close context before new opening in order to clear selection modes.
authorvsv <vitaly.smetannikov@opencascade.com>
Fri, 31 Oct 2014 13:23:44 +0000 (16:23 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Fri, 31 Oct 2014 13:23:44 +0000 (16:23 +0300)
src/XGUI/XGUI_Displayer.cpp
src/XGUI/XGUI_ModuleConnector.cpp

index 0bdf7633e70b7beec87742510e57237057f02272..afc04003cc954e6fe3c3acc092138325c5337873 100644 (file)
@@ -25,6 +25,8 @@
 #include <AIS_Shape.hxx>
 #include <AIS_Dimension.hxx>
 #include <TColStd_ListIteratorOfListOfInteger.hxx>
+#include <SelectMgr_ListOfFilter.hxx>
+#include <SelectMgr_ListIteratorOfListOfFilter.hxx>
 
 #include <set>
 
@@ -314,6 +316,20 @@ void XGUI_Displayer::openLocalContext()
     //aContext->OpenLocalContext(false/*use displayed objects*/, true/*allow shape decomposition*/);
     aContext->OpenLocalContext();
     aContext->NotUseDisplayedObjects();
+
+    // Deactivate trihedron which can be activated in local selector
+    //AIS_ListOfInteractive aPrsList;
+    //aContext->DisplayedObjects(aPrsList, true);
+
+    //Handle(AIS_Trihedron) aTrihedron;
+    //AIS_ListIteratorOfListOfInteractive aIt(aPrsList);
+    //for(; aIt.More(); aIt.Next()){
+    //  aTrihedron = Handle(AIS_Trihedron)::DownCast(aIt.Value());
+    //  if (!aTrihedron.IsNull()) {
+    //    aContext->Deactivate(aTrihedron);
+    //    break;
+    //  }
+    //}
   }
 }
 
@@ -404,7 +420,7 @@ void XGUI_Displayer::activateObjectsOutOfContext(const QIntList& theModes)
   ResultToAISMap::iterator aIt;
   Handle(AIS_InteractiveObject) anAISIO;
   for (aIt = myResult2AISObjectMap.begin(); aIt != myResult2AISObjectMap.end(); aIt++) {
-    anAISIO = (*aIt).second->impl<Handle(AIS_InteractiveObject)>();
+  anAISIO = (*aIt).second->impl<Handle(AIS_InteractiveObject)>();
     aContext->Load(anAISIO, -1, true);
     if (theModes.size() == 0)
       aContext->Activate(anAISIO);
@@ -486,6 +502,12 @@ void XGUI_Displayer::addSelectionFilter(const Handle(SelectMgr_Filter)& theFilte
   Handle(AIS_InteractiveContext) aContext = AISContext();
   if (aContext.IsNull())
     return;
+  const SelectMgr_ListOfFilter& aFilters = aContext->Filters();
+  SelectMgr_ListIteratorOfListOfFilter aIt(aFilters);
+  for (; aIt.More(); aIt.Next()) {
+    if (theFilter.Access() == aIt.Value().Access())
+      return;
+  }
   aContext->AddFilter(theFilter);
 }
 
index 6a3c81a9f35b5ccda61750026914f4970ff75231..45f2d0ed7e9690fce5c5fc64232b01567c0a8149 100644 (file)
@@ -59,6 +59,8 @@ ModuleBase_Operation* XGUI_ModuleConnector::currentOperation() const
 void XGUI_ModuleConnector::activateSubShapesSelection(const QIntList& theTypes)
 {
   XGUI_Displayer* aDisp = myWorkshop->displayer();
+  // Close context if it was opened in order to clear stsndard selection modes
+  aDisp->closeLocalContexts(false);
   aDisp->openLocalContext();
   // Convert shape types to selection types
   QIntList aModes;