X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSVTK%2FSVTK_Renderer.cxx;h=3d8aa0aa4d3c5ca4618d0cdbbcd9801c638c6e0b;hb=d0b0c10e5649e0338079df4a53cf95044792d989;hp=89c645acabdb7e58297f6230508859ca3191ec01;hpb=8dc06f253c1d6a0bb3cc999842fa5a7848c79f40;p=modules%2Fgui.git diff --git a/src/SVTK/SVTK_Renderer.cxx b/src/SVTK/SVTK_Renderer.cxx index 89c645aca..3d8aa0aa4 100644 --- a/src/SVTK/SVTK_Renderer.cxx +++ b/src/SVTK/SVTK_Renderer.cxx @@ -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 @@ -55,24 +55,24 @@ #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 */