DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker > Class Template Reference

#include <DigitalSurface2DSlice.h>

Collaboration diagram for DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >:
Collaboration graph
[legend]

Public Types

typedef TDigitalSurfaceTracker DigitalSurfaceTracker
typedef DigitalSurface2DSlice
< DigitalSurfaceTracker
Self
typedef
DigitalSurfaceTracker::DigitalSurfaceContainer 
DigitalSurfaceContainer
typedef
DigitalSurfaceContainer::KSpace 
KSpace
typedef
DigitalSurfaceContainer::Surfel 
Surfel
typedef
DigitalSurfaceContainer::Size 
Size
typedef DigitalSurface
< DigitalSurfaceContainer
TheDigitalSurface
typedef std::deque< SurfelStorage
typedef Storage::const_iterator ConstIterator
typedef
Storage::const_reverse_iterator 
ConstReverseIterator
typedef Circulator< ConstIteratorConstCirculator
typedef Circulator
< ConstReverseIterator
ConstReverseCirculator

Public Member Functions

 BOOST_CONCEPT_ASSERT ((CDigitalSurfaceTracker< DigitalSurfaceTracker >))
 ~DigitalSurface2DSlice ()
 DigitalSurface2DSlice (DigitalSurfaceTracker *tracker, Dimension i)
bool init (DigitalSurfaceTracker *tracker, Dimension i)
Size size () const
bool isClosed () const
ConstIterator start () const
ConstReverseIterator rstart () const
ConstCirculator cstart () const
ConstReverseCirculator rcstart () const
ConstIterator begin () const
ConstIterator end () const
ConstReverseIterator rbegin () const
ConstReverseIterator rend () const
ConstCirculator c () const
ConstReverseCirculator rc () const
void selfDisplay (std::ostream &out) const
bool isValid () const

Protected Member Functions

 DigitalSurface2DSlice ()

Private Member Functions

 DigitalSurface2DSlice (const DigitalSurface2DSlice &other)
DigitalSurface2DSliceoperator= (const DigitalSurface2DSlice &other)

Private Attributes

std::deque< SurfelmySurfels
bool myIsClosed
ConstIterator myStart

Detailed Description

template<typename TDigitalSurfaceTracker>
class DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >

Aim: Represents a 2-dimensional slice in a DigitalSurface. In a sense, it is a 4-connected contour, open or not. To be valid, it must be connected to some digital surface and a starting surfel.

Description of template class 'DigitalSurface2DSlice'

It provides the following inner types:

And the following (circular)iterator services:

You can use these services to iterate over the elements. Note that c() and rc() are defined so as to start on the same surfel (when dereferenced). The same is true for cstart() and rcstart(). You should use circulators when isClosed() is true, otherwise it will connect unconnected surfels (the two extremities of the open slice contour).

Template Parameters:
TDigitalSurfaceTrackerany model of CDigitalSurfaceTracker: the concrete representation chosen for tracking the digital surface.

Definition at line 92 of file DigitalSurface2DSlice.h.


Member Typedef Documentation

template<typename TDigitalSurfaceTracker>
typedef Circulator<ConstIterator> DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstCirculator

Definition at line 108 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef Storage::const_iterator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstIterator

Definition at line 106 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef Circulator<ConstReverseIterator> DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstReverseCirculator

Definition at line 109 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef Storage::const_reverse_iterator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstReverseIterator

Definition at line 107 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef DigitalSurfaceTracker::DigitalSurfaceContainer DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::DigitalSurfaceContainer

Definition at line 99 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef TDigitalSurfaceTracker DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::DigitalSurfaceTracker

Definition at line 95 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef DigitalSurfaceContainer::KSpace DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::KSpace

Definition at line 100 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef DigitalSurface2DSlice<DigitalSurfaceTracker> DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::Self

Definition at line 98 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef DigitalSurfaceContainer::Size DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::Size

Definition at line 102 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef std::deque<Surfel> DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::Storage

Definition at line 105 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef DigitalSurfaceContainer::Surfel DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::Surfel

Definition at line 101 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
typedef DigitalSurface<DigitalSurfaceContainer> DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::TheDigitalSurface

Definition at line 103 of file DigitalSurface2DSlice.h.


Constructor & Destructor Documentation

template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::~DigitalSurface2DSlice ( )
inline

Destructor.

Definition at line 47 of file DigitalSurface2DSlice.ih.

{
}
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::DigitalSurface2DSlice ( DigitalSurfaceTracker tracker,
Dimension  i 
)
inline

Constructor from tracker and Dimension. The current position of the tracker gives the starting surfel s. The 2D slice spans a 2D-plane containing axes i and sOrthDir( s ).

Parameters:
trackera pointer on a tracker, which will be moved to build the slice. More precisely, if the contour is open, the tracker is moved to the first surfel when traversing in the direct orientation. If the contour is closed, the tracker is returned at the same position.
ia direction different from the orthogonal direction of the current surfel of the tracker.
See also:
init

NB: O(n) complexity (at least) if n is the number of surfels of the slice.

Definition at line 54 of file DigitalSurface2DSlice.ih.

{
init( tracker, i );
}
template<typename TDigitalSurfaceTracker>
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::DigitalSurface2DSlice ( )
protected

Constructor. Forbidden by default (protected to avoid g++ warnings).

template<typename TDigitalSurfaceTracker>
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::DigitalSurface2DSlice ( const DigitalSurface2DSlice< TDigitalSurfaceTracker > &  other)
private

Copy constructor.

Parameters:
otherthe object to clone. Forbidden by default.

Member Function Documentation

template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstIterator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::begin ( ) const
inline

Iterator service.

Returns:
begin iterator

Definition at line 167 of file DigitalSurface2DSlice.ih.

{
return mySurfels.begin();
}
template<typename TDigitalSurfaceTracker>
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::BOOST_CONCEPT_ASSERT ( (CDigitalSurfaceTracker< DigitalSurfaceTracker >)  )
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstCirculator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::c ( ) const
inline

Circulator service.

Returns:
a circulator

Definition at line 203 of file DigitalSurface2DSlice.ih.

{
return ConstCirculator( this->begin(), this->begin(), this->end() );
}
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstCirculator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::cstart ( ) const
inline
Returns:
the circulator on the surfel that was given for initialization.

Definition at line 148 of file DigitalSurface2DSlice.ih.

{
return ConstCirculator( myStart, begin(), end() );
}
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstIterator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::end ( ) const
inline

Iterator service.

Returns:
end iterator

Definition at line 176 of file DigitalSurface2DSlice.ih.

{
return mySurfels.end();
}
template<typename TDigitalSurfaceTracker >
bool DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::init ( DigitalSurfaceTracker tracker,
Dimension  i 
)

Initializes the slice from a tracker tracker and a direction i.

Parameters:
trackera pointer on a tracker, which will be moved to build the slice. More precisely, if the contour is open, the tracker is moved to the first surfel when traversing in the direct orientation. If the contour is closed, the tracker is returned at the same position.
ia direction different from the orthogonal direction of the current surfel of the tracker.
Returns:
'true' if the initialization was ok, false otherwise (for instance if i is the orthogonal direction of the current surfel of the tracker.

NB: O(n) complexity (at least) if n is the number of surfels of the slice.

Definition at line 63 of file DigitalSurface2DSlice.ih.

{
const KSpace & K = tracker->surface().space();
Surfel start_s = tracker->current(); // the start surfel
Surfel current_s = start_s; // the current surfel during the extraction
Surfel next_s; // the surfel after the current surfel during the extraction
uint8_t code = 0;// the code turn when going to the next surfel.
Dimension j = i; // the current tracking direction.
if ( K.sOrthDir( start_s ) == i ) return false;
do
{
mySurfels.push_back( current_s );
bool direct = K.sDirect( current_s, j );
code = tracker->adjacent( next_s, j, direct );
if ( code == 0 ) break; // slice is open
if ( code != 2 ) // 1 or 3, swap tracking dir and orthogonal dir.
j = K.sOrthDir( current_s );
tracker->move( next_s );
current_s = next_s;
}
while ( next_s != start_s );
// Test if we have looped or if the slice is open.
myIsClosed = code != 0;
unsigned int shift = 0;
if ( ! myIsClosed )
{ // open slice
tracker->move( start_s );
j = i;
current_s = start_s;
bool indirect = ! K.sDirect( current_s, j );
while ( ( code = tracker->adjacent( next_s, j, indirect ) ) )
{ // valid movement;
mySurfels.push_front( next_s );
++shift;
if ( code != 2 ) // 1 or 3, swap tracking dir and orthogonal dir.
j = K.sOrthDir( current_s );
tracker->move( next_s );
current_s = next_s;
indirect = ! K.sDirect( current_s, j );
}
}
myStart = begin() + shift;
return true;
}
template<typename TDigitalSurfaceTracker >
bool DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::isClosed ( ) const
inline
Returns:
'true' if the contour is closed, 'false' otherwise.

Definition at line 121 of file DigitalSurface2DSlice.ih.

{
return myIsClosed;
}
template<typename TDigitalSurfaceTracker >
bool DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::isValid ( ) const
inline

Checks the validity/consistency of the object.

Returns:
'true' if the object is valid, 'false' otherwise.

Definition at line 241 of file DigitalSurface2DSlice.ih.

{
return true;
}
template<typename TDigitalSurfaceTracker>
DigitalSurface2DSlice& DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::operator= ( const DigitalSurface2DSlice< TDigitalSurfaceTracker > &  other)
private

Assignment.

Parameters:
otherthe object to copy.
Returns:
a reference on 'this'. Forbidden by default.
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstReverseIterator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::rbegin ( ) const
inline

Iterator service.

Returns:
rbegin iterator

Definition at line 185 of file DigitalSurface2DSlice.ih.

{
return mySurfels.rbegin();
}
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstReverseCirculator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::rc ( ) const
inline

Circulator service.

Returns:
a reverse circulator

Definition at line 212 of file DigitalSurface2DSlice.ih.

template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstReverseCirculator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::rcstart ( ) const
inline
Returns:
the reverse circulator on the surfel that was given for initialization.

Definition at line 157 of file DigitalSurface2DSlice.ih.

{
}
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstReverseIterator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::rend ( ) const
inline

Iterator service.

Returns:
rend iterator

Definition at line 194 of file DigitalSurface2DSlice.ih.

{
return mySurfels.rend();
}
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstReverseIterator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::rstart ( ) const
inline
Returns:
the reverse iterator on the surfel that was given for initialization.

Definition at line 139 of file DigitalSurface2DSlice.ih.

{
}
template<typename TDigitalSurfaceTracker >
void DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::selfDisplay ( std::ostream &  out) const
inline

Writes/Displays the object on an output stream.

Parameters:
outthe output stream where the object is written.

Definition at line 229 of file DigitalSurface2DSlice.ih.

{
out << "[DigitalSurface2DSlice]";
}
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::Size DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::size ( ) const
inline

The number of surfels of this slice.

Definition at line 112 of file DigitalSurface2DSlice.ih.

{
return mySurfels.size();
}
template<typename TDigitalSurfaceTracker >
DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::ConstIterator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::start ( ) const
inline
Returns:
the iterator on the surfel that was given for initialization.

Definition at line 130 of file DigitalSurface2DSlice.ih.

{
return myStart;
}

Field Documentation

template<typename TDigitalSurfaceTracker>
bool DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::myIsClosed
private

Tells if the slice is closed (true) or open (false).

Definition at line 251 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
ConstIterator DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::myStart
private

The iterator on the surfel given at initialization (may be different from begin() if the slice is open.

Definition at line 254 of file DigitalSurface2DSlice.h.

template<typename TDigitalSurfaceTracker>
std::deque<Surfel> DGtal::DigitalSurface2DSlice< TDigitalSurfaceTracker >::mySurfels
private

The container that stores the surfels of this slice.

Definition at line 249 of file DigitalSurface2DSlice.h.


The documentation for this class was generated from the following files: