]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/ProcessObject.h
5fc98f399f605b624bcdd1155e65b67f1be823e0
[cpPlugins.git] / lib / cpPlugins / Interface / ProcessObject.h
1 #ifndef __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
2 #define __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
3
4 #include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
5
6 #include <map>
7 #include <vector>
8
9 #include <cpPlugins/Interface/Config.h>
10 #include <cpPlugins/Interface/Object.h>
11 #include <cpPlugins/Interface/DataObject.h>
12 #include <cpPlugins/Interface/Parameters.h>
13
14 #ifdef cpPlugins_Interface_QT4
15 class QWidget;
16 #else
17 typedef char QWidget;
18 #endif // cpPlugins_Interface_QT4
19
20 #include <itkProcessObject.h>
21
22 #include <vtkSmartPointer.h>
23 #include <vtkAlgorithm.h>
24
25 namespace cpPlugins
26 {
27   namespace Interface
28   {
29 #ifdef cpPlugins_Interface_QT4
30     class ParametersQtDialog;
31 #else
32     typedef char ParametersQtDialog;
33 #endif // cpPlugins_Interface_QT4
34
35     /**
36      */
37     class cpPlugins_Interface_EXPORT ProcessObject
38       : public Object
39     {
40     public:
41       typedef ProcessObject                   Self;
42       typedef Object                          Superclass;
43       typedef itk::SmartPointer< Self >       Pointer;
44       typedef itk::SmartPointer< const Self > ConstPointer;
45
46       typedef Parameters TParameters;
47
48     public:
49       itkTypeMacro( ProcessObject, Object );
50       cpPlugins_Id_Macro(
51         cpPlugins::Interface::ProcessObject, "BaseObject"
52         );
53
54     public:
55       // To impact pipeline
56       virtual void Modified( ) const;
57
58       virtual TParameters* GetParameters( );
59       virtual const TParameters* GetParameters( ) const;
60
61       virtual unsigned int GetNumberOfInputs( ) const;
62       virtual unsigned int GetNumberOfOutputs( ) const;
63
64       virtual std::vector< std::string > GetInputsNames( ) const;
65       virtual std::vector< std::string > GetOutputsNames( ) const;
66
67       virtual void SetInput( const std::string& id, DataObject* dobj );
68
69       virtual std::string Update( );
70       virtual void DisconnectOutputs( );
71
72       virtual bool ExecConfigurationDialog( QWidget* parent );
73
74       template< class T >
75         inline T* GetITK( );
76
77       template< class T >
78         inline const T* GetITK( ) const;
79
80       template< class T >
81         inline T* GetVTK( );
82
83       template< class T >
84         inline const T* GetVTK( ) const;
85
86       template< class T >
87         inline T* GetInput( const std::string& id );
88
89       template< class T >
90         inline const T* GetInput( const std::string& id ) const;
91
92       template< class T >
93         inline T* GetOutput( const std::string& id );
94
95       template< class T >
96         inline const T* GetOutput( const std::string& id ) const;
97
98     protected:
99       ProcessObject( );
100       virtual ~ProcessObject( );
101
102       virtual void _AddInput( const std::string& name );
103
104       template< class F >
105         inline F* _CreateITK( );
106
107       template< class F >
108         inline F* _CreateVTK( );
109
110       template< class O >
111         inline void _MakeOutput( const std::string& id );
112
113       virtual std::string _GenerateData( ) = 0;
114
115     private:
116       // Purposely not implemented
117       ProcessObject( const Self& );
118       Self& operator=( const Self& );
119
120     protected:
121       itk::ProcessObject::Pointer     m_ITKObject;
122       vtkSmartPointer< vtkAlgorithm > m_VTKObject;
123
124       Parameters::Pointer m_Parameters;
125       ParametersQtDialog* m_ParametersDialog;
126
127       typedef std::map< std::string, DataObject::Pointer > _TDataContainer;
128       _TDataContainer m_Inputs;
129       _TDataContainer m_Outputs;
130     };
131
132   } // ecapseman
133
134 } // ecapseman
135
136 #include <cpPlugins/Interface/ProcessObject.hxx>
137
138 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
139
140 // eof - $RCSfile$