33#if defined(KhalimskySpaceND_RECURSES)
34#error Recursive header files inclusion detected in KhalimskySpaceND.h
37#define KhalimskySpaceND_RECURSES
39#if !defined KhalimskySpaceND_h
41#define KhalimskySpaceND_h
49#include <DGtal/base/Common.h>
50#include <DGtal/kernel/CInteger.h>
51#include <DGtal/kernel/PointVector.h>
52#include <DGtal/kernel/SpaceND.h>
53#include <DGtal/topology/KhalimskyPreSpaceND.h>
64 class KhalimskySpaceND;
70 template <
class TKhalimskySpace >
435 template <
typename CellType >
455 typedef std::map<Cell,Value>
Type;
461 typedef std::map<SCell,Value>
Type;
467 typedef std::map<SCell,Value>
Type;
571 const std::array<Closure, dim> & closure );
2125#include "DGtal/topology/KhalimskySpaceND.ih"
2132#undef KhalimskySpaceND_RECURSES
Aim: This class is a model of CPreCellularGridSpaceND. It represents the cubical grid as a cell compl...
PreCellDirectionIterator< dim, Integer > DirIterator
Internal class of KhalimskySpaceND that provides some optimizations depending on the space type.
Aim: This class is a model of CCellularGridSpaceND. It represents the cubical grid as a cell complex,...
Point interiorVoxel(const SCell &c) const
For a given surfel ((n-1)-signed cell), returns its interior voxel (point in Z^d given by the direct ...
void sSetSign(SCell &c, Sign s) const
Sets the sign of the cell.
bool sIsValid(const SPreCell &c, Dimension k) const
Returns true if the given signed cell his k-th Khalimsky coordinate between those of the cells return...
bool sNext(SCell &p, const SCell &lower, const SCell &upper) const
Increment the cell [p] to its next position (as classically done in a scanning).
std::set< SCell > SurfelSet
Preferred type for defining a set of surfels (always signed cells).
Cell uSpel(Point p) const
From the digital coordinates of a point in Zn, builds the corresponding spel (cell of maximal dimensi...
bool uIsInside(const PreCell &p, Dimension k) const
Useful to check if you are going out of the space.
Cell uIncident(const Cell &c, Dimension k, bool up) const
Return the forward or backward unsigned cell incident to [c] along axis [k], depending on [up].
Cells uCoFaces(const Cell &c) const
Return the proper cofaces of [c] (chain of upper incidence) that belong to the space.
void uSetKCoords(Cell &c, const Point &kp) const
Sets the Khalimsky coordinates of [c] to [kp].
TInteger Integer
Arithmetic ring induced by (+,-,*) and Integer numbers.
void selfDisplay(std::ostream &out) const
Writes/Displays the object on an output stream.
Cell uProjection(const Cell &p, const Cell &bound, Dimension k) const
Return the projection of [p] along the [k]th direction toward [bound].
const Point & lowerBound() const
Return the lower bound for digital points in this space.
Cell uGetDecr(const Cell &p, Dimension k) const
Return the same element as [p] except for an decremented coordinate [k].
bool init(const Point &lower, const Point &upper, bool isClosed)
Specifies the upper and lower bounds for the maximal cells in this space.
Cells uUpperIncident(const Cell &c) const
Return the cells directly up incident to c in this space.
SCell sIndirectIncident(const SCell &p, Dimension k) const
Return the indirect incident cell of [p] along [k] (the incident cell along [k] whose sign is negativ...
Cell uTranslation(const Cell &p, const Vector &vec) const
Add the vector [vec] to [p].
static const constexpr Sign NEG
Cell uFirst(const PreCell &p) const
Return the first cell of the space with the same type as [p].
bool sIsMax(const SCell &p, Dimension k) const
Useful to check if you are going out of the space.
Integer uKCoord(const Cell &c, Dimension k) const
Return its Khalimsky coordinate along [k].
Dimension sOrthDir(const SCell &s) const
Given a signed surfel [s], returns its orthogonal direction (ie, the coordinate where the surfel is c...
Integer uDistanceToMin(const Cell &p, Dimension k) const
Useful to check if you are going out of the space (for non-periodic dimensions).
Cell uCell(const Point &kp) const
From the Khalimsky coordinates of a cell, builds the corresponding unsigned cell lying into this Khal...
Cell unsigns(const SCell &p) const
Creates an unsigned cell from a signed one.
DirIterator uDirs(const Cell &p) const
Given an unsigned cell [p], returns an iterator to iterate over each coordinate the cell spans.
bool isSpaceClosed() const
Return 'true' iff the space is closed or periodic along every dimension.
void sSetKCoords(SCell &c, const Point &kp) const
Sets the Khalimsky coordinates of [c] to [kp].
bool cIsInside(const Point &p) const
Useful to check if you are going out of the space.
bool isValid() const
Checks the validity/consistency of the object.
void uSetKCoord(Cell &c, Dimension k, Integer i) const
Sets the [k]-th Khalimsky coordinate of [c] to [i].
DirIterator sDirs(const SCell &p) const
Given a signed cell [p], returns an iterator to iterate over each coordinate the cell spans.
KhalimskySpaceND()
Default constructor.
DirIterator uOrthDirs(const Cell &p) const
Given an unsigned cell [p], returns an iterator to iterate over each coordinate the cell does not spa...
Cells uFaces(const Cell &c) const
Return the proper faces of [c] (chain of lower incidence) that belong to the space.
const Cell & upperCell() const
Return the upper bound for cells in this space.
static const constexpr Dimension DIM
SCell sProjection(const SCell &p, const SCell &bound, Dimension k) const
Return the projection of [p] along the [k]th direction toward [bound].
Integer sKCoord(const SCell &c, Dimension k) const
Return its Khalimsky coordinate along [k].
const Cell & lowerCell() const
Return the lower bound for cells in this space.
Point sCoords(const SCell &c) const
Return its digital coordinates.
Integer uCoord(const Cell &c, Dimension k) const
Return its digital coordinate along [k].
Cells uNeighborhood(const Cell &cell) const
Computes the 1-neighborhood of the cell [c] and returns it.
Dimension uOrthDir(const Cell &s) const
Given an unsigned surfel [s], returns its orthogonal direction (ie, the coordinate where the surfel i...
std::array< Closure, dimension > myClosure
void uProject(Cell &p, const Cell &bound, Dimension k) const
Projects [p] along the [k]th direction toward [bound].
bool uIsValid(const PreCell &c) const
Returns true if the given unsigned cell has Khalimsky coordinates between those of the cells returned...
const Point & uKCoords(const Cell &c) const
Return its Khalimsky coordinates.
SignedKhalimskyPreCell< dim, Integer > SPreCell
Cell uGetMax(Cell p, Dimension k) const
Useful to check if you are going out of the space.
SCell sGetSub(const SCell &p, Dimension k, Integer x) const
Return the same element as [p] except for a coordinate [k] decremented with x.
SCell sOpp(const SCell &p) const
Creates the signed cell with the inverse sign of [p].
Integer uLast(const PreCell &p, Dimension k) const
Return the k-th Khalimsky coordinate of the last cell of the space with the same type as [p].
bool uNext(Cell &p, const Cell &lower, const Cell &upper) const
Increment the cell [p] to its next position (as classically done in a scanning).
void uSetCoords(Cell &c, const Point &kp) const
Sets the digital coordinates of [c] to [kp].
SCell sLast(const SPreCell &p) const
Return the last cell of the space with the same type as [p].
void sProject(SCell &p, const SCell &bound, Dimension k) const
Projects [p] along the [k]th direction toward [bound].
bool cIsValid(const Point &p) const
Returns true if the given cell has Khalimsky coordinates between those of the cells returned by lower...
Size size(Dimension k) const
Return the width of the space in the k-dimension.
KhalimskySpaceND(const Point &lower, const Point &upper, bool isClosed)
Constructor from upper and lower bounds for the maximal cells in this space.
KhalimskySpaceND(KhalimskySpaceND &&other)=default
Move constructor.
SCell sGetMin(SCell p, Dimension k) const
Useful to check if you are going out of the space.
Cell uPointel(Point p) const
From the digital coordinates of a point in Zn, builds the corresponding pointel (cell of dimension 0)...
SCell signs(const Cell &p, Sign s) const
Creates a signed cell from an unsigned one and a given sign.
KhalimskyPreSpaceND< dim, Integer > PreCellularGridSpace
SCell sGetDecr(const SCell &p, Dimension k) const
Return the same element as [p] except for an decremented coordinate [k].
Integer sLast(const SPreCell &p, Dimension k) const
Return the k-th Khalimsky coordinate of the last cell of the space with the same type as [p].
bool sIsInside(const SPreCell &p) const
Useful to check if you are going out of the space.
Integer max(Dimension k) const
Return the maximal digital coordinate in the k-dimension.
bool sDirect(const SCell &p, Dimension k) const
Return 'true' if the direct orientation of [p] along [k] is in the positive coordinate direction.
void sSetCoords(SCell &c, const Point &kp) const
Sets the digital coordinates of [c] to [kp].
void uAddFaces(Cells &faces, const Cell &c, Dimension axis) const
Used by uFaces for computing incident faces.
KhalimskySpaceND(const KhalimskySpaceND &other)=default
Copy constructor.
SCells sLowerIncident(const SCell &c) const
Return the signed cells directly low incident to c in this space.
Integer sTopology(const SCell &p) const
Return the topology word of [p].
Integer min(Dimension k) const
Return the minimal digital coordinate in the k-dimension.
bool sIsMin(const SCell &p, Dimension k) const
Useful to check if you are going out of the space.
SCell sCell(const SPreCell &c) const
From a signed cell, returns a signed cell lying into this Khalismky space.
SCell sCell(Point p, const SPreCell &c) const
From the digital coordinates of a point in Zn and a signed cell type, builds the corresponding signed...
SCell sGetAdd(const SCell &p, Dimension k, Integer x) const
Return the same element as [p] except for a coordinate [k] incremented with x.
PointVector< dim, Integer > Point
SCells sProperNeighborhood(const SCell &cell) const
Computes the proper 1-neighborhood of the cell [c] and returns it.
Integer uTopology(const Cell &p) const
Return the topology word of [p].
KhalimskySpaceNDHelper< KhalimskySpaceND< dim, TInteger > > Helper
Features basic operations on coordinates, especially for periodic dimensions.
Cells uLowerIncident(const Cell &c) const
Return the cells directly low incident to c in this space.
Cells uProperNeighborhood(const Cell &cell) const
Computes the proper 1-neighborhood of the cell [c] and returns it.
Cell uGetIncr(const Cell &p, Dimension k) const
Return the same element as [p] except for the incremented coordinate [k].
SignedKhalimskyCell< dim, Integer > SCell
SCell sSpel(Point p, Sign sign=POS) const
From the digital coordinates of a point in Zn, builds the corresponding spel (cell of maximal dimensi...
SCells sUpperIncident(const SCell &c) const
Return the signed cells directly up incident to c in this space.
bool uIsInside(const PreCell &p) const
Useful to check if you are going out of the space.
bool uIsMax(const Cell &p, Dimension k) const
Useful to check if you are going out of the space.
Cell uCell(const PreCell &c) const
From an unsigned cell, returns an unsigned cell lying into this Khalismky space.
Closure getClosure(Dimension k) const
Gets closure type.
Integer sDistanceToMin(const SCell &p, Dimension k) const
Useful to check if you are going out of the space (for non-periodic dimensions).
bool isSpacePeriodic() const
Return 'true' iff the space is periodic along every dimension.
SCell sAdjacent(const SCell &p, Dimension k, bool up) const
Return the adjacent element to [p] along axis [k] in the given direction and orientation.
~KhalimskySpaceND()
Destructor.
static const constexpr Sign POS
NumberTraits< Integer >::UnsignedVersion Size
Type used to represent sizes in the digital space.
BOOST_CONCEPT_ASSERT((concepts::CInteger< TInteger >))
Integer must be signed to characterize a ring.
const Point & sKCoords(const SCell &c) const
Return its Khalimsky coordinates.
void sSetCoord(SCell &c, Dimension k, Integer i) const
Sets the [k]-th digital coordinate of [c] to [i].
Cell uGetAdd(const Cell &p, Dimension k, Integer x) const
Return the same element as [p] except for a coordinate [k] incremented with x.
Integer sFirst(const SPreCell &p, Dimension k) const
Return the k-th coordinate of the first cell of the space with the same type as [p].
SCell sGetMax(SCell p, Dimension k) const
Useful to check if you are going out of the space.
bool uIsSurfel(const Cell &b) const
Return 'true' if [b] is a surfel (spans all but one coordinate).
Integer uFirst(const PreCell &p, Dimension k) const
Return the k-th Khalimsky coordinate of the first cell of the space with the same type as [p].
KhalimskySpaceND & operator=(const KhalimskySpaceND &other)=default
Copy operator.
bool sIsValid(const SPreCell &c) const
Returns true if the given signed cell has Khalimsky coordinates between those of the cells returned b...
SCell sTranslation(const SCell &p, const Vector &vec) const
Add the vector [vec] to [p].
SCell sDirectIncident(const SCell &p, Dimension k) const
Return the direct incident cell of [p] along [k] (the incident cell along [k])
void uAddCoFaces(Cells &cofaces, const Cell &c, Dimension axis) const
Used by uCoFaces for computing incident cofaces.
bool uIsOpen(const Cell &p, Dimension k) const
Return 'true' if [p] is open along the direction [k].
std::set< Cell > CellSet
Preferred type for defining a set of Cell(s).
SCell sCell(const Point &kp, Sign sign=POS) const
From the Khalimsky coordinates of a cell and a sign, builds the corresponding signed cell lying into ...
void uSetCoord(Cell &c, Dimension k, Integer i) const
Sets the [k]-th digital coordinate of [c] to [i].
bool sIsSurfel(const SCell &b) const
Return 'true' if [b] is a surfel (spans all but one coordinate).
const Point & upperBound() const
Return the upper bound for digital points in this space.
bool init(const Point &lower, const Point &upper, Closure closure)
Specifies the upper and lower bounds for the maximal cells in this space.
Closure
Boundaries closure type.
@ CLOSED
The dimension is closed and non-periodic.
@ OPEN
The dimension is open.
@ PERIODIC
The dimension is periodic.
SpaceND< dim, Integer > Space
SCells sNeighborhood(const SCell &cell) const
Computes the 1-neighborhood of the cell [c] and returns it.
typename PreCellularGridSpace::template AnyCellCollection< CellType > AnyCellCollection
bool sIsInside(const SPreCell &p, Dimension k) const
Useful to check if you are going out of the space.
bool isAnyDimensionPeriodic() const
Return 'true' iff the space is periodic along at least one dimension.
bool uIsValid(const PreCell &c, Dimension k) const
Returns true if the given unsigned cell has his k-th Khalimsky coordinate between those of the cells ...
Integer sCoord(const SCell &c, Dimension k) const
Return its digital coordinate along [k].
SCell sFirst(const SPreCell &p) const
Return the first cell of the space with the same type as [p].
AnyCellCollection< SCell > SCells
bool uIsMin(const Cell &p, Dimension k) const
Useful to check if you are going out of the space.
DirIterator sOrthDirs(const SCell &p) const
Given a signed cell [p], returns an iterator to iterate over each coordinate the cell does not span.
Sign sSign(const SCell &c) const
Return its sign.
Dimension uDim(const Cell &p) const
Return the dimension of the cell [p].
Cell uGetSub(const Cell &p, Dimension k, Integer x) const
Return the same element as [p] except for a coordinate [k] decremented with x.
Cell uAdjacent(const Cell &p, Dimension k, bool up) const
Return the adjacent element to [p] along axis [k] in the given direction and orientation.
Point uCoords(const Cell &c) const
Return its digital coordinates.
KhalimskySpaceND< dim, Integer > CellularGridSpace
Cell uGetMin(Cell p, Dimension k) const
Useful to check if you are going out of the space.
SCell sPointel(Point p, Sign sign=POS) const
From the digital coordinates of a point in Zn, builds the corresponding pointel (cell of dimension 0)...
bool isSpaceClosed(Dimension k) const
Return 'true' iff the space is closed or periodic along the specified dimension.
Integer uDistanceToMax(const Cell &p, Dimension k) const
Useful to check if you are going out of the space (for non-periodic dimensions).
bool init(const Point &lower, const Point &upper, const std::array< Closure, dim > &closure)
Specifies the upper and lower bounds for the maximal cells in this space.
Integer sDistanceToMax(const SCell &p, Dimension k) const
Useful to check if you are going out of the space (for non-periodic dimensions).
PointVector< dim, Integer > Vector
bool sIsOpen(const SCell &p, Dimension k) const
Return 'true' if [p] is open along the direction [k].
bool cIsInside(const Point &p, Dimension k) const
Useful to check if you are going out of the space.
SCell sIncident(const SCell &c, Dimension k, bool up) const
Return the forward or backward signed cell incident to [c] along axis [k], depending on [up].
KhalimskyPreCell< dim, Integer > PreCell
static const constexpr Dimension dimension
typename PreCellularGridSpace::DirIterator DirIterator
Point exteriorVoxel(const SCell &c) const
For a given surfel ((n-1)-signed cell), returns its exterior voxel (point in Z^d given by the indirec...
std::set< SCell > SCellSet
Preferred type for defining a set of SCell(s).
Dimension sDim(const SCell &p) const
Return the dimension of the cell [p].
bool cIsValid(const Point &p, Dimension k) const
Returns true if the given cell has his k-th Khalimsky coordinate between those of the cells returned ...
Cell uCell(Point p, const PreCell &c) const
From the digital coordinates of a point in Zn and a cell type, builds the corresponding unsigned cell...
Cell uLast(const PreCell &p) const
Return the last cell of the space with the same type as [p].
void sSetKCoord(SCell &c, Dimension k, Integer i) const
Sets the [k]-th Khalimsky coordinate of [c] to [i].
KhalimskyCell< dim, Integer > Cell
SCell sGetIncr(const SCell &p, Dimension k) const
Return the same element as [p] except for the incremented coordinate [k].
bool isSpacePeriodic(Dimension k) const
Return 'true' iff the space is periodic along the specified dimension.
AnyCellCollection< Cell > Cells
DGtal is the top-level namespace which contains all DGtal functions and types.
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
DGtal::uint32_t Dimension
boost::int32_t int32_t
signed 32-bit integer.
Represents an (unsigned) cell in a cellular grid space by its Khalimsky coordinates.
bool operator!=(const KhalimskyCell &other) const
Difference operator.
KhalimskyCell(const KhalimskyCell &other)=default
Copy constructor.
KhalimskyCell(const Point &aPoint)
Explicit constructor from its Khalimsky coordinates.
KhalimskyCell & operator=(const KhalimskyCell &other)=default
Copy operator.
std::string className() const
Return the style name used for drawing this object.
PreCell myPreCell
Underlying pre-cell.
typename NumberTraits< Integer >::UnsignedVersion UnsignedInteger
bool operator<(const KhalimskyCell &other) const
Inferior operator. (lexicographic order).
KhalimskyCell & operator=(KhalimskyCell &&other)=default
Move operator.
BOOST_CONCEPT_ASSERT((concepts::CInteger< TInteger >))
Integer must be a model of the concept CInteger.
KhalimskyCell(Integer dummy=0)
Default constructor.
KhalimskyCell(KhalimskyCell &&other)=default
Move constructor.
bool operator==(const KhalimskyCell &other) const
Equality operator.
PreCell const & preCell() const
Returns the underlying constant pre-cell.
KhalimskyCell(const PreCell &aCell)
Explicit constructor from a KhalimskyPreCell.
std::map< Cell, Value > Type
std::map< SCell, Value > Type
std::map< SCell, Value > Type
Represents a signed cell in a cellular grid space by its Khalimsky coordinates and a boolean value.
bool operator<(const SignedKhalimskyCell &other) const
Inferior operator. (lexicographic order).
SignedKhalimskyCell & operator=(SignedKhalimskyCell &&other)=default
Move operator.
std::string className() const
Return the style name used for drawing this object.
SignedKhalimskyCell(const Point &aPoint, bool positive)
Explicit constructor from its Khalimsky coordinates.
typename NumberTraits< Integer >::UnsignedVersion UnsignedInteger
SignedKhalimskyCell(SignedKhalimskyCell &&other)=default
Move constructor.
SPreCell mySPreCell
Underlying signed pre-cell.
bool operator!=(const SignedKhalimskyCell &other) const
Difference operator.
BOOST_CONCEPT_ASSERT((concepts::CInteger< TInteger >))
Integer must be a model of the concept CInteger.
bool operator==(const SignedKhalimskyCell &other) const
Equality operator.
SignedKhalimskyCell(const SPreCell &aCell)
Explicit constructor from a SignedKhalimskyPreCell.
SignedKhalimskyCell & operator=(const SignedKhalimskyCell &other)=default
Copy operator.
SignedKhalimskyCell(const SignedKhalimskyCell &other)=default
Copy constructor.
SPreCell const & preCell() const
Returns the underlying constant signed pre-cell.
SignedKhalimskyCell(Integer dummy=0)
Default constructor.
Aim: Concept checking for Integer Numbers. More precisely, this concept is a refinement of both CEucl...
Vector lower(const Vector &z, unsigned int k)
Vector upper(const Vector &z, unsigned int k)