1 #ifndef __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__
2 #define __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__
4 #include <cpExtensions/Config.h>
6 #ifdef cpExtensions_QT4
10 #include <vtkPolyDataNormals.h>
11 #include <vtkQuadricLODActor.h>
12 #include <vtkRenderer.h>
13 #include <vtkStripper.h>
14 #include <vtkSmartPointer.h>
15 #include <cpExtensions/Visualization/ImageSliceActors.h>
17 #define cpExtensions_MAX_POLYS 65535
19 // -------------------------------------------------------------------------
24 class SimpleMPRWidget;
27 // -------------------------------------------------------------------------
28 namespace cpExtensions
34 class cpExtensions_EXPORT SimpleMPRWidget
40 typedef SimpleMPRWidget Self;
42 typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
48 vtkSmartPointer< vtkPolyData > Data;
49 vtkSmartPointer< vtkPolyDataNormals > Normals;
50 vtkSmartPointer< vtkStripper > Stripper;
51 vtkSmartPointer< vtkPolyDataMapper > Mapper;
52 vtkSmartPointer< vtkActor > Actor;
54 void Configure( vtkPolyData* data )
58 this->Data->GetScalarRange( r );
60 this->Normals = vtkSmartPointer< vtkPolyDataNormals >::New( );
61 this->Stripper = vtkSmartPointer< vtkStripper >::New( );
62 this->Mapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
63 this->Normals->SetInputData( this->Data );
64 this->Normals->SetFeatureAngle( 60.0 );
65 this->Stripper->SetInputConnection(
66 this->Normals->GetOutputPort( )
68 this->Mapper->SetInputConnection(
69 this->Stripper->GetOutputPort( )
71 this->Mapper->UseLookupTableScalarRangeOff( );
72 this->Mapper->SetScalarRange( r[ 0 ], r[ 1 ] );
74 unsigned long nPolys = this->Data->GetNumberOfPolys( );
75 if( nPolys < cpExtensions_MAX_POLYS )
77 this->Actor = vtkSmartPointer< vtkActor >::New( );
78 this->Actor->SetMapper( this->Mapper );
82 vtkSmartPointer< vtkQuadricLODActor > actor =
83 vtkSmartPointer< vtkQuadricLODActor >::New( );
84 actor->SetMapper( this->Mapper );
85 actor->DeferLODConstructionOff( );
86 this->Actor = actor.GetPointer( );
93 explicit SimpleMPRWidget( QWidget* parent = 0 );
94 virtual ~SimpleMPRWidget( );
98 void SetMainImage( vtkImageData* image );
99 void SetMainActor( vtkImageActor* actor );
100 void AddImage( vtkImageData* image );
101 void AddImageActor( vtkImageActor* actor );
102 void AddMesh( vtkPolyData* mesh );
103 void AddMeshActor( vtkProp3D* actor );
104 void AddActor( vtkProp* actor );
107 vtkRenderWindowInteractor* GetInteractor( unsigned int i );
108 vtkRenderer* GetRenderer( unsigned int i );
109 vtkRenderWindow* GetRenderWindow( unsigned int i );
111 std::vector< std::pair< vtkImageActor*, vtkRenderer* > >
112 GetMainImageActors( );
113 vtkActor* GetActor( vtkPolyData* mesh );
117 void _AssociateSlices( );
120 void _SyncBottom( int a, int b );
121 void _SyncTop( int a, int b );
124 Ui::SimpleMPRWidget* m_UI;
125 QVTKWidget* m_VTK[ 4 ];
127 vtkSmartPointer< vtkRenderer > m_Renderers[ 4 ];
128 vtkSmartPointer< TSliceActors > m_2DSlices[ 3 ];
129 vtkSmartPointer< TSliceActors > m_3DSlices[ 3 ];
131 std::map< vtkPolyData*, PolyDataActor > m_PolyDatas;
138 #endif // cpExtensions_QT4
140 #endif // __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__