-// Copyright (C) 2007-2014 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),
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;
}
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){
myTrihedron->VisibilityOn();
}
+/*!
+ Set trihedron visibility
+*/
+void
+SVTK_Renderer
+::SetTrihedronVisibility( const bool show ) {
+ if(show)
+ myTrihedron->VisibilityOn();
+ else
+ myTrihedron->VisibilityOff();
+}
+
/*!
Adjust size of the trihedron to the bounding box of the scene
*/
::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 );
+ }
+}
+
+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
*/