X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FBase%2FRegionGrow.hxx;h=1760ac1eb9b89d2f5b3937eb1e550b158fb0d434;hb=eb4acd3dde87a3e33593c3ce87d0d351dec23f69;hp=bdc1ed34c7818bb162480615ab83749cd107b345;hpb=9622bd5b833a8845881003228207e0caca59b081;p=FrontAlgorithms.git diff --git a/lib/fpa/Base/RegionGrow.hxx b/lib/fpa/Base/RegionGrow.hxx index bdc1ed3..1760ac1 100644 --- a/lib/fpa/Base/RegionGrow.hxx +++ b/lib/fpa/Base/RegionGrow.hxx @@ -2,86 +2,88 @@ #define __FPA__BASE__REGIONGROWING__HXX__ // ------------------------------------------------------------------------- -template< class V, class R, class VV, class VC, class B > -fpa::Base::RegionGrow< V, R, VV, VC, B >:: +template< class V, class C, class R, class S, class VC, class B > +fpa::Base::RegionGrow< V, C, R, S, VC, B >:: RegionGrow( ) - : Superclass( ) + : Superclass( ), + m_InsideValue( TResult( 1 ) ), + m_OutsideValue( TResult( 0 ) ) { } // ------------------------------------------------------------------------- -template< class V, class R, class VV, class VC, class B > -fpa::Base::RegionGrow< V, R, VV, VC, B >:: +template< class V, class C, class R, class S, class VC, class B > +fpa::Base::RegionGrow< V, C, R, S, VC, B >:: ~RegionGrow( ) { } // ------------------------------------------------------------------------- -template< class V, class R, class VV, class VC, class B > -bool fpa::Base::RegionGrow< V, R, VV, VC, B >:: -_UpdateResult( _TNode& n ) +template< class V, class C, class R, class S, class VC, class B > +bool fpa::Base::RegionGrow< V, C, R, S, VC, B >:: +_CheckMembership( const TVertex& v ) const { - n.Result = R( this->_CheckMembership( n ) ); - return( n.Result ); + if( this->m_GrowingFunction.IsNotNull( ) ) + return( this->m_GrowingFunction->Evaluate( v ) ); + else + return( false ); } // ------------------------------------------------------------------------- -template< class V, class R, class VV, class VC, class B > -void fpa::Base::RegionGrow< V, R, VV, VC, B >:: -_InitializeQueue( ) +template< class V, class C, class R, class S, class VC, class B > +bool fpa::Base::RegionGrow< V, C, R, S, VC, B >:: +_ComputeNeighborResult( + TResult& result, const TVertex& neighbor, const TVertex& parent + ) const { - for( - typename _TNodes::const_iterator vIt = this->m_Seeds.begin( ); - vIt != this->m_Seeds.end( ); - vIt++ - ) - this->_QueuePush( *vIt ); + if( this->_CheckMembership( neighbor ) ) + { + result = this->m_InsideValue; + return( true ); + } + else + { + result = this->m_OutsideValue; + return( false ); + + } // fi } // ------------------------------------------------------------------------- -template< class V, class R, class VV, class VC, class B > -bool fpa::Base::RegionGrow< V, R, VV, VC, B >:: +template< class V, class C, class R, class S, class VC, class B > +bool fpa::Base::RegionGrow< V, C, R, S, VC, B >:: _IsQueueEmpty( ) const { return( this->m_Queue.empty( ) ); } // ------------------------------------------------------------------------- -template< class V, class R, class VV, class VC, class B > -void fpa::Base::RegionGrow< V, R, VV, VC, B >:: -_QueuePush( const _TNode& n ) +template< class V, class C, class R, class S, class VC, class B > +void fpa::Base::RegionGrow< V, C, R, S, VC, B >:: +_QueuePush( const TVertex& v, const _TNode& n ) { - this->m_Queue.push( n ); + this->m_Queue.push( std::pair< TVertex, _TNode >( v, n ) ); } // ------------------------------------------------------------------------- -template< class V, class R, class VV, class VC, class B > -typename fpa::Base::RegionGrow< V, R, VV, VC, B >:: -_TNode fpa::Base::RegionGrow< V, R, VV, VC, B >:: -_QueuePop( ) +template< class V, class C, class R, class S, class VC, class B > +void fpa::Base::RegionGrow< V, C, R, S, VC, B >:: +_QueuePop( TVertex& v, _TNode& n ) { - _TNode n = this->m_Queue.front( ); + v = this->m_Queue.front( ).first; + n = this->m_Queue.front( ).second; this->m_Queue.pop( ); - return( n ); } // ------------------------------------------------------------------------- -template< class V, class R, class VV, class VC, class B > -void fpa::Base::RegionGrow< V, R, VV, VC, B >:: +template< class V, class C, class R, class S, class VC, class B > +void fpa::Base::RegionGrow< V, C, R, S, VC, B >:: _QueueClear( ) { while( this->m_Queue.size( ) > 0 ) this->m_Queue.pop( ); } -// ------------------------------------------------------------------------- -template< class V, class R, class VV, class VC, class B > -bool fpa::Base::RegionGrow< V, R, VV, VC, B >:: -_UpdateNeigh( _TNode& nn, const _TNode& n ) -{ - return( true ); -} - #endif // __FPA__BASE__REGIONGROWING__HXX__ // eof - $RCSfile$