DGtal  1.5.beta
DGtal::Expander< TObject > Class Template Reference

Aim: This class is useful to visit an object by adjacencies, layer by layer. More...

#include <DGtal/graph/Expander.h>

Public Types

typedef TObject Object
 
typedef Object::Size Size
 
typedef Object::Point Point
 
typedef Object::Domain Domain
 
typedef Object::DigitalSet DigitalSet
 
typedef Object::ForegroundAdjacency ForegroundAdjacency
 
typedef Domain::Space Space
 
typedef DigitalSet::ConstIterator ConstIterator
 
typedef DigitalSetDomain< DigitalSetObjectDomain
 
typedef DigitalSetDomain< DigitalSetCoreDomain
 
typedef DomainAdjacency< ObjectDomain, ForegroundAdjacencyObjectAdjacency
 
typedef CoreDomain::Predicate InCoreDomainPredicate
 
typedef functors::NotPointPredicate< InCoreDomainPredicateNotInCoreDomainPredicate
 

Public Member Functions

 ~Expander ()
 
 Expander (ConstAlias< Object > object, const Point &p)
 
template<typename PointInputIterator >
 Expander (ConstAlias< Object > object, PointInputIterator b, PointInputIterator e)
 
bool finished () const
 
Size distance () const
 
bool nextLayer ()
 
const DigitalSetcore () const
 
const DigitalSetlayer () const
 
ConstIterator begin () const
 
ConstIterator end () const
 
void selfDisplay (std::ostream &out) const
 
bool isValid () const
 

Protected Member Functions

 Expander ()
 
void computeNextLayer (const DigitalSet &src)
 
void endLayer ()
 

Private Member Functions

 Expander (const Expander &other)
 
Expanderoperator= (const Expander &other)
 

Private Attributes

const DomainmyEmbeddingDomain
 
const ObjectmyObject
 
ObjectDomain myObjectDomain
 
ObjectAdjacency myObjectAdjacency
 
DigitalSet myCore
 
DigitalSet myLayer
 
Size myDistance
 
bool myFinished
 
NotInCoreDomainPredicate myNotInCorePred
 

Detailed Description

template<typename TObject>
class DGtal::Expander< TObject >

Aim: This class is useful to visit an object by adjacencies, layer by layer.

Description of template class 'Expander'

The expander implements a breadth-first algorithm on the graph of adjacencies. It can be used not only to detect connected component but also to identify the layers of the object located at a given distance of a starting set.

The core of the expander is at the beginning the set of points at distance 0. Each layer is at a different distance from the initial core. The expander move layer by layer but the user is free to navigate on each layer.

Template Parameters
TObjectthe type of the digital object.
Point p( ... );
ObjectType object( ... );
typedef Expander< ObjectType > ObjectExpander;
ObjectExpander expander( object, p );
while ( ! expander.finished() )
{
std::cout << "Layer " << expander.distance() << " :";
// Visit the current layer.
for ( ObjectExpander::ConstIterator it = expander.begin();
it != expander.end();
++it )
std::cout << " " << *it;
std::cout << endl;
// Move to next layer.
expander.nextLayer();
}
MyDigitalSurface::ConstIterator ConstIterator
MyPointD Point
Definition: testClone2.cpp:383
See also
testExpander.cpp
testObject.cpp

Definition at line 97 of file Expander.h.

Member Typedef Documentation

◆ ConstIterator

template<typename TObject >
typedef DigitalSet::ConstIterator DGtal::Expander< TObject >::ConstIterator

Definition at line 108 of file Expander.h.

◆ CoreDomain

template<typename TObject >
typedef DigitalSetDomain<DigitalSet> DGtal::Expander< TObject >::CoreDomain

Definition at line 110 of file Expander.h.

◆ DigitalSet

template<typename TObject >
typedef Object::DigitalSet DGtal::Expander< TObject >::DigitalSet

Definition at line 105 of file Expander.h.

◆ Domain

template<typename TObject >
typedef Object::Domain DGtal::Expander< TObject >::Domain

Definition at line 104 of file Expander.h.

◆ ForegroundAdjacency

template<typename TObject >
typedef Object::ForegroundAdjacency DGtal::Expander< TObject >::ForegroundAdjacency

Definition at line 106 of file Expander.h.

◆ InCoreDomainPredicate

template<typename TObject >
typedef CoreDomain::Predicate DGtal::Expander< TObject >::InCoreDomainPredicate

Definition at line 112 of file Expander.h.

◆ NotInCoreDomainPredicate

Definition at line 113 of file Expander.h.

◆ Object

template<typename TObject >
typedef TObject DGtal::Expander< TObject >::Object

Definition at line 101 of file Expander.h.

◆ ObjectAdjacency

template<typename TObject >
typedef DomainAdjacency< ObjectDomain, ForegroundAdjacency> DGtal::Expander< TObject >::ObjectAdjacency

Definition at line 111 of file Expander.h.

◆ ObjectDomain

template<typename TObject >
typedef DigitalSetDomain<DigitalSet> DGtal::Expander< TObject >::ObjectDomain

Definition at line 109 of file Expander.h.

◆ Point

template<typename TObject >
typedef Object::Point DGtal::Expander< TObject >::Point

Definition at line 103 of file Expander.h.

◆ Size

template<typename TObject >
typedef Object::Size DGtal::Expander< TObject >::Size

Definition at line 102 of file Expander.h.

◆ Space

template<typename TObject >
typedef Domain::Space DGtal::Expander< TObject >::Space

Definition at line 107 of file Expander.h.

Constructor & Destructor Documentation

◆ ~Expander()

template<typename TObject >
DGtal::Expander< TObject >::~Expander ( )

Destructor.

◆ Expander() [1/4]

template<typename TObject >
DGtal::Expander< TObject >::Expander ( ConstAlias< Object object,
const Point p 
)

Constructor from a point. This point provides the initial core of the expander.

Parameters
objectthe digital object in which the expander expands.
pany point in the given object.

◆ Expander() [2/4]

template<typename TObject >
template<typename PointInputIterator >
DGtal::Expander< TObject >::Expander ( ConstAlias< Object object,
PointInputIterator  b,
PointInputIterator  e 
)

Constructor from iterators. All points visited between the iterators should be distinct two by two. The so specified set of points provides the initial core of the expander.

Template Parameters
PointInputIteratortype of an InputIterator pointing on a Point.
Parameters
objectthe digital object in which the expander expands.
bthe begin point in a set.
ethe end point in a set.

◆ Expander() [3/4]

template<typename TObject >
DGtal::Expander< TObject >::Expander ( )
protected

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

◆ Expander() [4/4]

template<typename TObject >
DGtal::Expander< TObject >::Expander ( const Expander< TObject > &  other)
private

Copy constructor.

Parameters
otherthe object to clone. Forbidden by default.

Member Function Documentation

◆ begin()

template<typename TObject >
ConstIterator DGtal::Expander< TObject >::begin ( ) const
Returns
the iterator on the first element of the layer.

◆ computeNextLayer()

template<typename TObject >
void DGtal::Expander< TObject >::computeNextLayer ( const DigitalSet src)
protected

Computes the next layer just around [src]. The member 'm_core' must be up to date (i.e, [src] is a subset of 'm_core'). 'm_layer' is cleared in this method. At first call, [src] should be 'm_core', then [src] should be 'm_layer'.

Parameters
srcthe set around which the new layer is computed.

◆ core()

template<typename TObject >
const DigitalSet& DGtal::Expander< TObject >::core ( ) const
Returns
a const reference on the (current) core set of points.

◆ distance()

template<typename TObject >
Size DGtal::Expander< TObject >::distance ( ) const
Returns
the current distance to the initial core, or equivalently the index of the current layer.

◆ end()

template<typename TObject >
ConstIterator DGtal::Expander< TObject >::end ( ) const
Returns
the iterator after the last element of the layer.

◆ endLayer()

template<typename TObject >
void DGtal::Expander< TObject >::endLayer ( )
protected

Push the layer into the current core and clear it. Must be called before computeNewLayer.

◆ finished()

template<typename TObject >
bool DGtal::Expander< TObject >::finished ( ) const
Returns
'true' if all possible elements have been visited.

◆ isValid()

template<typename TObject >
bool DGtal::Expander< TObject >::isValid ( ) const

Checks the validity/consistency of the object.

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

◆ layer()

template<typename TObject >
const DigitalSet& DGtal::Expander< TObject >::layer ( ) const
Returns
a const reference on the (current) layer set of points.

◆ nextLayer()

template<typename TObject >
bool DGtal::Expander< TObject >::nextLayer ( )

Extract next layer. You might used begin() and end() to access all the elements of the new layer.

Returns
'true' if there was another layer, or 'false' if it was the last (ie. reverse of finished() ).

◆ operator=()

template<typename TObject >
Expander& DGtal::Expander< TObject >::operator= ( const Expander< TObject > &  other)
private

Assignment.

Parameters
otherthe object to copy.
Returns
a reference on 'this'. Forbidden by default.

◆ selfDisplay()

template<typename TObject >
void DGtal::Expander< TObject >::selfDisplay ( std::ostream &  out) const

Writes/Displays the object on an output stream.

Parameters
outthe output stream where the object is written.

Field Documentation

◆ myCore

template<typename TObject >
DigitalSet DGtal::Expander< TObject >::myCore
private

Set representing the core of the expansion: the expansion should not enter the core.

Definition at line 235 of file Expander.h.

◆ myDistance

template<typename TObject >
Size DGtal::Expander< TObject >::myDistance
private

Current distance to origin.

Definition at line 245 of file Expander.h.

◆ myEmbeddingDomain

template<typename TObject >
const Domain& DGtal::Expander< TObject >::myEmbeddingDomain
private

The domain in which the object is lying.

Definition at line 214 of file Expander.h.

◆ myFinished

template<typename TObject >
bool DGtal::Expander< TObject >::myFinished
private

Boolean stating whether the expansion is over or not.

Definition at line 250 of file Expander.h.

◆ myLayer

template<typename TObject >
DigitalSet DGtal::Expander< TObject >::myLayer
private

Set representing the current layer.

Definition at line 240 of file Expander.h.

◆ myNotInCorePred

template<typename TObject >
NotInCoreDomainPredicate DGtal::Expander< TObject >::myNotInCorePred
private

Predicate ensuring the not-in-core expansion.

Definition at line 255 of file Expander.h.

◆ myObject

template<typename TObject >
const Object& DGtal::Expander< TObject >::myObject
private

The object where the expansion takes place.

Definition at line 219 of file Expander.h.

◆ myObjectAdjacency

template<typename TObject >
ObjectAdjacency DGtal::Expander< TObject >::myObjectAdjacency
private

The adjacency that is used in myObjectDomain.

Definition at line 229 of file Expander.h.

◆ myObjectDomain

template<typename TObject >
ObjectDomain DGtal::Expander< TObject >::myObjectDomain
private

The domain corresponding to the object.

Definition at line 224 of file Expander.h.


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