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>
19 #include <vtkSmartPointer.h>
20 #include <vtkImageData.h>
21 #include <vtkPolyDataMapper.h>
22 #include <vtkPolyDataNormals.h>
23 #include <vtkQuadricLODActor.h>
24 #include <vtkStripper.h>
25 #include <cpExtensions/Visualization/MPRObjects.h>
28 // -------------------------------------------------------------------------
29 // TODO: class QTreeWidgetItem;
34 class SimpleMPRWidget;
37 // -------------------------------------------------------------------------
38 namespace cpExtensions
44 class cpExtensions_EXPORT SimpleMPRWidget
50 typedef SimpleMPRWidget Self;
52 typedef cpExtensions::Visualization::ImageSliceActors TActors;
54 typedef cpExtensions::Visualization::MPRObjects TMPRObjects;
55 typedef TMPRObjects::TStyle TStyle;
56 typedef TMPRObjects::TMouseCommand TMouseCommand;
57 typedef TMPRObjects::TMouseWheelCommand TMouseWheelCommand;
58 typedef TMPRObjects::TKeyCommand TKeyCommand;
59 typedef TMPRObjects::TVoidCommand TVoidCommand;
60 typedef TMPRObjects::TMouseMoveCommand TMouseMoveCommand;
61 typedef TMPRObjects::TMouseClickCommand TMouseClickCommand;
62 typedef TMPRObjects::TMouseDoubleClickCommand TMouseDoubleClickCommand;
63 typedef TMPRObjects::TExposeCommand TExposeCommand;
64 typedef TMPRObjects::TConfigureCommand TConfigureCommand;
65 typedef TMPRObjects::TEnterCommand TEnterCommand;
66 typedef TMPRObjects::TLeaveCommand TLeaveCommand;
71 vtkSmartPointer< vtkPolyData > Data;
72 vtkSmartPointer< vtkPolyDataNormals > Normals;
73 vtkSmartPointer< vtkStripper > Stripper;
74 vtkSmartPointer< vtkPolyDataMapper > Mapper;
75 vtkSmartPointer< vtkQuadricLODActor > Actor;
77 void Configure( vtkPolyData* data )
81 this->Data->GetScalarRange( r );
83 this->Normals = vtkSmartPointer< vtkPolyDataNormals >::New( );
84 this->Stripper = vtkSmartPointer< vtkStripper >::New( );
85 this->Mapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
86 this->Actor = vtkSmartPointer< vtkQuadricLODActor >::New( );
88 this->Normals->SetInputData( this->Data );
89 this->Normals->SetFeatureAngle( 60.0 );
90 this->Stripper->SetInputConnection(
91 this->Normals->GetOutputPort( )
93 this->Mapper->SetInputConnection(
94 this->Stripper->GetOutputPort( )
96 this->Mapper->UseLookupTableScalarRangeOff( );
97 this->Mapper->SetScalarRange(
98 r[ 0 ], ( ( r[ 1 ] - r[ 0 ] ) * 0.75 ) + r[ 0 ]
100 this->Actor->SetMapper( this->Mapper );
101 this->Actor->DeferLODConstructionOff( );
106 explicit SimpleMPRWidget( QWidget* parent = 0 );
107 virtual ~SimpleMPRWidget( );
111 void SetMainImage( vtkImageData* image );
112 void AddMesh( vtkPolyData* mesh );
115 vtkRenderWindowInteractor* GetInteractor( unsigned int i );
119 unsigned int GetNumberOfData( ) const;
121 vtkImageData* data, const std::string& name,
122 const std::string& parent
125 vtkPolyData* data, const std::string& name
127 const std::string& GetMainImage( ) const;
128 bool SetMainImage( const std::string& name );
129 void DeleteData( const std::string& name );
130 void DeleteAllData( );
134 const std::string& name,
135 const double& r, const double& g, const double& b
137 void ShowData( const std::string& name );
138 void HideData( const std::string& name );
139 void SetWindowLevel( const double& w, const double& l );
140 double GetWindow( ) const;
141 double GetLevel( ) const;
143 // Visual objects accessors
144 std::string GetSelectedData( ) const;
145 vtkProp* GetProp( const std::string& name );
149 void _SyncBottom( int a, int b );
150 void _SyncTop( int a, int b );
153 Ui::SimpleMPRWidget* m_UI;
154 QVTKWidget* m_VTK[ 4 ];
156 vtkSmartPointer< vtkRenderer > m_Renderers[ 4 ];
157 vtkSmartPointer< TActors > m_2DSlices[ 3 ];
158 vtkSmartPointer< TActors > m_3DSlices[ 3 ];
160 std::map< vtkPolyData*, PolyDataActor > m_PolyDatas;
163 static double cm_Colors[ 8 ][ 3 ];
164 vtkSmartPointer< TMPRObjects > m_MPRObjects;
168 vtkPolyDataNormals* Normals;
169 vtkStripper* Stripper;
170 vtkPolyDataMapper* Mapper;
171 vtkQuadricLODActor* Actor;
174 virtual ~PolyDataActor( );
175 void Configure( vtkPolyData* pd );
180 enum { IMAGE, MESH } Tag;
185 Data& operator=( const Data& data );
186 void SetImageData( vtkImageData* data );
187 void SetPolyData( vtkPolyData* data );
188 vtkImageData* GetImage( );
189 vtkPolyData* GetMesh( );
190 vtkProp* GetMeshActor( );
192 std::string m_MainImage;
193 std::map< std::string, Data > m_Data;
194 std::map< std::string, std::string > m_Tree;
202 #endif // cpExtensions_QT4
204 #endif // __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__