Salome HOME
Copyright update 2022
[modules/gui.git] / src / SVTK / SVTK_Renderer.cxx
index 89c645acabdb7e58297f6230508859ca3191ec01..3d8aa0aa4d3c5ca4618d0cdbbcd9801c638c6e0b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #undef max
 
 
-vtkStandardNewMacro(SVTK_Renderer);
+vtkStandardNewMacro(SVTK_Renderer)
 
 /*!
   Constructor
 */
 SVTK_Renderer
 ::SVTK_Renderer():
-  myDevice(VTKViewer_OpenGLRenderer::New()),
-  myInteractor(NULL),
   myPriority(0.0),
   myEventCallbackCommand(vtkCallbackCommand::New()),
+  myDevice(VTKViewer_OpenGLRenderer::New()),
+  myInteractor(NULL),
+  myTransform(VTKViewer_Transform::New()),
   myPointPicker(vtkPointPicker::New()),
   myCellPicker(vtkCellPicker::New()),
   myPointAreaPicker(SVTK_AreaPicker::New()),
   myCellAreaPicker(SVTK_AreaPicker::New()),
   myPreHighlightProperty(vtkProperty::New()),
   myHighlightProperty(vtkProperty::New()),
-  myTransform(VTKViewer_Transform::New()),
   myCubeAxes(SVTK_CubeAxesActor2D::New()),
   myTrihedron(SVTK_Trihedron::New()),
   myTrihedronSize(105),
@@ -726,6 +726,43 @@ void SVTK_Renderer::onFitSelection()
   }
 }
 
+void SVTK_Renderer::OnFitIObjects(const SALOME_ListIO& objects)
+{
+  vtkActorCollection* aSelectedCollection = vtkActorCollection::New();
+
+  VTK::ActorCollectionCopy aCopy( GetDevice()->GetActors() );
+  vtkActorCollection* aCollection = aCopy.GetActors();
+  aCollection->InitTraversal();
+  while ( vtkActor* aProp = aCollection->GetNextActor() )
+  {
+    if ( SALOME_Actor* anActor = SALOME_Actor::SafeDownCast( aProp ) ) {
+      const Handle(SALOME_InteractiveObject)& io = anActor->getIO();
+      if ( anActor->GetVisibility() && !io.IsNull() ) {
+       SALOME_ListIteratorOfListIO iter( objects );
+       for ( ; iter.More(); iter.Next() ) {
+         if ( iter.Value().IsNull() )
+           continue;
+         if ( io->isSame( iter.Value() ) ) {
+           aSelectedCollection->AddItem( aProp );
+           break;
+         }
+       }
+      }
+    }
+  }
+
+  if( aSelectedCollection->GetNumberOfItems() == 0 )
+    return; // if collection is empty
+  
+  double bounds[6];
+  ::ComputeBounds( aSelectedCollection, bounds );
+
+  if ( aSelectedCollection->GetNumberOfItems() && ::isBoundValid( bounds ) ) {
+    GetDevice()->ResetCamera( bounds );
+    GetDevice()->ResetCameraClippingRange( bounds );
+  }
+}
+
 /*!
   Reset camera clipping range to adjust the range to the bounding box of the scene
 */