]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/ProcessObject.h
This does not compile yet: updating plugins interface and transparency of image actors
[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
46       enum DialogResult
47       {
48         DialogResult_NoModal = 0,
49         DialogResult_Modal,
50         DialogResult_Cancel
51       };
52
53     public:
54       itkTypeMacro( ProcessObject, Object );
55       cpPlugins_Id_Macro( ProcessObject, "BaseObject" );
56
57       itkBooleanMacro( Interactive );
58
59       itkGetConstObjectMacro( Parameters, TParameters );
60       itkGetObjectMacro( Parameters, TParameters );
61       itkGetConstMacro( Plugins, const Plugins* );
62       itkGetMacro( Plugins, Plugins* );
63       itkGetConstMacro( Interactive, bool );
64
65       itkSetObjectMacro( Plugins, Plugins );
66       itkSetMacro( Interactive, bool );
67
68     public:
69       // To impact pipeline
70       virtual void Modified( ) const;
71
72       virtual void GetInputsNames( std::set< std::string >& names ) const;
73       virtual void GetOutputsNames( std::set< std::string >& names ) const;
74
75       virtual bool SetOutputObjectName(
76         const std::string& new_object_name,
77         const std::string& output_name
78         );
79
80       virtual void SetInput( const std::string& id, DataObject* dobj );
81
82       virtual std::string Update( );
83       virtual void DisconnectOutputs( );
84
85       virtual void AddInteractor( vtkRenderWindowInteractor* interactor );
86       virtual DialogResult ExecConfigurationDialog( QWidget* parent );
87
88       template< class T >
89         inline T* GetITK( );
90
91       template< class T >
92         inline const T* GetITK( ) const;
93
94       template< class T >
95         inline T* GetVTK( );
96
97       template< class T >
98         inline const T* GetVTK( ) const;
99
100       template< class T >
101         inline T* GetInput( const std::string& id );
102
103       template< class T >
104         inline const T* GetInput( const std::string& id ) const;
105
106       template< class T >
107         inline T* GetOutput( const std::string& id );
108
109       template< class T >
110         inline const T* GetOutput( const std::string& id ) const;
111
112     protected:
113       ProcessObject( );
114       virtual ~ProcessObject( );
115
116       virtual void _AddInput( const std::string& name );
117
118       template< class F >
119         inline F* _CreateITK( );
120
121       template< class F >
122         inline F* _CreateVTK( );
123
124       template< class O >
125         inline void _MakeOutput( const std::string& id );
126
127       virtual std::string _GenerateData( ) = 0;
128
129     private:
130       // Purposely not implemented
131       ProcessObject( const Self& );
132       Self& operator=( const Self& );
133
134     protected:
135       itk::ProcessObject::Pointer     m_ITKObject;
136       vtkSmartPointer< vtkAlgorithm > m_VTKObject;
137
138       Parameters::Pointer m_Parameters;
139       ParametersQtDialog* m_ParametersDialog;
140       Plugins* m_Plugins;
141       bool m_Interactive;
142
143       typedef std::map< std::string, DataObject::Pointer > _TDataContainer;
144       _TDataContainer m_Inputs;
145       _TDataContainer m_Outputs;
146       std::map< std::string, std::string > m_OutputObjectsNames;
147     };
148
149     /**
150      * Plugin provider
151      */
152     CPPLUGINS_PROVIDER_HEADER( ProcessObject );
153
154   } // ecapseman
155
156 } // ecapseman
157
158 #include <cpPlugins/Interface/ProcessObject.hxx>
159
160 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
161
162 // eof - $RCSfile$