]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Interface/ProcessObject.h
Integration of new functionalities into ProcessObject and DataObject
[cpPlugins.git] / lib / cpPlugins / Interface / ProcessObject.h
index 31379136eeb73f5d519420f9e8795c38593629ed..4b2adc7db5c35e3fe962e37a7bdb1c5928d91774 100644 (file)
@@ -3,6 +3,8 @@
 
 #include <map>
 #include <string>
+#include <itkDataObject.h>
+#include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
 #include <cpPlugins/Interface/Object.h>
 
 namespace cpPlugins
@@ -13,7 +15,7 @@ namespace cpPlugins
 
     /**
      */
-    class ProcessObject
+    class cpPlugins_Interface_EXPORT ProcessObject
       : public Object
     {
     public:
@@ -34,12 +36,33 @@ namespace cpPlugins
       virtual unsigned int GetNumberOfInputs( ) const;
       virtual unsigned int GetNumberOfOutputs( ) const;
 
+      virtual void SetNumberOfInputs( unsigned int n );
+      virtual void SetNumberOfOutputs( unsigned int n );
+
       virtual void SetInput( unsigned int idx, const DataObject* dobj );
-      virtual DataObject* GetOutput( unsigned int idx ) const;
+      virtual DataObject* GetOutput( unsigned int idx );
 
       virtual std::string Update( );
+      virtual void DisconnectOutputs( );
 
     protected:
+      virtual itk::DataObject* _GetInput( unsigned int idx );
+      virtual void _SetOutput( unsigned int idx, itk::DataObject* dobj );
+      virtual void _DeleteOutputs( );
+
+      template< class O >
+        void _MakeOutput( unsigned int idx )
+      {
+        if( idx >= this->m_Outputs.size( ) )
+          return;
+        
+        if( !( this->m_OutputsDisconnected ) )
+          if( this->m_Outputs[ idx ] != NULL )
+            delete this->m_Outputs[ idx ];
+
+        this->m_Outputs[ idx ] = new O( );
+      }
+
       virtual std::string _GenerateData( ) = 0;
 
     protected:
@@ -47,7 +70,8 @@ namespace cpPlugins
       TParameters m_Parameters;
 
       std::vector< const DataObject* > m_Inputs;
-      std::vector< DataObject* > m_Outputs;
+      std::vector< DataObject* >       m_Outputs;
+      bool m_OutputsDisconnected;
     };
 
   } // ecapseman