]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/QT/SimpleMPRWidget.h
...
[cpPlugins.git] / lib / cpExtensions / QT / SimpleMPRWidget.h
1 #ifndef __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__
2 #define __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__
3
4 #include <cpExtensions/Config.h>
5
6 #ifdef cpExtensions_QT4
7
8 #include <map>
9 #include <QWidget>
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>
16
17 /*
18   #include <string>
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>
26 */
27
28 // -------------------------------------------------------------------------
29 // TODO: class QTreeWidgetItem;
30 class QVTKWidget;
31
32 namespace Ui
33 {
34   class SimpleMPRWidget;
35 }
36
37 // -------------------------------------------------------------------------
38 namespace cpExtensions
39 {
40   namespace QT
41   {
42     /**
43      */
44     class cpExtensions_EXPORT SimpleMPRWidget
45       : public QWidget
46     {
47       Q_OBJECT;
48
49     public:
50       typedef SimpleMPRWidget Self;
51
52       typedef cpExtensions::Visualization::ImageSliceActors TActors;
53       /* TODO
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;
67       */
68
69       struct PolyDataActor
70       {
71         vtkSmartPointer< vtkPolyData >        Data;
72         vtkSmartPointer< vtkPolyDataNormals > Normals;
73         vtkSmartPointer< vtkStripper >        Stripper;
74         vtkSmartPointer< vtkPolyDataMapper >  Mapper;
75         vtkSmartPointer< vtkQuadricLODActor > Actor;
76
77         void Configure( vtkPolyData* data )
78           {
79             this->Data = data;
80             double r[ 2 ];
81             this->Data->GetScalarRange( r );
82
83             this->Normals  = vtkSmartPointer< vtkPolyDataNormals >::New( );
84             this->Stripper = vtkSmartPointer< vtkStripper >::New( );
85             this->Mapper   = vtkSmartPointer< vtkPolyDataMapper >::New( );
86             this->Actor    = vtkSmartPointer< vtkQuadricLODActor >::New( );
87
88             this->Normals->SetInputData( this->Data );
89             this->Normals->SetFeatureAngle( 60.0 );
90             this->Stripper->SetInputConnection(
91               this->Normals->GetOutputPort( )
92               );
93             this->Mapper->SetInputConnection(
94               this->Stripper->GetOutputPort( )
95               );
96             this->Mapper->UseLookupTableScalarRangeOff( );
97             this->Mapper->SetScalarRange(
98               r[ 0 ], ( ( r[ 1 ] - r[ 0 ] ) * 0.75 ) + r[ 0 ]
99               );
100             this->Actor->SetMapper( this->Mapper );
101             this->Actor->DeferLODConstructionOff( );
102           }
103       };
104
105     public:
106       explicit SimpleMPRWidget( QWidget* parent = 0 );
107       virtual ~SimpleMPRWidget( );
108
109       // Data management
110       void Clear( );
111       void SetMainImage( vtkImageData* image );
112       void AddMesh( vtkPolyData* mesh );
113
114       // Visual objects
115       vtkRenderWindowInteractor* GetInteractor( unsigned int i );
116
117
118       /* TODO
119          unsigned int GetNumberOfData( ) const;
120          bool AddData(
121          vtkImageData* data, const std::string& name,
122          const std::string& parent
123          );
124          bool AddData(
125          vtkPolyData* data, const std::string& name
126          );
127          const std::string& GetMainImage( ) const;
128          bool SetMainImage( const std::string& name );
129          void DeleteData( const std::string& name );
130          void DeleteAllData( );
131
132          // Some qt accessors
133          void SetDataColor(
134          const std::string& name,
135          const double& r, const double& g, const double& b
136          );
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;
142
143          // Visual objects accessors
144          std::string GetSelectedData( ) const;
145          vtkProp* GetProp( const std::string& name );
146       */
147
148     private slots:
149       void _SyncBottom( int a, int b );
150       void _SyncTop( int a, int b );
151
152     protected:
153       Ui::SimpleMPRWidget* m_UI;
154       QVTKWidget*          m_VTK[ 4 ];
155
156       vtkSmartPointer< vtkRenderer > m_Renderers[ 4 ];
157       vtkSmartPointer< TActors >     m_2DSlices[ 3 ];
158       vtkSmartPointer< TActors >     m_3DSlices[ 3 ];
159
160       std::map< vtkPolyData*, PolyDataActor > m_PolyDatas;
161
162       /* TODO
163          static double cm_Colors[ 8 ][ 3 ];
164          vtkSmartPointer< TMPRObjects > m_MPRObjects;
165          struct PolyDataActor
166          {
167          vtkPolyData*        Mesh;
168          vtkPolyDataNormals* Normals;
169          vtkStripper*        Stripper;
170          vtkPolyDataMapper*  Mapper;
171          vtkQuadricLODActor* Actor;
172
173          PolyDataActor( );
174          virtual ~PolyDataActor( );
175          void Configure( vtkPolyData* pd );
176          };
177
178          struct Data
179          {
180          enum { IMAGE, MESH } Tag;
181          vtkImageData*        Image;
182          PolyDataActor        Mesh;
183          Data( );
184          virtual ~Data( );
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( );
191          };
192          std::string m_MainImage;
193          std::map< std::string, Data >        m_Data;
194          std::map< std::string, std::string > m_Tree;
195       */
196     };
197
198   } // ecapseman
199
200 } // ecapseman
201
202 #endif // cpExtensions_QT4
203
204 #endif // __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__
205
206 // eof - $RCSfile$