X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSVTK%2FSVTK_Renderer.cxx;h=b763565036dee2438591f8b4603b66b894139a1c;hb=refs%2Fheads%2Fngr%2Fpython3_dev_pv5.4;hp=30cee870b3d8cd8736fa7e88226457817c3599b5;hpb=c4b058d18583af7f94042eb55d4b933dd222d2e6;p=modules%2Fgui.git diff --git a/src/SVTK/SVTK_Renderer.cxx b/src/SVTK/SVTK_Renderer.cxx index 30cee870b..b76356503 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-2016 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 @@ -395,9 +395,9 @@ inline bool CheckBndBox(const double theBounds[6]) { - if(theBounds[0] > -VTK_LARGE_FLOAT && theBounds[1] < VTK_LARGE_FLOAT && - theBounds[2] > -VTK_LARGE_FLOAT && theBounds[3] < VTK_LARGE_FLOAT && - theBounds[4] > -VTK_LARGE_FLOAT && theBounds[5] < VTK_LARGE_FLOAT) + if(theBounds[0] > -VTK_FLOAT_MAX && theBounds[1] < VTK_FLOAT_MAX && + theBounds[2] > -VTK_FLOAT_MAX && theBounds[3] < VTK_FLOAT_MAX && + theBounds[4] > -VTK_FLOAT_MAX && theBounds[5] < VTK_FLOAT_MAX) return true; return false; } @@ -413,8 +413,8 @@ SVTK_Renderer bool aCDisplayed = IsCubeAxesDisplayed(); double aNewBndBox[6]; - aNewBndBox[ 0 ] = aNewBndBox[ 2 ] = aNewBndBox[ 4 ] = VTK_LARGE_FLOAT; - aNewBndBox[ 1 ] = aNewBndBox[ 3 ] = aNewBndBox[ 5 ] = -VTK_LARGE_FLOAT; + aNewBndBox[ 0 ] = aNewBndBox[ 2 ] = aNewBndBox[ 4 ] = VTK_FLOAT_MAX; + aNewBndBox[ 1 ] = aNewBndBox[ 3 ] = aNewBndBox[ 5 ] = -VTK_FLOAT_MAX; int aVisibleNum = myTrihedron->GetVisibleActorCount(GetDevice()); if(aVisibleNum){ @@ -697,6 +697,35 @@ SVTK_Renderer ::ResetCameraClippingRange(GetDevice()); } +/*! + Fit all selected presentation in the scene +*/ +void SVTK_Renderer::onFitSelection() +{ + 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 ( !io.IsNull() && mySelector->IsSelected( io ) ) + aSelectedCollection->AddItem( aProp ); + } + + 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 */