+ struct PolyDataActor
+ {
+ vtkSmartPointer< vtkPolyData > Data;
+ vtkSmartPointer< vtkPolyDataNormals > Normals;
+ vtkSmartPointer< vtkStripper > Stripper;
+ vtkSmartPointer< vtkPolyDataMapper > Mapper;
+ vtkSmartPointer< vtkQuadricLODActor > Actor;
+
+ void Configure( vtkPolyData* data )
+ {
+ this->Data = data;
+ double r[ 2 ];
+ this->Data->GetScalarRange( r );
+
+ this->Normals = vtkSmartPointer< vtkPolyDataNormals >::New( );
+ this->Stripper = vtkSmartPointer< vtkStripper >::New( );
+ this->Mapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
+ this->Actor = vtkSmartPointer< vtkQuadricLODActor >::New( );
+
+ this->Normals->SetInputData( this->Data );
+ this->Normals->SetFeatureAngle( 60.0 );
+ this->Stripper->SetInputConnection(
+ this->Normals->GetOutputPort( )
+ );
+ this->Mapper->SetInputConnection(
+ this->Stripper->GetOutputPort( )
+ );
+ this->Mapper->UseLookupTableScalarRangeOff( );
+ this->Mapper->SetScalarRange(
+ r[ 0 ], ( ( r[ 1 ] - r[ 0 ] ) * 0.75 ) + r[ 0 ]
+ );
+ this->Actor->SetMapper( this->Mapper );
+ this->Actor->DeferLODConstructionOff( );
+ }
+ };
+