-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023 CEA, EDF, 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),
}
}
+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
*/