]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/QT/SimpleMPRWidget.h
ba2b79b5777c72020f84a12bb6a7819ec6eb976b
[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 <string>
10
11 #include <QWidget>
12
13 #include <vtkSmartPointer.h>
14 #include <vtkImageData.h>
15 #include <vtkPolyDataMapper.h>
16 #include <vtkPolyDataNormals.h>
17 #include <vtkQuadricLODActor.h>
18 #include <vtkStripper.h>
19
20 #include <cpExtensions/Visualization/MPRObjects.h>
21
22 // -------------------------------------------------------------------------
23 class QTreeWidgetItem;
24 class QVTKWidget;
25
26 namespace Ui
27 {
28   class SimpleMPRWidget;
29 }
30
31 // -------------------------------------------------------------------------
32 namespace cpExtensions
33 {
34   namespace QT
35   {
36     /**
37      */
38     class cpExtensions_EXPORT SimpleMPRWidget
39       : public QWidget
40     {
41       Q_OBJECT;
42
43     public:
44       typedef SimpleMPRWidget Self;
45
46       typedef cpExtensions::Visualization::MPRObjects TMPRObjects;
47       typedef TMPRObjects::TStyle                     TStyle;
48       typedef TMPRObjects::TMouseCommand              TMouseCommand;
49       typedef TMPRObjects::TMouseWheelCommand         TMouseWheelCommand;
50       typedef TMPRObjects::TKeyCommand                TKeyCommand;
51       typedef TMPRObjects::TVoidCommand               TVoidCommand;
52       typedef TMPRObjects::TMouseMoveCommand          TMouseMoveCommand;
53       typedef TMPRObjects::TMouseClickCommand         TMouseClickCommand;
54       typedef TMPRObjects::TMouseDoubleClickCommand   TMouseDoubleClickCommand;
55       typedef TMPRObjects::TExposeCommand             TExposeCommand;
56       typedef TMPRObjects::TConfigureCommand          TConfigureCommand;
57       typedef TMPRObjects::TEnterCommand              TEnterCommand;
58       typedef TMPRObjects::TLeaveCommand              TLeaveCommand;
59
60     public:
61       explicit SimpleMPRWidget( QWidget* parent = 0 );
62       virtual ~SimpleMPRWidget( );
63
64       // Data management
65       unsigned int GetNumberOfData( ) const;
66       bool AddData(
67         vtkImageData* data, const std::string& name,
68         const std::string& parent
69         );
70       bool AddData(
71         vtkPolyData* data, const std::string& name
72         );
73       const std::string& GetMainImage( ) const;
74       bool SetMainImage( const std::string& name );
75       void DeleteData( const std::string& name );
76       void DeleteAllData( );
77
78       // Some qt accessors
79       void SetDataColor(
80         const std::string& name,
81         const double& r, const double& g, const double& b
82         );
83       void ShowData( const std::string& name );
84       void HideData( const std::string& name );
85       void SetWindowLevel( const double& w, const double& l );
86       double GetWindow( ) const;
87       double GetLevel( ) const;
88
89       vtkRenderWindowInteractor* GetInteractor( unsigned int i );
90
91       // Visual objects accessors
92       std::string GetSelectedData( ) const;
93                                           
94     private slots:
95       void _SyncBottom( int a, int b );
96       void _SyncTop( int a, int b );
97
98     protected:
99       static double cm_Colors[ 8 ][ 3 ];
100
101       Ui::SimpleMPRWidget*           m_UI;
102       vtkSmartPointer< TMPRObjects > m_MPRObjects;
103       QVTKWidget*                    m_VTK[ 4 ];
104
105       struct PolyDataActor
106       {
107         vtkPolyData*        Mesh;
108         vtkPolyDataNormals* Normals;
109         vtkStripper*        Stripper;
110         vtkPolyDataMapper*  Mapper;
111         vtkQuadricLODActor* Actor;
112
113         PolyDataActor( );
114         virtual ~PolyDataActor( );
115         void Configure( vtkPolyData* pd );
116       };
117
118       struct Data
119       {
120         enum { IMAGE, MESH } Tag;
121         vtkImageData*        Image;
122         PolyDataActor        Mesh;
123
124         Data( );
125         virtual ~Data( );
126
127         Data& operator=( const Data& data );
128
129         void SetImageData( vtkImageData* data );
130         void SetPolyData( vtkPolyData* data );
131
132         vtkImageData* GetImage( );
133         vtkPolyData* GetMesh( );
134         vtkProp* GetMeshActor( );
135       };
136
137       std::string m_MainImage;
138       std::map< std::string, Data >        m_Data;
139       std::map< std::string, std::string > m_Tree;
140     };
141
142   } // ecapseman
143
144 } // ecapseman
145
146 #endif // cpExtensions_QT4
147
148 #endif // __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__
149
150 // eof - $RCSfile$