Salome HOME
Merge branch 'Dev_1.1.0' of newgeom:newgeom into Dev_1.1.0
authorvsv <vitaly.smetannikov@opencascade.com>
Fri, 17 Apr 2015 15:45:48 +0000 (18:45 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Fri, 17 Apr 2015 15:45:48 +0000 (18:45 +0300)
src/NewGeom/NewGeom_Module.cpp

index 56e7b52025dc11d1a6b1f34564284b38d473523f..6e27289e38c5230b8e80f8ef95b9576339a65b2e 100644 (file)
@@ -35,6 +35,9 @@
 #include <Config_PropManager.h>
 #include <Config_ModuleReader.h>
 
+#include <AIS_ListOfInteractive.hxx>
+#include <AIS_ListIteratorOfListOfInteractive.hxx>
+
 #include <QDockWidget>
 #include <QAction>
 #include <QTimer>
@@ -180,6 +183,33 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy)
   // switch off in this module
   aResMgr->setValue("Study", "store_positions", false);
 
+  // Synchronize displayed objects
+  if (mySelector && mySelector->viewer()) {
+    Handle(AIS_InteractiveContext) aContext = mySelector->viewer()->getAISContext();
+    XGUI_Displayer* aDisp = myWorkshop->displayer();
+    QObjectPtrList aObjList = aDisp->displayedObjects();
+
+    AIS_ListOfInteractive aList;
+    aContext->DisplayedObjects(aList);
+    AIS_ListIteratorOfListOfInteractive aLIt;
+    Handle(AIS_InteractiveObject) anAISIO;
+    foreach (ObjectPtr aObj, aObjList) {
+      AISObjectPtr aPrs = aDisp->getAISObject(aObj);
+      Handle(AIS_InteractiveObject) aAIS = aPrs->impl<Handle(AIS_InteractiveObject)>();
+      bool aFound = false;
+      for (aLIt.Initialize(aList); aLIt.More(); aLIt.Next()) {
+        anAISIO = aLIt.Value();
+        if (anAISIO.Access() == aAIS.Access()) {
+          aFound = true;
+          break;
+        }
+      }
+      if (!aFound) {
+        aDisp->erase(aObj, false);
+      }
+    }
+  }
+
   return isDone;
 }