X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FProcessObject.cxx;h=72897d6729a615ca3368a85a62c434297e8063cf;hb=6ffc11d77924d6ab7e94db95d41105982ac73e00;hp=1128fe10444ab89c454748101ccfeec30da93e27;hpb=f69098bd941d8753926760dead2792584eb95f53;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/ProcessObject.cxx b/lib/cpPlugins/Interface/ProcessObject.cxx index 1128fe1..72897d6 100644 --- a/lib/cpPlugins/Interface/ProcessObject.cxx +++ b/lib/cpPlugins/Interface/ProcessObject.cxx @@ -7,6 +7,20 @@ #include #endif // cpPlugins_Interface_QT4 +// ------------------------------------------------------------------------- +void cpPlugins::Interface::ProcessObject:: +SetITK( itk::LightObject* o ) +{ + // Polymorphism: do nothing -> this is a filter!!! +} + +// ------------------------------------------------------------------------- +void cpPlugins::Interface::ProcessObject:: +SetVTK( vtkObjectBase* o ) +{ + // Polymorphism: do nothing -> this is a filter!!! +} + // ------------------------------------------------------------------------- std::set< std::string > cpPlugins::Interface::ProcessObject:: GetInputsNames( ) const @@ -43,10 +57,10 @@ GetNumberOfOutputs( ) const // ------------------------------------------------------------------------- cpPlugins::Interface:: -ProcessObjectPort& cpPlugins::Interface::ProcessObject:: +OutputProcessObjectPort& cpPlugins::Interface::ProcessObject:: GetOutput( const std::string& id ) { - static ProcessObjectPort null_port; + static OutputProcessObjectPort null_port; auto i = this->m_Outputs.find( id ); if( i == this->m_Outputs.end( ) ) { @@ -59,10 +73,10 @@ GetOutput( const std::string& id ) // ------------------------------------------------------------------------- const cpPlugins::Interface:: -ProcessObjectPort& cpPlugins::Interface::ProcessObject:: +OutputProcessObjectPort& cpPlugins::Interface::ProcessObject:: GetOutput( const std::string& id ) const { - static const ProcessObjectPort null_port; + static const OutputProcessObjectPort null_port; auto i = this->m_Outputs.find( id ); if( i == this->m_Outputs.end( ) ) return( null_port ); @@ -72,13 +86,17 @@ GetOutput( const std::string& id ) const // ------------------------------------------------------------------------- bool cpPlugins::Interface::ProcessObject:: -SetInput( const std::string& id, const ProcessObjectPort& port ) +SetInput( const std::string& id, const OutputProcessObjectPort& port ) { auto i = this->m_Inputs.find( id ); if( i != this->m_Inputs.end( ) ) { - i->second = port; - this->Modified( ); + if( i->second.GetPointer( ) != port.GetPointer( ) ) + { + i->second = port; + this->Modified( ); + + } // fi return( true ); } else @@ -102,7 +120,7 @@ DisconnectOutputs( ) auto i = this->m_Outputs.begin( ); for( ; i != this->m_Outputs.end( ); ++i ) if( i->second.IsValid( ) ) - i->second->DisconnectPipeline( ); + i->second->DisconnectFromPipeline( ); this->Modified( ); } @@ -120,31 +138,28 @@ GetMTime( ) const { auto params_time = this->m_Parameters->GetMTime( ); auto filter_time = this->Superclass::GetMTime( ); - auto ipobj = this->GetITK< itk::ProcessObject >( ); - if( ipobj == NULL ) - { - auto vpobj = this->GetVTK< vtkAlgorithm >( ); - if( vpobj != NULL ) - filter_time = ( const_cast< vtkAlgorithm* >( vpobj ) )->GetMTime( ); - } - else - filter_time = ipobj->GetMTime( ); - return( ( params_time < filter_time )? filter_time: params_time ); + return( ( params_time < filter_time )? params_time: filter_time ); } // ------------------------------------------------------------------------- std::string cpPlugins::Interface::ProcessObject:: Update( ) { - static std::string r = ""; // Force upstream updates - _TDataContainer::iterator i = this->m_Inputs.begin( ); + auto i = this->m_Inputs.begin( ); bool need_to_update = false; for( ; i != this->m_Inputs.end( ) && r == ""; ++i ) { - if( i->second.IsValid( ) ) + bool iv = i->second.IsValid( ); + bool ir = i->second.IsRequired( ); + if( !iv && ir ) + r = + "ProcessObject: Required input \"" + + i->first + "@" + this->GetClassName( ) + + "\" is not valid (=NULL)."; + if( iv && r == "" ) { Self* src = dynamic_cast< Self* >( i->second->GetSource( ) ); if( src != NULL ) @@ -153,9 +168,8 @@ Update( ) r = src->Update( ); } // fi - } - else - r = "cpPlugins::Interface::ProcessObject: No input connected."; + + } // fi } // rof @@ -207,12 +221,16 @@ cpPlugins::Interface::ProcessObject:: // ------------------------------------------------------------------------- void cpPlugins::Interface::ProcessObject:: -_AddInput( const std::string& name ) +_AddInput( const std::string& name, bool required ) { - typedef typename _TDataContainer::value_type _TValue; auto i = this->m_Inputs.find( name ); if( i == this->m_Inputs.end( ) ) - i = this->m_Inputs.insert( _TValue( name, NULL ) ).first; + { + InputProcessObjectPort new_port( required ); + this->m_Inputs[ name ] = new_port; + this->Modified( ); + + } // fi } // eof - $RCSfile$