#ifndef __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__ #define __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__ #include #include #include #include #include #include // Some forward declarations class vtkRenderWindowInteractor; #ifdef cpPlugins_Interface_QT4 class QWidget; #else typedef char QWidget; #endif // cpPlugins_Interface_QT4 namespace cpPlugins { namespace Interface { // Some forward declarations class Plugins; #ifdef cpPlugins_Interface_QT4 class ParametersQtDialog; #else typedef char ParametersQtDialog; #endif // cpPlugins_Interface_QT4 /** */ class cpPlugins_Interface_EXPORT ProcessObject : public Object { public: typedef ProcessObject Self; typedef Object Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef Parameters TParameters; typedef std::set< vtkRenderWindowInteractor* > TInteractors; enum DialogResult { DialogResult_NoModal = 0, DialogResult_Modal, DialogResult_Cancel }; public: itkTypeMacro( ProcessObject, Object ); cpPlugins_Id_Macro( ProcessObject, "BaseObject" ); itkBooleanMacro( Interactive ); itkGetConstObjectMacro( Parameters, TParameters ); itkGetObjectMacro( Parameters, TParameters ); itkGetConstMacro( Plugins, const Plugins* ); itkGetMacro( Plugins, Plugins* ); itkGetConstMacro( Interactive, bool ); itkSetObjectMacro( Plugins, Plugins ); itkSetMacro( Interactive, bool ); public: // To impact pipeline virtual void Modified( ) const; virtual void GetInputsNames( std::set< std::string >& names ) const; virtual void GetOutputsNames( std::set< std::string >& names ) const; virtual bool SetOutputObjectName( const std::string& new_object_name, const std::string& output_name ); virtual void SetInput( const std::string& id, DataObject* dobj ); virtual std::string Update( ); virtual void DisconnectOutputs( ); virtual void AddInteractor( vtkRenderWindowInteractor* interactor ); virtual DialogResult ExecConfigurationDialog( QWidget* parent ); template< class T > inline T* GetITK( ); template< class T > inline const T* GetITK( ) const; template< class T > inline T* GetVTK( ); template< class T > inline const T* GetVTK( ) const; template< class T > inline T* GetInput( const std::string& id ); template< class T > inline const T* GetInput( const std::string& id ) const; template< class T > inline T* GetOutput( const std::string& id ); template< class T > inline const T* GetOutput( const std::string& id ) const; protected: ProcessObject( ); virtual ~ProcessObject( ); virtual void _AddInput( const std::string& name ); template< class F > inline F* _CreateITK( ); template< class F > inline F* _CreateVTK( ); template< class O > inline void _MakeOutput( const std::string& id ); virtual std::string _GenerateData( ) = 0; private: // Purposely not implemented ProcessObject( const Self& ); Self& operator=( const Self& ); protected: itk::ProcessObject::Pointer m_ITKObject; vtkSmartPointer< vtkAlgorithm > m_VTKObject; Parameters::Pointer m_Parameters; ParametersQtDialog* m_ParametersDialog; TInteractors m_Interactors; Plugins* m_Plugins; bool m_Interactive; typedef std::map< std::string, DataObject::Pointer > _TDataContainer; _TDataContainer m_Inputs; _TDataContainer m_Outputs; std::map< std::string, std::string > m_OutputObjectsNames; }; /** * Plugin provider */ CPPLUGINS_PROVIDER_HEADER( ProcessObject ); } // ecapseman } // ecapseman #include #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__ // eof - $RCSfile$