]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/BaseMPRWidget.h
MPR finished
[cpPlugins.git] / lib / cpPlugins / Interface / BaseMPRWidget.h
1 #ifndef __CPPLUGINS__INTERFACE__BASEMPRWIDGET__H__
2 #define __CPPLUGINS__INTERFACE__BASEMPRWIDGET__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 BaseMPRWidget;
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 BaseMPRWidget
43       : public QWidget
44     {
45       Q_OBJECT;
46
47     public:
48       typedef cpExtensions::Visualization::MPRObjects TMPRObjects;
49
50       typedef TMPRObjects::TStyle                   TStyle;
51       typedef TMPRObjects::TMouseCommand            TMouseCommand;
52       typedef TMPRObjects::TMouseWheelCommand       TMouseWheelCommand;
53       typedef TMPRObjects::TKeyCommand              TKeyCommand;
54       typedef TMPRObjects::TVoidCommand             TVoidCommand;
55       typedef TMPRObjects::TMouseMoveCommand        TMouseMoveCommand;
56       typedef TMPRObjects::TMouseClickCommand       TMouseClickCommand;
57       typedef TMPRObjects::TMouseDoubleClickCommand TMouseDoubleClickCommand;
58       typedef TMPRObjects::TExposeCommand           TExposeCommand;
59       typedef TMPRObjects::TConfigureCommand        TConfigureCommand;
60       typedef TMPRObjects::TEnterCommand            TEnterCommand;
61       typedef TMPRObjects::TLeaveCommand            TLeaveCommand;
62
63     public:
64       explicit BaseMPRWidget( QWidget* parent = 0 );
65       virtual ~BaseMPRWidget( );
66
67       // Data management
68       bool AddData(
69         DataObject* data, const std::string& name,
70         const std::string& parent
71         );
72       bool SetMainImage( const std::string& name );
73       void DeleteData( const std::string& name );
74       void DeleteAllData( );
75
76       // Some visualization accessors
77       void SetDataColor(
78         const std::string& name,
79         const double& r, const double& g, const double& b
80         );
81       void ShowData( const std::string& name );
82       void HideData( const std::string& name );
83
84       vtkRenderWindowInteractor* GetInteractor( unsigned int i );
85
86       // Visual objects accessors
87       std::string GetSelectedData( ) const;
88
89     protected:
90       QTreeWidgetItem* _FindItemInTree( const std::string& name ) const;
91       QTreeWidgetItem* _UpdateTreeItem(
92         const std::string& name,
93         const std::string& parent
94         );
95
96     private slots:
97       void _SyncBottom( int a, int b );
98       void _SyncTop( int a, int b );
99
100     protected:
101       Ui::BaseMPRWidget*             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         DataObject*          Source;
122         union
123         {
124           vtkImageData* Image;
125           PolyDataActor Mesh;
126         };
127
128         Data( );
129         virtual ~Data( );
130
131         Data& operator=( const Data& data );
132
133         DataObject* GetSourceDataObject( );
134         const DataObject* GetSourceDataObject( ) const;
135         void SetSourceDataObject( DataObject* dobj );
136
137         vtkImageData* GetImage( );
138         vtkPolyData* GetMesh( );
139         vtkProp* GetMeshActor( );
140       };
141
142       std::string m_MainImage;
143       std::map< std::string, Data >        m_Data;
144       std::map< std::string, std::string > m_Tree;
145     };
146
147   } // ecapseman
148
149 } // ecapseman
150
151 #endif // cpPlugins_Interface_QT4
152
153 #endif // __CPPLUGINS__INTERFACE__BASEMPRWIDGET__H__
154
155 // eof - $RCSfile$