]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/ProcessObject.h
3381fa818e77c4685f54286c31253c545865b7ff
[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 #include <cpPlugins/Interface/Object.h>
6 #include <cpPlugins/Interface/DataObject.h>
7 #include <cpPlugins/Interface/Parameters.h>
8
9 #include <itkProcessObject.h>
10
11 namespace cpPlugins
12 {
13   namespace Interface
14   {
15     /**
16      */
17     class cpPlugins_Interface_EXPORT ProcessObject
18       : public Object
19     {
20     public:
21       typedef ProcessObject                   Self;
22       typedef Object                          Superclass;
23       typedef itk::SmartPointer< Self >       Pointer;
24       typedef itk::SmartPointer< const Self > ConstPointer;
25
26     public:
27       itkTypeMacro( ProcessObject, Object );
28
29     public:
30       virtual const Parameters& GetDefaultParameters( ) const;
31       virtual void SetParameters( const Parameters& params );
32
33       virtual unsigned int GetNumberOfInputs( ) const;
34       virtual unsigned int GetNumberOfOutputs( ) const;
35
36       virtual void SetNumberOfInputs( unsigned int n );
37       virtual void SetNumberOfOutputs( unsigned int n );
38
39       virtual void SetInput( unsigned int idx, DataObject* dobj );
40       virtual DataObject* GetOutput( unsigned int idx );
41
42       virtual std::string Update( );
43       virtual void DisconnectOutputs( );
44
45     protected:
46       ProcessObject( );
47       virtual ~ProcessObject( );
48
49       template< class O >
50         inline void _MakeOutput( unsigned int idx );
51
52       template< class T >
53         inline T* _Input( unsigned int idx );
54
55       template< class T >
56         inline const T* _Input( unsigned int idx ) const;
57
58       template< class T >
59         inline T* _Output( unsigned int idx );
60
61       template< class T >
62         inline const T* _Output( unsigned int idx ) const;
63
64       virtual std::string _GenerateData( ) = 0;
65
66     private:
67       // Purposely not implemented
68       ProcessObject( const Self& );
69       Self& operator=( const Self& );
70
71     protected:
72       itk::ProcessObject::Pointer m_RealProcessObject;
73       Parameters m_DefaultParameters;
74       Parameters m_Parameters;
75
76       std::vector< DataObject::Pointer > m_Inputs;
77       std::vector< DataObject::Pointer > m_Outputs;
78     };
79
80   } // ecapseman
81
82 } // ecapseman
83
84 #include <cpPlugins/Interface/ProcessObject.hxx>
85
86 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
87
88 // eof - $RCSfile$