@@ -237,10 +237,12 @@ vtkFrustumWidget::vtkFrustumWidget ( )
237237 : vtk3DWidget ( ), _parallelPlanes ( )
238238{
239239 _frustum = vtkSmartPointer<vtkFrustumSource>::Take (vtkFrustumSource::New ( ));
240+ _polygonFilter = vtkSmartPointer<vtkPolygonFilter>::Take (vtkPolygonFilter::New ( ));
241+ _polygonFilter->SetInputData (_frustum->GetOutput ( ));
240242 _planes = vtkSmartPointer<vtkPlanes>::Take (vtkPlanes::New ( ));
241243 _frustumMapper = vtkSmartPointer<vtkPolyDataMapper>::Take (vtkPolyDataMapper::New ( ));
242244 _frustumActor = vtkSmartPointer<vtkActor>::Take (vtkActor::New ( ));
243- _frustumMapper->SetInputConnection (_frustum-> GetOutputPort ( ));
245+ _frustumMapper->SetInputData (_polygonFilter-> GetOutput ( ));
244246 _frustumActor->SetMapper (_frustumMapper);
245247 _contourFilter = vtkSmartPointer<vtkTubeFilter>::Take (vtkTubeFilter::New ( ));
246248 _contourMapper = vtkSmartPointer<vtkPolyDataMapper>::Take (vtkPolyDataMapper::New ( ));
@@ -312,6 +314,12 @@ void vtkFrustumWidget::SetEnabled (int enabled)
312314 {
313315 if (true == enabled)
314316 {
317+ _polygonFilter->Update ( );
318+ double bounds [6 ] = { 0 ., 0 ., 0 ., 0 ., 0 ., 0 . };
319+ GetBounds (bounds);
320+ const double radius = sqrt ((bounds [1 ] - bounds [0 ])*(bounds [1 ] - bounds [0 ]) + (bounds [3 ] - bounds [2 ])*(bounds [3 ] - bounds [2 ]) + (bounds [5 ] - bounds [4 ])*(bounds [5 ] - bounds [4 ])) / 200 .;
321+ _contourFilter->SetRadius (radius); // 5.12.0
322+ _contourFilter->Update ( );
315323 GetCurrentRenderer ( )->AddActor (_frustumActor);
316324 GetCurrentRenderer ( )->AddActor (_contourActor);
317325 }
@@ -490,6 +498,7 @@ void vtkFrustumWidget::GetBounds (double bounds [6])
490498 else
491499 {
492500 // frustum->GetBounds (bounds);
501+ // CP : le commentaire ci-après n'est peut être plus vrai depuis l'utilisation de vtkPolygonFilter (v 5.12.0).
493502 /* On n'utilise pas frustum->GetBounds (bounds) car notre polydata contient des lignes qui parfois, de manière non reproductible,
494503 * sortent carrément du domaine observé, à savoir qu'une composante d'une coordonnée peut être de l'ordre de 10E+30 ! Parfois veut ici
495504 * dire environ 1 fois sur 15, et c'est semble-t-il toujours au premier appel de cette fonction. Problème d'initialisation d'une
@@ -638,6 +647,7 @@ void vtkFrustumWidget::CreateDefaultRepresentation ( )
638647 _planes->SetNormals (normals);
639648 _frustum->SetPlanes (_planes);
640649 _frustum->Update ( );
650+ _polygonFilter->Update ( );
641651 // On confère à ce widget le look de la classe vtkImplicitPlaneWidget :
642652 _frustumActor->SetProperty (_planeWidgets [0 ]->GetPlaneProperty ( ));
643653} // vtkFrustumWidget::CreateDefaultRepresentation
@@ -692,6 +702,7 @@ void vtkFrustumWidget::Update (vtkFrustumWidget::vtkInternalPlaneWidget* planeWi
692702 _frustum->SetPlanes (_planes);
693703 _frustum->Modified ( );
694704 _frustum->Update ( );
705+ _polygonFilter->Update ( );
695706
696707 // Recentrer les manipulateurs sur leur face :
697708 vtkPolyData* frustum = _frustum->GetOutput ( );
0 commit comments