]> 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 362cd762461234eeefcd53ae2e8300dda9db9829..4b2adc7db5c35e3fe962e37a7bdb1c5928d91774 100644 (file)
@@ -4,6 +4,7 @@
 #include <map>
 #include <string>
 #include <itkDataObject.h>
+#include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
 #include <cpPlugins/Interface/Object.h>
 
 namespace cpPlugins
@@ -14,7 +15,7 @@ namespace cpPlugins
 
     /**
      */
-    class ProcessObject
+    class cpPlugins_Interface_EXPORT ProcessObject
       : public Object
     {
     public:
@@ -42,10 +43,26 @@ namespace cpPlugins
       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:
@@ -53,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