]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/ProcessObject.h
b6cf116e680d730dd7e35632673b64f6e1c2f1f8
[cpPlugins.git] / lib / cpPlugins / Interface / ProcessObject.h
1 #ifndef __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
2 #define __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
3
4 #include <set>
5
6 #include <cpPlugins/Interface/DataObject.h>
7 #include <cpPlugins/Interface/Parameters.h>
8
9 #include <itkProcessObject.h>
10 #include <vtkSmartPointer.h>
11 #include <vtkAlgorithm.h>
12
13 // Some forward declarations
14 class vtkRenderWindowInteractor;
15 #ifdef cpPlugins_Interface_QT4
16 class QWidget;
17 #else
18 typedef char QWidget;
19 #endif // cpPlugins_Interface_QT4
20
21 namespace cpPlugins
22 {
23   namespace Interface
24   {
25     // Some forward declarations
26     class Plugins;
27 #ifdef cpPlugins_Interface_QT4
28     class ParametersQtDialog;
29 #else
30     typedef char ParametersQtDialog;
31 #endif // cpPlugins_Interface_QT4
32
33     /**
34      */
35     class cpPlugins_Interface_EXPORT ProcessObject
36       : public Object
37     {
38     public:
39       typedef ProcessObject                   Self;
40       typedef Object                          Superclass;
41       typedef itk::SmartPointer< Self >       Pointer;
42       typedef itk::SmartPointer< const Self > ConstPointer;
43
44       typedef Parameters TParameters;
45       typedef std::set< vtkRenderWindowInteractor* > TInteractors;
46
47       enum DialogResult
48       {
49         DialogResult_NoModal = 0,
50         DialogResult_Modal,
51         DialogResult_Cancel
52       };
53
54     public:
55       itkTypeMacro( ProcessObject, Object );
56       cpPlugins_Id_Macro( ProcessObject, BaseObject );
57
58       itkBooleanMacro( Interactive );
59
60       itkGetConstObjectMacro( Parameters, TParameters );
61       itkGetObjectMacro( Parameters, TParameters );
62       itkGetConstMacro( Plugins, const Plugins* );
63       itkGetMacro( Plugins, Plugins* );
64       itkGetConstMacro( Interactive, bool );
65
66       itkSetObjectMacro( Plugins, Plugins );
67       itkSetMacro( Interactive, bool );
68
69     public:
70       // To impact pipeline
71       virtual void Modified( ) const;
72
73       virtual void GetInputsNames( std::set< std::string >& names ) const;
74       virtual void GetOutputsNames( std::set< std::string >& names ) const;
75       unsigned int GetNumberOfInputs( ) const;
76       unsigned int GetNumberOfOutputs( ) const;
77
78       virtual bool SetOutputObjectName(
79         const std::string& new_object_name,
80         const std::string& output_name
81         );
82
83       virtual void SetInput( const std::string& id, DataObject* dobj );
84
85       virtual std::string Update( );
86       virtual void DisconnectOutputs( );
87
88       virtual void AddInteractor( vtkRenderWindowInteractor* interactor );
89       virtual DialogResult ExecConfigurationDialog( QWidget* parent );
90
91       template< class T >
92         inline T* GetITK( );
93
94       template< class T >
95         inline const T* GetITK( ) const;
96
97       template< class T >
98         inline T* GetVTK( );
99
100       template< class T >
101         inline const T* GetVTK( ) const;
102
103       template< class T >
104         inline T* GetInput( const std::string& id );
105
106       template< class T >
107         inline const T* GetInput( const std::string& id ) const;
108
109       template< class T >
110         inline T* GetOutput( const std::string& id );
111
112       template< class T >
113         inline const T* GetOutput( const std::string& id ) const;
114
115     protected:
116       ProcessObject( );
117       virtual ~ProcessObject( );
118
119       virtual void _AddInput( const std::string& name );
120
121       template< class F >
122         inline F* _CreateITK( );
123
124       template< class F >
125         inline F* _CreateVTK( );
126
127       template< class O >
128         inline void _MakeOutput( const std::string& id );
129
130       virtual std::string _GenerateData( ) = 0;
131
132     private:
133       // Purposely not implemented
134       ProcessObject( const Self& );
135       Self& operator=( const Self& );
136
137     protected:
138       itk::ProcessObject::Pointer     m_ITKObject;
139       vtkSmartPointer< vtkAlgorithm > m_VTKObject;
140
141       Parameters::Pointer m_Parameters;
142       ParametersQtDialog* m_ParametersDialog;
143       TInteractors        m_Interactors;
144       Plugins* m_Plugins;
145       bool m_Interactive;
146
147       typedef std::map< std::string, DataObject::Pointer > _TDataContainer;
148       _TDataContainer m_Inputs;
149       _TDataContainer m_Outputs;
150       std::map< std::string, std::string > m_OutputObjectsNames;
151     };
152
153     /**
154      * Plugin provider
155      */
156     CPPLUGINS_PROVIDER_HEADER( ProcessObject );
157
158   } // ecapseman
159
160 } // ecapseman
161
162 #include <cpPlugins/Interface/ProcessObject.hxx>
163
164 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
165
166 // eof - $RCSfile$