1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
6 #ifndef __fpa__Base__RegionGrow__hxx__
7 #define __fpa__Base__RegionGrow__hxx__
9 // -------------------------------------------------------------------------
10 template< class _TAlgorithm >
11 itk::ModifiedTimeType fpa::Base::RegionGrow< _TAlgorithm >::
14 itk::ModifiedTimeType t = this->Superclass::GetMTime( );
15 if( this->m_ValuePredicate.IsNotNull( ) )
17 itk::ModifiedTimeType q = this->m_ValuePredicate->GetMTime( );
21 if( this->m_VertexPredicate.IsNotNull( ) )
23 itk::ModifiedTimeType q = this->m_VertexPredicate->GetMTime( );
31 // -------------------------------------------------------------------------
32 template< class _TAlgorithm >
33 typename fpa::Base::RegionGrow< _TAlgorithm >::
34 TOutputValue fpa::Base::RegionGrow< _TAlgorithm >::
35 GetOutsideValue( ) const
37 return( this->GetInitValue( ) );
40 // -------------------------------------------------------------------------
41 template< class _TAlgorithm >
42 void fpa::Base::RegionGrow< _TAlgorithm >::
43 SetOutsideValue( const TOutputValue& v )
45 this->SetInitValue( v );
48 // -------------------------------------------------------------------------
49 template< class _TAlgorithm >
50 void fpa::Base::RegionGrow< _TAlgorithm >::
51 SetPredicate( TValuePredicate* p )
53 if( this->m_ValuePredicate.GetPointer( ) != p )
55 this->m_ValuePredicate = p;
61 // -------------------------------------------------------------------------
62 template< class _TAlgorithm >
63 void fpa::Base::RegionGrow< _TAlgorithm >::
64 SetPredicate( TVertexPredicate* p )
66 if( this->m_VertexPredicate.GetPointer( ) != p )
68 this->m_VertexPredicate = p;
74 // -------------------------------------------------------------------------
75 template< class _TAlgorithm >
76 fpa::Base::RegionGrow< _TAlgorithm >::
79 m_InsideValue( TOutputValue( 1 ) )
81 this->SetInitValue( TOutputValue( 0 ) );
84 // -------------------------------------------------------------------------
85 template< class _TAlgorithm >
86 fpa::Base::RegionGrow< _TAlgorithm >::
91 // -------------------------------------------------------------------------
92 template< class _TAlgorithm >
93 void fpa::Base::RegionGrow< _TAlgorithm >::
94 _ComputeOutputValue( TNode& n )
99 // -------------------------------------------------------------------------
100 template< class _TAlgorithm >
101 void fpa::Base::RegionGrow< _TAlgorithm >::
102 _UpdateOutputValue( TNode& n )
104 TInputValue value = this->_GetInputValue( n.Vertex );
106 if( this->m_ValuePredicate.IsNotNull( ) )
107 inside = this->m_ValuePredicate->Evaluate( value );
108 if( this->m_VertexPredicate.IsNotNull( ) )
109 inside &= this->m_VertexPredicate->Evaluate( n.Vertex );
112 n.Value = this->m_InitValue;
116 n.Value = this->m_InsideValue;
117 this->Superclass::_UpdateOutputValue( n );
120 // -------------------------------------------------------------------------
121 template< class _TAlgorithm >
122 void fpa::Base::RegionGrow< _TAlgorithm >::
125 this->m_Queue.clear( );
128 // -------------------------------------------------------------------------
129 template< class _TAlgorithm >
130 typename fpa::Base::RegionGrow< _TAlgorithm >::
131 TNode fpa::Base::RegionGrow< _TAlgorithm >::
134 TNode n = this->m_Queue.front( );
135 this->m_Queue.pop_front( );
139 // -------------------------------------------------------------------------
140 template< class _TAlgorithm >
141 void fpa::Base::RegionGrow< _TAlgorithm >::
142 _QueuePush( const TNode& node )
144 this->m_Queue.push_back( node );
147 // -------------------------------------------------------------------------
148 template< class _TAlgorithm >
149 unsigned long fpa::Base::RegionGrow< _TAlgorithm >::
152 return( this->m_Queue.size( ) );
155 // -------------------------------------------------------------------------
156 template< class _TAlgorithm >
157 void fpa::Base::RegionGrow< _TAlgorithm >::
158 _PrepareSeeds( TNodes& nodes )
160 typename TNodes::iterator nIt = nodes.begin( );
161 for( ; nIt != nodes.end( ); ++nIt )
162 nIt->Value = this->m_InitValue;
165 #endif // __fpa__Base__RegionGrow__hxx__