1 #ifndef __cpPlugins__BaseObjects__ProcessObject__h__
2 #define __cpPlugins__BaseObjects__ProcessObject__h__
4 #include <cpPlugins/BaseObjects/Object.h>
5 #include <cpPlugins/BaseObjects/Parameters.h>
6 #include <cpPlugins/BaseObjects/Port.h>
9 // -------------------------------------------------------------------------
11 class vtkRenderWindowInteractor;
13 // -------------------------------------------------------------------------
20 class cpPlugins_EXPORT ProcessObject
24 typedef ProcessObject Self;
25 typedef Object Superclass;
26 typedef itk::SmartPointer< Self > Pointer;
27 typedef itk::SmartPointer< const Self > ConstPointer;
30 itkTypeMacro( ProcessObject, Object );
31 cpPlugins_Id_Macro( ProcessObject, Object );
33 itkBooleanMacro( ExplicitExecution );
34 itkBooleanMacro( PrintExecution );
36 itkGetStringMacro( Name );
37 itkGetStringMacro( PluginName );
38 itkGetConstMacro( ExplicitExecution, bool );
39 itkGetConstMacro( LastExecutionSpan, long );
40 itkGetConstMacro( PrintExecution, bool );
42 itkSetStringMacro( Name );
43 itkSetStringMacro( PluginName );
44 itkSetMacro( ExplicitExecution, bool );
45 itkSetMacro( PrintExecution, bool );
46 itkSetObjectMacro( PrintExecutionStream, std::ofstream );
49 Parameters* GetParameters( );
50 const Parameters* GetParameters( ) const;
52 virtual void SetITK( itk::LightObject* o ) final;
53 virtual void SetVTK( vtkObjectBase* o ) final;
56 std::set< std::string > GetInputsNames( ) const;
57 std::set< std::string > GetOutputsNames( ) const;
58 bool HasInput( const std::string& n ) const;
59 bool HasOutput( const std::string& n ) const;
61 unsigned int GetNumberOfInputs( ) const;
62 unsigned int GetNumberOfOutputs( ) const;
63 unsigned int GetInputSize( const std::string& n ) const;
64 bool IsInputMultiple( const std::string& n ) const;
66 template< class _TType = DataObject >
67 inline _TType* GetInput( const std::string& n, unsigned int i = 0 );
69 template< class _TType = DataObject >
70 inline const _TType* GetInput(
71 const std::string& n, unsigned int i = 0
74 template< class _TType = itk::LightObject >
75 inline _TType* GetInputData( const std::string& n, unsigned int i = 0 );
77 template< class _TType = itk::LightObject >
78 inline const _TType* GetInputData(
79 const std::string& n, unsigned int i = 0
82 template< class _TType = DataObject >
83 inline _TType* GetOutput( const std::string& n );
85 template< class _TType = DataObject >
86 inline const _TType* GetOutput( const std::string& n ) const;
88 template< class _TType = itk::LightObject >
89 inline _TType* GetOutputData( const std::string& n );
91 template< class _TType = itk::LightObject >
92 inline const _TType* GetOutputData( const std::string& n ) const;
95 virtual void AddInput( const std::string& n, DataObject* o );
96 virtual void SetInput( const std::string& n, DataObject* o );
98 // Other interesting methods
99 void DisconnectInput( const std::string& n, unsigned int id );
100 void DisconnectInputs( );
101 void DisconnectOutputs( );
104 // Pipeline execution
105 virtual void Modified( ) const cpPlugins_OVERRIDE;
106 virtual void Update( );
108 // Qt dialog creation
109 virtual QDialog* CreateQDialog( );
110 virtual void AddInteractor( vtkRenderWindowInteractor* i );
111 virtual bool IsInteractive( );
115 virtual ~ProcessObject( );
117 // Error handling method
118 void _Error( const std::string& error );
120 // For configuration purposes
121 template< class _TType = DataObject >
122 inline void _ConfigureInput(
123 const std::string& name, bool required, bool multiple
126 template< class _TType = DataObject >
127 inline void _ConfigureOutput( const std::string& name );
129 template< class _TFilter >
130 inline _TFilter* _CreateITK( );
132 template< class _TFilter >
133 inline _TFilter* _CreateVTK( );
135 virtual void _GenerateData( ) = 0;
138 // Purposely not implemented
139 ProcessObject( const Self& );
140 Self& operator=( const Self& );
143 Parameters m_Parameters;
145 std::string m_PluginName;
146 bool m_ExplicitExecution;
148 std::map< std::string, Port* > m_Inputs;
149 std::map< std::string, Port* > m_Outputs;
151 itk::ModifiedTimeType m_LastExecutionTime;
152 mutable long m_LastExecutionSpan;
154 bool m_PrintExecution;
155 std::ostream* m_PrintExecutionStream;
162 #include <cpPlugins/BaseObjects/ProcessObject.hxx>
164 #endif // __cpPlugins__BaseObjects__ProcessObject__h__