]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
CCAR: add a map (entry2aisobjects) to SOCC_ViewModel to get fast access to AIS object...
authorcaremoli <caremoli>
Thu, 9 Dec 2010 12:01:53 +0000 (12:01 +0000)
committercaremoli <caremoli>
Thu, 9 Dec 2010 12:01:53 +0000 (12:01 +0000)
The key is the study id, the value is a vector of AIS
The map is updated in Display and used in CreatePrs

src/SOCC/SOCC_ViewModel.cxx
src/SOCC/SOCC_ViewModel.h

index b9d6bd23b208dd5ee6cd748cffb27fd248be7a94..968a03536640a6cab5fb929d9690687011bc8f63 100755 (executable)
@@ -389,6 +389,26 @@ void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
 
       ic->Display( anAIS, false );
 
+      //Register anAIS (if it has an entry) in entry2aisobjects map
+      Handle(SALOME_InteractiveObject) anObj = Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
+      if ( !anObj.IsNull() && anObj->hasEntry())
+        {
+          std::vector<Handle(AIS_InteractiveObject)>& List = entry2aisobjects[anObj->getEntry()];
+          int found=0;
+          for ( unsigned int ind = 0; ind < List.size(); ind++ )
+          {
+            if(List[ind] == anAIS)
+              {
+                found=1;
+                break;
+              }
+          }
+          if(!found)
+            {
+              List.push_back(anAIS);
+            }
+        }
+
       // Set visibility flag
       // Temporarily commented to avoid awful dependecy on SALOMEDS
       // TODO: better mechanism of storing display/erse status in a study
@@ -483,7 +503,7 @@ void SOCC_Viewer::EraseAll( const bool forced )
   ic->DisplayedObjects( aList );
   AIS_ListIteratorOfListOfInteractive anIter( aList );
   for ( ; anIter.More(); anIter.Next() ) {
-    if ( isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron ) ||
+    if ( (isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron )) ||
          anIter.Value()->DynamicType() == STANDARD_TYPE( OCCViewer_Trihedron ))
       continue;
 
@@ -518,26 +538,22 @@ SALOME_Prs* SOCC_Viewer::CreatePrs( const char* entry )
   SOCC_Prs* prs = new SOCC_Prs();
   if ( entry )
   {
-    // get context
-    Handle(AIS_InteractiveContext) ic = getAISContext();
-
-    // get displayed objects
-    AIS_ListOfInteractive List;
-    ic->DisplayedObjects( List );
-    // get objects in the collector
-    AIS_ListOfInteractive ListCollector;
-    ic->ObjectsInCollector( ListCollector );
-    List.Append( ListCollector );
-
-    AIS_ListIteratorOfListOfInteractive ite( List );
-    for ( ; ite.More(); ite.Next() )
-    {
-      Handle(SALOME_InteractiveObject) anObj =
-        Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
-
-      if ( !anObj.IsNull() && anObj->hasEntry() && strcmp( anObj->getEntry(), entry ) == 0 )
-        prs->AddObject( ite.Value() );
-    }
+    if(entry2aisobjects.count(entry)>0)
+      {
+        //ais object exists
+        std::vector<Handle(AIS_InteractiveObject)> List = entry2aisobjects[entry];
+        // get context
+        Handle(AIS_InteractiveContext) ic = getAISContext();
+        //add all ais
+        for ( unsigned int ind = 0; ind < List.size(); ind++ )
+          {
+            Handle(AIS_InteractiveObject) anAIS=List[ind];
+            if(ic->IsDisplayed(anAIS)||ic->IsInCollector(anAIS))
+              {
+                prs->AddObject( anAIS );
+              }
+          }
+      }
   }
   return prs;
 }
index 92c919032973bbf5d029581b8298b04d5a2bd78c..8cd42e85d33e995228629fe16c429c2d6bd54579 100755 (executable)
@@ -69,6 +69,8 @@ public:
   // a utility function, used by SALOME_View_s methods
   bool                        getTrihedronSize( double& theNewSize, double& theSize );
 
+  //a map to store AIS objects associated to a SALOME entry
+  std::map< std::string , std::vector<Handle(AIS_InteractiveObject)> > entry2aisobjects;
 };
 
 #ifdef WIN32