#ifndef __cpPlugins__Pipeline__ProcessObject__hxx__ #define __cpPlugins__Pipeline__ProcessObject__hxx__ // ------------------------------------------------------------------------- template< class _TType > _TType* cpPlugins::Pipeline::ProcessObject:: GetInput( const std::string& n, unsigned int i ) { auto it = this->m_Inputs.find( n ); if( it != this->m_Inputs.end( ) ) return( dynamic_cast< _TType* >( it->second->Get( i ) ) ); else return( NULL ); } // ------------------------------------------------------------------------- template< class _TType > const _TType* cpPlugins::Pipeline::ProcessObject:: GetInput( const std::string& n, unsigned int i ) const { auto it = this->m_Inputs.find( n ); if( it != this->m_Inputs.end( ) ) return( dynamic_cast< const _TType* >( it->second->Get( i ) ) ); else return( NULL ); } // ------------------------------------------------------------------------- template< class _TType > _TType* cpPlugins::Pipeline::ProcessObject:: GetInputData( const std::string& n, unsigned int i ) { auto d = this->GetInput( n, i ); if( d != NULL ) { auto oi = d->m_ITK.GetPointer( ); auto ov = d->m_VTK.GetPointer( ); if( oi != NULL && ov != NULL ) { auto di = dynamic_cast< _TType* >( oi ); auto dv = dynamic_cast< _TType* >( ov ); if ( di != NULL ) return( di ); else if( dv != NULL ) return( dv ); else return( NULL ); } else if( oi != NULL && ov == NULL ) { auto di = dynamic_cast< _TType* >( oi ); if( di == NULL ) return( d->GetVTK< _TType >( ) ); else return( di ); } else if( oi == NULL && ov != NULL ) { auto dv = dynamic_cast< _TType* >( ov ); if( dv == NULL ) return( d->GetITK< _TType >( ) ); else return( dv ); } else return( NULL ); } else return( NULL ); } // ------------------------------------------------------------------------- template< class _TType > const _TType* cpPlugins::Pipeline::ProcessObject:: GetInputData( const std::string& n, unsigned int i ) const { auto d = this->GetInput( n, i ); if( d != NULL ) { auto oi = d->m_ITK.GetPointer( ); auto ov = d->m_VTK.GetPointer( ); if( oi != NULL && ov != NULL ) { auto di = dynamic_cast< const _TType* >( oi ); auto dv = dynamic_cast< const _TType* >( ov ); if ( di != NULL ) return( di ); else if( dv != NULL ) return( dv ); else return( NULL ); } else if( oi != NULL && ov == NULL ) { auto di = dynamic_cast< const _TType* >( oi ); if( di == NULL ) return( d->GetVTK< _TType >( ) ); else return( di ); } else if( oi == NULL && ov != NULL ) { auto dv = dynamic_cast< const _TType* >( ov ); if( dv == NULL ) return( d->GetITK< _TType >( ) ); else return( dv ); } else return( NULL ); } else return( NULL ); } // ------------------------------------------------------------------------- template< class _TType > _TType* cpPlugins::Pipeline::ProcessObject:: GetOutput( const std::string& n ) { auto it = this->m_Outputs.find( n ); if( it != this->m_Outputs.end( ) ) return( dynamic_cast< _TType* >( it->second->Get( ) ) ); else return( NULL ); } // ------------------------------------------------------------------------- template< class _TType > const _TType* cpPlugins::Pipeline::ProcessObject:: GetOutput( const std::string& n ) const { auto it = this->m_Outputs.find( n ); if( it != this->m_Outputs.end( ) ) return( dynamic_cast< const _TType* >( it->second->Get( ) ) ); else return( NULL ); } // ------------------------------------------------------------------------- template< class _TType > _TType* cpPlugins::Pipeline::ProcessObject:: GetOutputData( const std::string& n ) { auto d = this->GetOutput( n ); if( d != NULL ) { auto oi = d->m_ITK.GetPointer( ); auto ov = d->m_VTK.GetPointer( ); if( oi != NULL && ov != NULL ) { auto di = dynamic_cast< _TType* >( oi ); auto dv = dynamic_cast< _TType* >( ov ); if ( di != NULL ) return( di ); else if( dv != NULL ) return( dv ); else return( NULL ); } else if( oi != NULL && ov == NULL ) { auto di = dynamic_cast< _TType* >( oi ); if( di == NULL ) return( d->GetVTK< _TType >( ) ); else return( di ); } else if( oi == NULL && ov != NULL ) { auto dv = dynamic_cast< _TType* >( ov ); if( dv == NULL ) return( d->GetITK< _TType >( ) ); else return( dv ); } else return( NULL ); } else return( NULL ); } // ------------------------------------------------------------------------- template< class _TType > const _TType* cpPlugins::Pipeline::ProcessObject:: GetOutputData( const std::string& n ) const { auto d = this->GetOutput( n ); if( d != NULL ) { auto oi = d->m_ITK.GetPointer( ); auto ov = d->m_VTK.GetPointer( ); if( oi != NULL && ov != NULL ) { auto di = dynamic_cast< const _TType* >( oi ); auto dv = dynamic_cast< const _TType* >( ov ); if ( di != NULL ) return( di ); else if( dv != NULL ) return( dv ); else return( NULL ); } else if( oi != NULL && ov == NULL ) { auto di = dynamic_cast< const _TType* >( oi ); if( di == NULL ) return( d->GetVTK< _TType >( ) ); else return( di ); } else if( oi == NULL && ov != NULL ) { auto dv = dynamic_cast< const _TType* >( ov ); if( dv == NULL ) return( d->GetITK< _TType >( ) ); else return( dv ); } else return( NULL ); } else return( NULL ); } // ------------------------------------------------------------------------- template< class _TType > void cpPlugins::Pipeline::ProcessObject:: _ConfigureInput( const std::string& name, bool required, bool multiple ) { auto it = this->m_Inputs.find( name ); if( it == this->m_Inputs.end( ) ) { Port* port; if( multiple ) port = new MultipleInputsPort( required ); else port = new InputPort( required ); port->Configure< _TType >( ); this->m_Inputs[ name ] = port; this->Modified( ); } // fi } // ------------------------------------------------------------------------- template< class _TType > void cpPlugins::Pipeline::ProcessObject:: _ConfigureOutput( const std::string& name ) { auto it = this->m_Outputs.find( name ); if( it == this->m_Outputs.end( ) ) { Port* port = new OutputPort( true ); port->Configure< _TType >( ); port->Add( _TType::New( ) ); port->Get( )->SetSource( this ); this->m_Outputs[ name ] = port; this->Modified( ); } // fi } // ------------------------------------------------------------------------- template< class _TFilter > _TFilter* cpPlugins::Pipeline::ProcessObject:: _CreateITK( ) { // TODO: why this lead to synch issues??? _TFilter* filter = this->GetITK< _TFilter >( ); if( filter == NULL ) { typename _TFilter::Pointer filter_ptr = _TFilter::New( ); this->m_ITK = filter_ptr; this->m_VTK = NULL; filter = filter_ptr.GetPointer( ); this->Modified( ); } // fi return( filter ); } // ------------------------------------------------------------------------- template< class _TFilter > _TFilter* cpPlugins::Pipeline::ProcessObject:: _CreateVTK( ) { // TODO: why this lead to synch issues??? _TFilter* filter = this->GetVTK< _TFilter >( ); if( filter == NULL ) { vtkSmartPointer< _TFilter > filter_ptr = vtkSmartPointer< _TFilter >::New( ); this->m_ITK = NULL; this->m_VTK = filter_ptr; filter = filter_ptr.GetPointer( ); this->Modified( ); } // fi return( filter ); } #endif // __cpPlugins__Pipeline__ProcessObject__hxx__ // eof - $RCSfile$