]> Creatis software - cpMesh.git/blob - appli/InteractiveDeformableMeshSegmentation/MainWnd.h
First commit
[cpMesh.git] / appli / InteractiveDeformableMeshSegmentation / MainWnd.h
1 #ifndef __MAINWND__H__
2 #define __MAINWND__H__
3
4 #include <QMainWindow>
5
6 #include <itkImage.h>
7 #include <itkImageToVTKImageFilter.h>
8
9 #include <vtkOrientationMarkerWidget.h>
10 #include <vtkRenderer.h>
11 #include <vtkSmartPointer.h>
12
13 #include <cpm/DataStructures/QuadEdgeMesh.h>
14
15 #include <cpmPluginsInterface/Interface.h>
16 #include <cpmPluginsInterface/Filter.h>
17
18 #include "InteractorStyleImage.h"
19 #include "VolumeActors.h"
20
21 /*
22   #include <cpm/VTK/MeshMapper.h>
23   #include <cpm/Algorithms/QuadEdge/MeshPlaneCutterFilter.h>
24 */
25
26 // -------------------------------------------------------------------------
27 namespace Ui
28 {
29   class MainWnd;
30 }
31
32 // -------------------------------------------------------------------------
33 /**
34  */
35 class MainWnd
36   : public QMainWindow
37 {
38   Q_OBJECT;
39
40 public:
41   // Plugins types
42   typedef cpmPluginsInterface::FilterProvider TFilterProvider;
43   typedef cpmPluginsInterface::Filter         TFilterObject;
44   typedef TFilterObject::TParameters          TParameters;
45   typedef
46   cpmPluginsInterface::Interface< TFilterProvider, TFilterObject >
47   TFilterPlugins;
48
49   // Data types
50   static const unsigned int Dimension = 3;
51   typedef short  TPixel;
52   typedef double TScalar;
53   typedef itk::Image< TPixel, Dimension >      TImage;
54   typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
55
56   typedef cpm::DataStructures::QuadEdgeMesh< TScalar, Dimension > TMesh;
57
58   /*
59     typedef cpm::VTK::MeshMapper< TTriangulation > TTriangulationMapper;
60     typedef
61     cpm::Algorithms::QuadEdge::MeshPlaneCutterFilter< TTriangulation >
62     TCutter;
63   */
64
65 public:
66   explicit MainWnd( QWidget* parent = 0 );
67   virtual ~MainWnd( );
68
69 protected:
70   void _UpdateEnabledFlags( );
71   bool _ParametersDialog( TParameters& parameters );
72
73   template< class I >
74   bool _LoadImage( typename I::Pointer& image );
75
76   /*
77     void _SliceMesh( int axis );
78     static void _SliceEventCallback(
79     vtkObject* caller,
80     long unsigned int eventId,
81     void* clientData, void* callData
82     );
83   */
84
85 private slots:
86   void triggered_aSwitchMode( );
87   void triggered_aReloadPlugins( );
88   void triggered_aOpenInputImage( );
89   void triggered_aOpenSegmentedImage( );
90   void triggered_aFilterSegmentedImage( );
91   void triggered_aSegmentedImageToMesh( );
92   /*
93     void triggered_aLoadInputImage( );
94     void triggered_aLoadSegmentedImage( );
95   */
96
97 private:
98   Ui::MainWnd* m_UI;
99
100   // Plugins objects
101   std::string m_PluginsConfigurationFile;
102   TFilterPlugins m_FilterPlugins;
103
104   // Inputs
105   std::string        m_LastOpenedFile;
106   TImage::Pointer    m_Image;
107   TImage::Pointer    m_Segmentation;
108   TMesh::Pointer     m_Mesh;
109   TVTKImage::Pointer m_VTKImage;
110   TVTKImage::Pointer m_VTKSegmentation;
111
112   // Renderers
113   vtkSmartPointer< vtkRenderer >        m_3DRenderer;
114   vtkSmartPointer< vtkRenderer >        m_XPlaneRenderer;
115   vtkSmartPointer< vtkRenderer >        m_YPlaneRenderer;
116   vtkSmartPointer< vtkRenderer >        m_ZPlaneRenderer;
117   vtkSmartPointer< vtkRenderer >        m_AuxRenderer;
118   vtkSmartPointer< idms::VolumeActors > m_ImageActors;
119   vtkSmartPointer< idms::InteractorStyleImage > m_XStyle;
120   vtkSmartPointer< idms::InteractorStyleImage > m_YStyle;
121   vtkSmartPointer< idms::InteractorStyleImage > m_ZStyle;
122
123   vtkSmartPointer< vtkOrientationMarkerWidget > m_3DOrientationWidget;
124   /*
125     TTriangulation::Pointer                 m_Mesh;
126     vtkSmartPointer< TTriangulationMapper > m_MeshMapper;
127     vtkSmartPointer< vtkActor >             m_MeshActor;
128     TCutter::Pointer m_ZCutter;
129   */
130 };
131
132 #endif // __MAINWND__H__
133
134 // eof - $RCSfile$