]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/ProcessObject.h
b0a6a71162901fd8f29f6408b9baf1cbeb7475ba
[cpPlugins.git] / lib / cpPlugins / ProcessObject.h
1 #ifndef __CPPLUGINS__PROCESSOBJECT__H__
2 #define __CPPLUGINS__PROCESSOBJECT__H__
3
4 #include <map>
5 #include <set>
6 #include <cpPlugins/Object.h>
7 #include <cpPlugins/Parameters.h>
8 #include <cpPlugins/Port.h>
9
10 namespace cpPlugins
11 {
12   /**
13    */
14   class cpPlugins_EXPORT ProcessObject
15     : public Object
16   {
17   public:
18     typedef ProcessObject                   Self;
19     typedef Object                          Superclass;
20     typedef itk::SmartPointer< Self >       Pointer;
21     typedef itk::SmartPointer< const Self > ConstPointer;
22
23   public:
24     itkTypeMacro( ProcessObject, Object );
25     cpPlugins_Id_Macro( ProcessObject, Object );
26
27   public:
28     Parameters* GetParameters( );
29     const Parameters* GetParameters( ) const;
30
31     virtual void SetITK( itk::LightObject* o ) final;
32     virtual void SetVTK( vtkObjectBase* o ) final;
33
34     // IO management
35     std::set< std::string > GetInputsNames( ) const;
36     std::set< std::string > GetOutputsNames( ) const;
37     unsigned int GetNumberOfInputs( ) const;
38     unsigned int GetNumberOfOutputs( ) const;
39
40     OutputPort& GetOutput( const std::string& id );
41     const OutputPort& GetOutput( const std::string& id ) const;
42
43     DataObject* GetInputData( const std::string& id );
44     const DataObject* GetInputData( const std::string& id ) const;
45     DataObject* GetOutputData( const std::string& id );
46     const DataObject* GetOutputData( const std::string& id ) const;
47
48     bool SetInput( const std::string& id, const OutputPort& port );
49
50     void DisconnectInputs( );
51     void DisconnectOutputs( );
52     void Disconnect( );
53
54     // Pipeline execution
55     virtual itk::ModifiedTimeType GetMTime( ) const ITK_OVERRIDE;
56     virtual std::string Update( );
57
58     // Qt dialog creation
59     virtual ParametersQtDialog* CreateQtDialog( );
60     virtual bool IsInteractive( );
61     virtual void SetInteractionObjects( const std::vector< void* >& objs );
62
63   protected:
64     ProcessObject( );
65     virtual ~ProcessObject( );
66
67     void _AddInput( const std::string& name, bool required = true );
68
69     template< class O >
70       inline void _AddOutput( const std::string& name );
71
72     template< class F >
73       inline F* _CreateITK( );
74     template< class F >
75       inline F* _CreateVTK( );
76
77     virtual std::string _GenerateData( ) = 0;
78
79   private:
80     // Purposely not implemented
81     ProcessObject( const Self& );
82     Self& operator=( const Self& );
83
84   protected:
85     Parameters m_Parameters;
86
87     typedef std::map< std::string, InputPort >  _TInputs;
88     typedef std::map< std::string, OutputPort > _TOutputs;
89     _TInputs  m_Inputs;
90     _TOutputs m_Outputs;
91
92     itk::ModifiedTimeType m_LastExecutionTime;
93     long m_LastExecutionSpan;
94   };
95
96 } // ecapseman
97
98 #include <cpPlugins/ProcessObject.hxx>
99
100 #endif // __CPPLUGINS__PROCESSOBJECT__H__
101
102 // eof - $RCSfile$