#include #include #include // ------------------------------------------------------------------------- cpPlugins::Parameters* cpPlugins::ProcessObject:: GetParameters( ) { return( &( this->m_Parameters ) ); } // ------------------------------------------------------------------------- const cpPlugins::Parameters* cpPlugins::ProcessObject:: GetParameters( ) const { return( &( this->m_Parameters ) ); } // ------------------------------------------------------------------------- void cpPlugins::ProcessObject:: SetITK( itk::LightObject* o ) { // Polymorphism: do nothing -> this is a filter!!! } // ------------------------------------------------------------------------- void cpPlugins::ProcessObject:: SetVTK( vtkObjectBase* o ) { // Polymorphism: do nothing -> this is a filter!!! } // ------------------------------------------------------------------------- std::set< std::string > cpPlugins::ProcessObject:: GetInputsNames( ) const { std::set< std::string > names; for( auto i = this->m_Inputs.begin( ); i != this->m_Inputs.end( ); ++i ) names.insert( i->first ); return( names ); } // ------------------------------------------------------------------------- std::set< std::string > cpPlugins::ProcessObject:: GetOutputsNames( ) const { std::set< std::string > names; for( auto i = this->m_Outputs.begin( ); i != this->m_Outputs.end( ); ++i ) names.insert( i->first ); return( names ); } // ------------------------------------------------------------------------- unsigned int cpPlugins::ProcessObject:: GetNumberOfInputs( ) const { return( this->m_Inputs.size( ) ); } // ------------------------------------------------------------------------- unsigned int cpPlugins::ProcessObject:: GetNumberOfOutputs( ) const { return( this->m_Outputs.size( ) ); } // ------------------------------------------------------------------------- cpPlugins:: OutputPort& cpPlugins::ProcessObject:: GetOutput( const std::string& id ) { static OutputPort null_port; auto i = this->m_Outputs.find( id ); if( i == this->m_Outputs.end( ) ) { null_port = NULL; return( null_port ); } else return( i->second ); } // ------------------------------------------------------------------------- const cpPlugins:: OutputPort& cpPlugins::ProcessObject:: GetOutput( const std::string& id ) const { static const OutputPort null_port; auto i = this->m_Outputs.find( id ); if( i == this->m_Outputs.end( ) ) return( null_port ); else return( i->second ); } // ------------------------------------------------------------------------- cpPlugins:: DataObject* cpPlugins::ProcessObject:: GetInputData( const std::string& id ) { auto i = this->m_Inputs.find( id ); if( i != this->m_Inputs.end( ) ) return( dynamic_cast< DataObject* >( i->second.GetPointer( ) ) ); else return( NULL ); } // ------------------------------------------------------------------------- const cpPlugins:: DataObject* cpPlugins::ProcessObject:: GetInputData( const std::string& id ) const { auto i = this->m_Inputs.find( id ); if( i != this->m_Inputs.end( ) ) return( dynamic_cast< const DataObject* >( i->second.GetPointer( ) ) ); else return( NULL ); } // ------------------------------------------------------------------------- cpPlugins:: DataObject* cpPlugins::ProcessObject:: GetOutputData( const std::string& id ) { auto i = this->m_Outputs.find( id ); if( i != this->m_Outputs.end( ) ) return( dynamic_cast< DataObject* >( i->second.GetPointer( ) ) ); else return( NULL ); } // ------------------------------------------------------------------------- const cpPlugins:: DataObject* cpPlugins::ProcessObject:: GetOutputData( const std::string& id ) const { auto i = this->m_Outputs.find( id ); if( i != this->m_Outputs.end( ) ) return( dynamic_cast< const DataObject* >( i->second.GetPointer( ) ) ); else return( NULL ); } // ------------------------------------------------------------------------- bool cpPlugins::ProcessObject:: SetInput( const std::string& id, const OutputPort& port ) { auto i = this->m_Inputs.find( id ); if( i != this->m_Inputs.end( ) ) { if( i->second.GetPointer( ) != port.GetPointer( ) ) { i->second = port; this->Modified( ); } // fi return( true ); } else return( false ); } // ------------------------------------------------------------------------- void cpPlugins::ProcessObject:: DisconnectInputs( ) { auto i = this->m_Inputs.begin( ); for( ; i != this->m_Inputs.end( ); ++i ) i->second = NULL; this->Modified( ); } // ------------------------------------------------------------------------- void cpPlugins::ProcessObject:: DisconnectOutputs( ) { auto i = this->m_Outputs.begin( ); for( ; i != this->m_Outputs.end( ); ++i ) if( i->second.IsValid( ) ) i->second->DisconnectFromPipeline( ); this->Modified( ); } // ------------------------------------------------------------------------- void cpPlugins::ProcessObject:: Disconnect( ) { this->DisconnectInputs( ); this->DisconnectOutputs( ); } // ------------------------------------------------------------------------- itk::ModifiedTimeType cpPlugins::ProcessObject:: GetMTime( ) const { auto params_time = this->m_Parameters.GetMTime( ); auto filter_time = this->Superclass::GetMTime( ); return( ( params_time < filter_time )? params_time: filter_time ); } // ------------------------------------------------------------------------- std::string cpPlugins::ProcessObject:: Update( ) { std::string r = ""; // Force upstream updates auto i = this->m_Inputs.begin( ); bool need_to_update = false; for( ; i != this->m_Inputs.end( ) && r == ""; ++i ) { 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 ) { need_to_update |= ( this->m_LastExecutionTime < src->GetMTime( ) ); r = src->Update( ); } // fi } // fi } // rof // Current update if( r == "" ) { if( this->m_LastExecutionTime < this->GetMTime( ) || need_to_update ) { r = this->_GenerateData( ); this->m_LastExecutionTime = this->GetMTime( ); } // fi } // fi // Return error description, if any return( r ); } // ------------------------------------------------------------------------- cpPlugins::ParametersQtDialog* cpPlugins::ProcessObject:: CreateQtDialog( ) { #ifdef cpPlugins_QT4 ParametersQtDialog* dlg = NULL; if( QApplication::instance( ) != NULL ) { dlg = new ParametersQtDialog( ); dlg->setProcessObject( this ); } // fi return( dlg ); #else // cpPlugins_QT4 return( NULL ); #endif // cpPlugins_QT4 } // ------------------------------------------------------------------------- cpPlugins::ProcessObject:: ProcessObject( ) : Superclass( ), m_LastExecutionTime( 0 ) { } // ------------------------------------------------------------------------- cpPlugins::ProcessObject:: ~ProcessObject( ) { } // ------------------------------------------------------------------------- void cpPlugins::ProcessObject:: _AddInput( const std::string& name, bool required ) { auto i = this->m_Inputs.find( name ); if( i == this->m_Inputs.end( ) ) { this->m_Inputs[ name ] = InputPort( required ); this->Modified( ); } // fi } // eof - $RCSfile$