]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Base/RegionGrowWithMultipleCriteria.hxx
0fd4378c5fbabef49d5cd827d25e44bcfcd927d6
[FrontAlgorithms.git] / lib / fpa / Base / RegionGrowWithMultipleCriteria.hxx
1 #ifndef __FPA__BASE__REGIONGROWWITHMULTIPLECRITERIA__HXX__
2 #define __FPA__BASE__REGIONGROWWITHMULTIPLECRITERIA__HXX__
3
4 // -------------------------------------------------------------------------
5 template< class V, class R, class VV, class VC, class B >
6 unsigned int fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
7 GetNumberOfMembershipFunctions( ) const
8 {
9   return( this->m_Functions.size( ) );
10 }
11
12 // -------------------------------------------------------------------------
13 template< class V, class R, class VV, class VC, class B >
14 void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
15 ClearMembershipFunctions( )
16 {
17   this->m_Functions.clear( );
18   this->Modified( );
19 }
20
21 // -------------------------------------------------------------------------
22 template< class V, class R, class VV, class VC, class B >
23 void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
24 AddMembershipFunction( TMembershipFunction* function )
25 {
26   this->m_Functions.push_back( function );
27   this->Modified( );
28 }
29
30 // -------------------------------------------------------------------------
31 template< class V, class R, class VV, class VC, class B >
32 fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
33 RegionGrowWithMultipleCriteria( )
34   : Superclass( )
35 {
36 }
37
38 // -------------------------------------------------------------------------
39 template< class V, class R, class VV, class VC, class B >
40 fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
41 ~RegionGrowWithMultipleCriteria( )
42 {
43 }
44
45 // -------------------------------------------------------------------------
46 template< class V, class R, class VV, class VC, class B >
47 void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
48 _BeforeMainLoop( )
49 {
50   this->Superclass::_BeforeMainLoop( );
51   this->m_ActualFunction = this->m_Functions.begin( );
52 }
53
54 // -------------------------------------------------------------------------
55 template< class V, class R, class VV, class VC, class B >
56 void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
57 _AfterLoop( )
58 {
59   this->Superclass::_AfterLoop( );
60
61   // Replace queue
62   this->_QueueClear( );
63   while( !( this->m_AuxiliaryQueue.empty( ) ) )
64   {
65     // Get node
66     _TNode node = this->m_AuxiliaryQueue.front( );
67     this->m_AuxiliaryQueue.pop( );
68     this->_QueuePush( node );
69
70     // Unmark it
71     typename _TMarks::iterator mIt = this->m_Marks.find( node.Vertex );
72     if( mIt != this->m_Marks.end( ) )
73       this->m_Marks.erase( mIt );
74     
75   } // elihw
76
77   // Move to next function
78   this->m_ActualFunction++;
79 }
80
81 // -------------------------------------------------------------------------
82 template< class V, class R, class VV, class VC, class B >
83 void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
84 _Loop( )
85 {
86   while( this->m_ActualFunction != this->m_Functions.end( ) )
87     this->Superclass::_Loop( );
88 }
89
90 // -------------------------------------------------------------------------
91 template< class V, class R, class VV, class VC, class B >
92 bool fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
93 _CheckMembership( const _TNode& n ) const
94 {
95   if( this->m_ActualFunction != this->m_Functions.end( ) )
96   {
97     bool ret = ( *( this->m_ActualFunction ) )->Evaluate( n.Vertex );
98     if( !ret )
99       this->m_AuxiliaryQueue.push( n );
100     return( ret );
101   }
102   else
103     return( false );
104 }
105
106 #endif // __FPA__BASE__REGIONGROWWITHMULTIPLECRITERIA__HXX__
107
108 // eof - $RCSfile$