X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FBase%2FRegionGrow.hxx;h=8542f3028f3c857d2bce88e225d9331f8210ceca;hb=aaeabf9e79b8db1b97bc3381e95e46c77da4d891;hp=2d554c26beb3e010c1d69d43c2341867891df0a8;hpb=b70a564ee2d7bc180b77a05c37ab431ab9c393e7;p=FrontAlgorithms.git diff --git a/lib/fpa/Base/RegionGrow.hxx b/lib/fpa/Base/RegionGrow.hxx index 2d554c2..8542f30 100644 --- a/lib/fpa/Base/RegionGrow.hxx +++ b/lib/fpa/Base/RegionGrow.hxx @@ -2,8 +2,8 @@ #define __FPA__BASE__REGIONGROWING__HXX__ // ------------------------------------------------------------------------- -template< class V, class C, class R, class B > -fpa::Base::RegionGrow< V, C, R, 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( ), m_InsideValue( TResult( 1 ) ), @@ -12,15 +12,26 @@ RegionGrow( ) } // ------------------------------------------------------------------------- -template< class V, class C, class R, class B > -fpa::Base::RegionGrow< V, C, R, 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 C, class R, class B > -bool fpa::Base::RegionGrow< V, C, R, B >:: +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 +{ + if( this->m_GrowingFunction.IsNotNull( ) ) + return( this->m_GrowingFunction->Evaluate( v ) ); + else + return( true ); +} + +// ------------------------------------------------------------------------- +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 @@ -39,35 +50,34 @@ _ComputeNeighborResult( } // ------------------------------------------------------------------------- -template< class V, class C, class R, class B > -bool fpa::Base::RegionGrow< V, C, R, 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 C, class R, class B > -void fpa::Base::RegionGrow< V, C, R, 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 C, class R, class B > -typename fpa::Base::RegionGrow< V, C, R, B >:: -_TNode fpa::Base::RegionGrow< V, C, R, 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 C, class R, class B > -void fpa::Base::RegionGrow< V, C, R, 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 )