1 #ifndef __CPPLUGINS__PROCESSOBJECT__H__
2 #define __CPPLUGINS__PROCESSOBJECT__H__
6 #include <cpPlugins/Object.h>
7 #include <cpPlugins/Parameters.h>
8 #include <cpPlugins/Port.h>
16 class cpPlugins_EXPORT ProcessObject
20 typedef ProcessObject Self;
21 typedef Object Superclass;
22 typedef itk::SmartPointer< Self > Pointer;
23 typedef itk::SmartPointer< const Self > ConstPointer;
26 itkTypeMacro( ProcessObject, Object );
27 cpPlugins_Id_Macro( ProcessObject, Object );
29 itkBooleanMacro( ExplicitReExecution );
30 itkBooleanMacro( PrintExecution );
32 itkGetStringMacro( Name );
33 itkGetStringMacro( PluginName );
34 itkGetConstMacro( ExplicitReExecution, bool );
35 itkGetConstMacro( CouldHaveExplicitReExecution, bool );
36 itkGetConstMacro( LastExecutionSpan, long );
37 itkGetConstMacro( PrintExecution, bool );
39 itkSetStringMacro( Name );
40 itkSetStringMacro( PluginName );
41 itkSetMacro( ExplicitReExecution, bool );
42 itkSetMacro( PrintExecution, bool );
43 itkSetObjectMacro( PrintExecutionStream, std::ofstream );
46 Parameters* GetParameters( );
47 const Parameters* GetParameters( ) const;
49 virtual void SetITK( itk::LightObject* o ) final;
50 virtual void SetVTK( vtkObjectBase* o ) final;
53 std::set< std::string > GetInputsNames( ) const;
54 std::set< std::string > GetOutputsNames( ) const;
55 unsigned int GetNumberOfInputs( ) const;
56 unsigned int GetNumberOfOutputs( ) const;
58 OutputPort& GetOutputPort( const std::string& id );
59 const OutputPort& GetOutputPort( const std::string& id ) const;
61 template< class _TType = DataObject >
62 inline _TType* GetInput( const std::string& id );
64 template< class _TType = DataObject >
65 inline const _TType* GetInput( const std::string& id ) const;
67 template< class _TType = DataObject >
68 inline _TType* GetOutput( const std::string& id );
70 template< class _TType = DataObject >
71 inline const _TType* GetOutput( const std::string& id ) const;
73 template< class _TType = itk::LightObject >
74 inline _TType* GetInputData( const std::string& name );
76 template< class _TType = itk::LightObject >
77 inline _TType* GetOutputData( const std::string& name );
79 bool SetInputPort( const std::string& id, const OutputPort& port );
81 template< class _TType >
82 inline bool SetInput( const std::string& id, _TType* obj );
84 void DisconnectInputs( );
85 void DisconnectOutputs( );
89 virtual void Modified( ) const ITK_OVERRIDE;
90 virtual itk::ModifiedTimeType GetMTime( ) const ITK_OVERRIDE;
91 virtual void Update( );
94 virtual QDialog* CreateQDialog( );
95 virtual bool IsInteractive( );
96 virtual void SetInteractionObjects( const std::vector< void* >& objs );
100 virtual ~ProcessObject( );
102 void _AddInput( const std::string& name, bool required = true );
103 void _Error( const std::string& error );
106 inline void _AddOutput( const std::string& name );
109 inline F* _CreateITK( );
111 inline F* _CreateVTK( );
113 virtual void _GenerateData( ) = 0;
116 // Purposely not implemented
117 ProcessObject( const Self& );
118 Self& operator=( const Self& );
121 Parameters m_Parameters;
123 std::string m_PluginName;
124 bool m_CouldHaveExplicitReExecution;
125 bool m_ExplicitReExecution;
127 typedef std::map< std::string, InputPort > _TInputs;
128 typedef std::map< std::string, OutputPort > _TOutputs;
132 itk::ModifiedTimeType m_LastExecutionTime;
133 mutable long m_LastExecutionSpan;
135 bool m_PrintExecution;
136 std::ostream* m_PrintExecutionStream;
141 #include <cpPlugins/ProcessObject.hxx>
143 #endif // __CPPLUGINS__PROCESSOBJECT__H__