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