// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__Base__RegionGrow__hxx__ #define __fpa__Base__RegionGrow__hxx__ // ------------------------------------------------------------------------- template< class _TAlgorithm > itk::ModifiedTimeType fpa::Base::RegionGrow< _TAlgorithm >:: GetMTime( ) const { itk::ModifiedTimeType t = this->Superclass::GetMTime( ); if( this->m_ValuePredicate.IsNotNull( ) ) { itk::ModifiedTimeType q = this->m_ValuePredicate->GetMTime( ); t = ( q < t )? q: t; } // fi if( this->m_VertexPredicate.IsNotNull( ) ) { itk::ModifiedTimeType q = this->m_VertexPredicate->GetMTime( ); t = ( q < t )? q: t; } // fi return( t ); } // ------------------------------------------------------------------------- template< class _TAlgorithm > typename fpa::Base::RegionGrow< _TAlgorithm >:: TOutputValue fpa::Base::RegionGrow< _TAlgorithm >:: GetOutsideValue( ) const { return( this->GetInitValue( ) ); } // ------------------------------------------------------------------------- template< class _TAlgorithm > void fpa::Base::RegionGrow< _TAlgorithm >:: SetOutsideValue( const TOutputValue& v ) { this->SetInitValue( v ); } // ------------------------------------------------------------------------- template< class _TAlgorithm > void fpa::Base::RegionGrow< _TAlgorithm >:: SetPredicate( TValuePredicate* p ) { if( this->m_ValuePredicate.GetPointer( ) != p ) { this->m_ValuePredicate = p; this->Modified( ); } // fi } // ------------------------------------------------------------------------- template< class _TAlgorithm > void fpa::Base::RegionGrow< _TAlgorithm >:: SetPredicate( TVertexPredicate* p ) { if( this->m_VertexPredicate.GetPointer( ) != p ) { this->m_VertexPredicate = p; this->Modified( ); } // fi } // ------------------------------------------------------------------------- template< class _TAlgorithm > fpa::Base::RegionGrow< _TAlgorithm >:: RegionGrow( ) : Superclass( ), m_InsideValue( TOutputValue( 1 ) ) { this->SetInitValue( TOutputValue( 0 ) ); } // ------------------------------------------------------------------------- template< class _TAlgorithm > fpa::Base::RegionGrow< _TAlgorithm >:: ~RegionGrow( ) { } // ------------------------------------------------------------------------- template< class _TAlgorithm > bool fpa::Base::RegionGrow< _TAlgorithm >:: _ComputeOutputValue( TNode& n ) { TInputValue value = this->_GetInputValue( n.Vertex ); bool inside = false; if( this->m_ValuePredicate.IsNotNull( ) ) inside = this->m_ValuePredicate->Evaluate( value ); if( this->m_VertexPredicate.IsNotNull( ) ) inside &= this->m_VertexPredicate->Evaluate( n.Vertex ); n.Value = ( inside )? this->m_InsideValue: this->m_InitValue; return( inside ); } // ------------------------------------------------------------------------- template< class _TAlgorithm > void fpa::Base::RegionGrow< _TAlgorithm >:: _QueueClear( ) { this->m_Queue.clear( ); } // ------------------------------------------------------------------------- template< class _TAlgorithm > typename fpa::Base::RegionGrow< _TAlgorithm >:: TNode fpa::Base::RegionGrow< _TAlgorithm >:: _QueuePop( ) { TNode n = this->m_Queue.front( ); this->m_Queue.pop_front( ); return( n ); } // ------------------------------------------------------------------------- template< class _TAlgorithm > void fpa::Base::RegionGrow< _TAlgorithm >:: _QueuePush( const TNode& node ) { this->m_Queue.push_back( node ); } // ------------------------------------------------------------------------- template< class _TAlgorithm > unsigned long fpa::Base::RegionGrow< _TAlgorithm >:: _QueueSize( ) const { return( this->m_Queue.size( ) ); } // ------------------------------------------------------------------------- template< class _TAlgorithm > void fpa::Base::RegionGrow< _TAlgorithm >:: _PrepareSeeds( TNodes& nodes ) { typename TNodes::iterator nIt = nodes.begin( ); for( ; nIt != nodes.end( ); ++nIt ) nIt->Value = this->m_InsideValue; } #endif // __fpa__Base__RegionGrow__hxx__ // eof - $RCSfile$