]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/ProcessObject.h
Major refactoring: API-HCI bug corrected.
[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 #define ITK_MANUAL_INSTANTIATION
10 #include <itkProcessObject.h>
11
12 namespace cpPlugins
13 {
14   namespace Interface
15   {
16     /**
17      */
18     class cpPlugins_Interface_EXPORT ProcessObject
19       : public Object
20     {
21     public:
22       typedef ProcessObject                   Self;
23       typedef Object                          Superclass;
24       typedef itk::SmartPointer< Self >       Pointer;
25       typedef itk::SmartPointer< const Self > ConstPointer;
26
27     public:
28       itkTypeMacro( ProcessObject, Object );
29
30     public:
31       virtual const Parameters& GetDefaultParameters( ) const;
32       virtual void SetParameters( const Parameters& params );
33
34       virtual unsigned int GetNumberOfInputs( ) const;
35       virtual unsigned int GetNumberOfOutputs( ) const;
36
37       virtual void SetNumberOfInputs( unsigned int n );
38       virtual void SetNumberOfOutputs( unsigned int n );
39
40       virtual void SetInput( unsigned int idx, DataObject* dobj );
41       virtual DataObject* GetOutput( unsigned int idx );
42
43       virtual std::string Update( );
44       virtual void DisconnectOutputs( );
45
46     protected:
47       ProcessObject( );
48       virtual ~ProcessObject( );
49
50       /* TODO
51          virtual itk::DataObject* _GetInput( unsigned int idx );
52          virtual void _SetOutput( unsigned int idx, itk::DataObject* dobj );
53       */
54
55       template< class O >
56         void _MakeOutput( unsigned int idx )
57       {
58         if( idx >= this->m_Outputs.size( ) )
59           return;
60         this->m_Outputs[ idx ] = O::New( );
61         this->m_Outputs[ idx ]->SetSource( this );
62       }
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 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
85
86 // eof - $RCSfile$