]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/ProcessObject.cxx
f2499c212f1e28cc05e067a3f451c3309e96f8c8
[cpPlugins.git] / lib / cpPlugins / Interface / ProcessObject.cxx
1 #include <cpPlugins/Interface/ProcessObject.h>
2
3 // -------------------------------------------------------------------------
4 cpPlugins::Interface::ProcessObject::
5 ProcessObject( )
6   : Superclass( ),
7     m_OutputsDisconnected( false )
8 {
9 }
10
11 // -------------------------------------------------------------------------
12 cpPlugins::Interface::ProcessObject::
13 ~ProcessObject( )
14 {
15   this->_DeleteOutputs( );
16 }
17
18 // -------------------------------------------------------------------------
19 std::string cpPlugins::Interface::ProcessObject::
20 GetClassName( ) const
21 {
22   return( "cpPlugins::Interface::ProcessObject" );
23 }
24
25 // -------------------------------------------------------------------------
26 const cpPlugins::Interface::ProcessObject::
27 TParameters& cpPlugins::Interface::ProcessObject::
28 GetDefaultParameters( ) const
29 {
30   return( this->m_DefaultParameters );
31 }
32
33 // -------------------------------------------------------------------------
34 void cpPlugins::Interface::ProcessObject::
35 SetParameters( const TParameters& params )
36 {
37   this->m_Parameters = params;
38 }
39
40 // -------------------------------------------------------------------------
41 unsigned int cpPlugins::Interface::ProcessObject::
42 GetNumberOfInputs( ) const
43 {
44   return( this->m_Inputs.size( ) );
45 }
46
47 // -------------------------------------------------------------------------
48 unsigned int cpPlugins::Interface::ProcessObject::
49 GetNumberOfOutputs( ) const
50 {
51   return( this->m_Outputs.size( ) );
52 }
53
54 // -------------------------------------------------------------------------
55 void cpPlugins::Interface::ProcessObject::
56 SetNumberOfInputs( unsigned int n )
57 {
58   this->m_Inputs.clear( );
59   this->m_Inputs.resize( n, NULL );
60 }
61
62 // -------------------------------------------------------------------------
63 void cpPlugins::Interface::ProcessObject::
64 SetNumberOfOutputs( unsigned int n )
65 {
66   this->_DeleteOutputs( );
67   this->m_Outputs.clear( );
68   this->m_Outputs.resize( n, NULL );
69   this->m_OutputsDisconnected = false;
70 }
71
72 // -------------------------------------------------------------------------
73 void cpPlugins::Interface::ProcessObject::
74 SetInput(
75   unsigned int idx, const cpPlugins::Interface::DataObject* dobj
76   )
77 {
78   if( idx < this->m_Inputs.size( ) )
79     this->m_Inputs[ idx ] = dobj;
80 }
81
82 // -------------------------------------------------------------------------
83 cpPlugins::Interface::DataObject* cpPlugins::Interface::ProcessObject::
84 GetOutput( unsigned int idx )
85 {
86   if( idx < this->m_Outputs.size( ) )
87     return( this->m_Outputs[ idx ] );
88   else
89     return( NULL );
90 }
91
92 // -------------------------------------------------------------------------
93 std::string cpPlugins::Interface::ProcessObject::
94 Update( )
95 {
96   // Force upstream updates
97   std::string r = "";
98   for( unsigned int i = 0; i < this->m_Inputs.size( ) && r == ""; ++i )
99     r = this->m_Inputs[ i ]->GetSource( )->Update( );
100
101   // Current update
102   if( r == "" )
103   {
104     r = this->_GenerateData( );
105     this->m_OutputsDisconnected = false;
106
107   } // fi
108
109   // Return error description, if any
110   return( r );
111 }
112
113 // -------------------------------------------------------------------------
114 void cpPlugins::Interface::ProcessObject::
115 DisconnectOutputs( )
116 {
117   this->m_OutputsDisconnected = true;
118   for( unsigned int idx = 0; idx < this->m_Outputs.size( ); ++idx )
119     if( this->m_Outputs[ idx ] != NULL )
120       this->m_Outputs[ idx ]->GetDataObject( )->DisconnectPipeline( );
121 }
122
123 // -------------------------------------------------------------------------
124 itk::DataObject* cpPlugins::Interface::ProcessObject::
125 _GetInput( unsigned int idx )
126 {
127   if( idx < this->m_Inputs.size( ) )
128     return( this->m_Inputs[ idx ]->GetDataObject( ) );
129   else
130     return( NULL );
131 }
132
133 // -------------------------------------------------------------------------
134 void cpPlugins::Interface::ProcessObject::
135 _SetOutput( unsigned int idx, itk::DataObject* dobj )
136 {
137   if( idx < this->m_Outputs.size( ) )
138     if( this->m_Outputs[ idx ] != NULL )
139       this->m_Outputs[ idx ]->SetDataObject( dobj );
140 }
141
142 // -------------------------------------------------------------------------
143 void cpPlugins::Interface::ProcessObject::
144 _DeleteOutputs( )
145 {
146   if( !( this->m_OutputsDisconnected ) )
147     for( unsigned int idx = 0; idx < this->m_Outputs.size( ); ++idx )
148       if( this->m_Outputs[ idx ] != NULL )
149         delete this->m_Outputs[ idx ];
150 }
151
152 // eof - $RCSfile$