44 template <
typename TDigitalSurfaceTracker>
51 template <
typename TDigitalSurfaceTracker>
60 template <
typename TDigitalSurfaceTracker>
65 const KSpace & K = tracker->surface().space();
66 Surfel start_s = tracker->current();
67 Surfel current_s = start_s;
71 if ( K.sOrthDir( start_s ) == i )
return false;
74 mySurfels.push_back( current_s );
75 bool direct = K.sDirect( current_s, j );
76 code = tracker->adjacent( next_s, j, direct );
77 if ( code == 0 )
break;
79 j = K.sOrthDir( current_s );
80 tracker->move( next_s );
83 while ( next_s != start_s );
85 myIsClosed = code != 0;
86 unsigned int shift = 0;
89 tracker->move( start_s );
92 bool indirect = ! K.sDirect( current_s, j );
93 while ( ( code = tracker->adjacent( next_s, j, indirect ) ) )
95 mySurfels.push_front( next_s );
98 j = K.sOrthDir( current_s );
99 tracker->move( next_s );
101 indirect = ! K.sDirect( current_s, j );
104 myStart = begin() + shift;
108 template <
typename TDigitalSurfaceTracker>
114 return mySurfels.size();
117 template <
typename TDigitalSurfaceTracker>
126 template <
typename TDigitalSurfaceTracker>
135 template <
typename TDigitalSurfaceTracker>
144 template <
typename TDigitalSurfaceTracker>
153 template <
typename TDigitalSurfaceTracker>
163 template <
typename TDigitalSurfaceTracker>
169 return mySurfels.begin();
172 template <
typename TDigitalSurfaceTracker>
178 return mySurfels.end();
181 template <
typename TDigitalSurfaceTracker>
187 return mySurfels.rbegin();
190 template <
typename TDigitalSurfaceTracker>
196 return mySurfels.rend();
199 template <
typename TDigitalSurfaceTracker>
208 template <
typename TDigitalSurfaceTracker>
226 template <
typename TDigitalSurfaceTracker>
231 out <<
"[DigitalSurface2DSlice]";
238 template <
typename TDigitalSurfaceTracker>
251 template <
typename TDigitalSurfaceTracker>
257 object.selfDisplay( out );