1 #include <cpPlugins/ProcessObject.h>
2 #include <cpPlugins/ParametersQtDialog.h>
3 #include <itkProcessObject.h>
5 // -------------------------------------------------------------------------
6 cpPlugins::Parameters* cpPlugins::ProcessObject::
9 return( &( this->m_Parameters ) );
12 // -------------------------------------------------------------------------
13 const cpPlugins::Parameters* cpPlugins::ProcessObject::
14 GetParameters( ) const
16 return( &( this->m_Parameters ) );
19 // -------------------------------------------------------------------------
20 void cpPlugins::ProcessObject::
21 SetITK( itk::LightObject* o )
23 // Polymorphism: do nothing -> this is a filter!!!
26 // -------------------------------------------------------------------------
27 void cpPlugins::ProcessObject::
28 SetVTK( vtkObjectBase* o )
30 // Polymorphism: do nothing -> this is a filter!!!
33 // -------------------------------------------------------------------------
34 std::set< std::string > cpPlugins::ProcessObject::
35 GetInputsNames( ) const
37 std::set< std::string > names;
38 for( auto i = this->m_Inputs.begin( ); i != this->m_Inputs.end( ); ++i )
39 names.insert( i->first );
43 // -------------------------------------------------------------------------
44 std::set< std::string > cpPlugins::ProcessObject::
45 GetOutputsNames( ) const
47 std::set< std::string > names;
48 for( auto i = this->m_Outputs.begin( ); i != this->m_Outputs.end( ); ++i )
49 names.insert( i->first );
53 // -------------------------------------------------------------------------
54 unsigned int cpPlugins::ProcessObject::
55 GetNumberOfInputs( ) const
57 return( this->m_Inputs.size( ) );
60 // -------------------------------------------------------------------------
61 unsigned int cpPlugins::ProcessObject::
62 GetNumberOfOutputs( ) const
64 return( this->m_Outputs.size( ) );
67 // -------------------------------------------------------------------------
69 OutputPort& cpPlugins::ProcessObject::
70 GetOutput( const std::string& id )
72 static OutputPort null_port;
73 auto i = this->m_Outputs.find( id );
74 if( i == this->m_Outputs.end( ) )
83 // -------------------------------------------------------------------------
85 OutputPort& cpPlugins::ProcessObject::
86 GetOutput( const std::string& id ) const
88 static const OutputPort null_port;
89 auto i = this->m_Outputs.find( id );
90 if( i == this->m_Outputs.end( ) )
96 // -------------------------------------------------------------------------
98 DataObject* cpPlugins::ProcessObject::
99 GetInputData( const std::string& id )
101 auto i = this->m_Inputs.find( id );
102 if( i != this->m_Inputs.end( ) )
103 return( dynamic_cast< DataObject* >( i->second.GetPointer( ) ) );
108 // -------------------------------------------------------------------------
110 DataObject* cpPlugins::ProcessObject::
111 GetInputData( const std::string& id ) const
113 auto i = this->m_Inputs.find( id );
114 if( i != this->m_Inputs.end( ) )
115 return( dynamic_cast< const DataObject* >( i->second.GetPointer( ) ) );
120 // -------------------------------------------------------------------------
122 DataObject* cpPlugins::ProcessObject::
123 GetOutputData( const std::string& id )
125 auto i = this->m_Outputs.find( id );
126 if( i != this->m_Outputs.end( ) )
127 return( dynamic_cast< DataObject* >( i->second.GetPointer( ) ) );
132 // -------------------------------------------------------------------------
134 DataObject* cpPlugins::ProcessObject::
135 GetOutputData( const std::string& id ) const
137 auto i = this->m_Outputs.find( id );
138 if( i != this->m_Outputs.end( ) )
139 return( dynamic_cast< const DataObject* >( i->second.GetPointer( ) ) );
144 // -------------------------------------------------------------------------
145 bool cpPlugins::ProcessObject::
146 SetInput( const std::string& id, const OutputPort& port )
148 auto i = this->m_Inputs.find( id );
149 if( i != this->m_Inputs.end( ) )
151 if( i->second.GetPointer( ) != port.GetPointer( ) )
163 // -------------------------------------------------------------------------
164 void cpPlugins::ProcessObject::
167 auto i = this->m_Inputs.begin( );
168 for( ; i != this->m_Inputs.end( ); ++i )
173 // -------------------------------------------------------------------------
174 void cpPlugins::ProcessObject::
177 auto i = this->m_Outputs.begin( );
178 for( ; i != this->m_Outputs.end( ); ++i )
179 if( i->second.IsValid( ) )
180 i->second->DisconnectFromPipeline( );
184 // -------------------------------------------------------------------------
185 void cpPlugins::ProcessObject::
188 this->DisconnectInputs( );
189 this->DisconnectOutputs( );
192 // -------------------------------------------------------------------------
193 itk::ModifiedTimeType cpPlugins::ProcessObject::
196 auto params_time = this->m_Parameters.GetMTime( );
197 auto filter_time = this->Superclass::GetMTime( );
198 return( ( params_time > filter_time )? params_time: filter_time );
201 // -------------------------------------------------------------------------
202 std::string cpPlugins::ProcessObject::
207 // Force upstream updates
208 auto i = this->m_Inputs.begin( );
209 bool need_to_update = false;
210 for( ; i != this->m_Inputs.end( ) && r == ""; ++i )
212 bool iv = i->second.IsValid( );
213 bool ir = i->second.IsRequired( );
216 "ProcessObject: Required input \"" +
217 i->first + "@" + this->GetClassName( ) +
218 "\" is not valid (=NULL).";
221 Self* src = dynamic_cast< Self* >( i->second->GetSource( ) );
224 need_to_update |= ( this->m_LastExecutionTime < src->GetMTime( ) );
236 if( this->m_LastExecutionTime < this->GetMTime( ) || need_to_update )
238 r = this->_GenerateData( );
239 this->m_LastExecutionTime = this->GetMTime( );
245 // Return error description, if any
249 // -------------------------------------------------------------------------
250 cpPlugins::ParametersQtDialog* cpPlugins::ProcessObject::
254 ParametersQtDialog* dlg = NULL;
255 if( QApplication::instance( ) != NULL )
257 dlg = new ParametersQtDialog( );
258 dlg->setProcessObject( this );
262 #else // cpPlugins_QT4
264 #endif // cpPlugins_QT4
267 // -------------------------------------------------------------------------
268 bool cpPlugins::ProcessObject::
274 // -------------------------------------------------------------------------
275 void cpPlugins::ProcessObject::
276 SetInteractionObjects( const std::vector< void* >& objs )
281 // -------------------------------------------------------------------------
282 cpPlugins::ProcessObject::
285 m_LastExecutionTime( 0 )
289 // -------------------------------------------------------------------------
290 cpPlugins::ProcessObject::
295 // -------------------------------------------------------------------------
296 void cpPlugins::ProcessObject::
297 _AddInput( const std::string& name, bool required )
299 auto i = this->m_Inputs.find( name );
300 if( i == this->m_Inputs.end( ) )
302 this->m_Inputs[ name ] = InputPort( required );