DGtal 1.3.0
Loading...
Searching...
No Matches
KhalimskySpaceND.h
1
17#pragma once
18
33#if defined(KhalimskySpaceND_RECURSES)
34#error Recursive header files inclusion detected in KhalimskySpaceND.h
35#else // defined(KhalimskySpaceND_RECURSES)
37#define KhalimskySpaceND_RECURSES
38
39#if !defined KhalimskySpaceND_h
41#define KhalimskySpaceND_h
42
44// Inclusions
45#include <iostream>
46#include <set>
47#include <map>
48#include <array>
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>
55
56namespace DGtal
57{
59 // Pre-declaration
60 template <
62 typename TInteger = DGtal::int32_t
63 >
64 class KhalimskySpaceND;
65
67
70 template < class TKhalimskySpace >
72
74
80 template < Dimension dim,
81 typename TInteger = DGtal::int32_t >
83 {
84
87
88
89 // Aliases
90 public:
91 using Integer = TInteger;
98
99 // Friendship
100 friend class KhalimskySpaceND< dim, TInteger >;
102
103 private:
106
107 private:
108
113 explicit KhalimskyCell( const Point & aPoint );
114
119 explicit KhalimskyCell( const PreCell & aCell );
120
121 public:
123 operator PreCell const& () const;
124
126 PreCell const& preCell() const;
127
128 private:
130 explicit operator PreCell & ();
131
132 public:
136 explicit KhalimskyCell( Integer dummy = 0 );
137
141 KhalimskyCell( const KhalimskyCell & other ) = default;
142
146 KhalimskyCell & operator=( const KhalimskyCell & other ) = default;
147
151 KhalimskyCell( KhalimskyCell && other ) = default;
152
156 KhalimskyCell & operator=( KhalimskyCell && other ) = default;
157
162 bool operator==( const KhalimskyCell & other ) const;
163
168 bool operator!=( const KhalimskyCell & other ) const;
169
174 bool operator<( const KhalimskyCell & other ) const;
175
176 // --------------- CDrawableWithBoard2D realization -------------------
177 public:
178
183 //DrawableWithBoard2D* defaultStyle( std::string mode = "" ) const;
184
188 std::string className() const;
189
190 };
191
192 template < Dimension dim,
193 typename TInteger >
194 std::ostream &
195 operator<<( std::ostream & out,
196 const KhalimskyCell< dim, TInteger > & object );
197
198
200
206 template < Dimension dim,
207 typename TInteger = DGtal::int32_t >
209 {
212
213 // Aliases
214 public:
215 using Integer = TInteger;
222
223 // Friendship
224 friend class KhalimskySpaceND< dim, TInteger >;
226
227 private:
230
231 private:
237 explicit SignedKhalimskyCell( const Point & aPoint, bool positive );
238
243 explicit SignedKhalimskyCell( const SPreCell & aCell );
244
245 public:
247 operator SPreCell const& () const;
248
250 SPreCell const& preCell() const;
251
252 private:
254 explicit operator SPreCell & ();
255
256 public:
260 explicit SignedKhalimskyCell( Integer dummy = 0 );
261
265 SignedKhalimskyCell( const SignedKhalimskyCell & other ) = default;
266
271
276
281
286 bool operator==( const SignedKhalimskyCell & other ) const;
287
292 bool operator!=( const SignedKhalimskyCell & other ) const;
293
298 bool operator<( const SignedKhalimskyCell & other ) const;
299
300 // --------------- CDrawableWithBoard2D realization -------------------
301 public:
302
307 //DrawableWithBoard2D* defaultStyle( std::string mode = "" ) const;
308
313 std::string className() const;
314
315 };
316
317 template < Dimension dim,
318 typename TInteger >
319 std::ostream &
320 operator<<( std::ostream & out,
322
324 // template class KhalimskySpaceND
388 template <
390 typename TInteger
391 >
393 : private KhalimskySpaceNDHelper< KhalimskySpaceND< dim, TInteger > >
394 {
395
397 friend class KhalimskySpaceNDHelper< KhalimskySpaceND< dim, TInteger > >;
398
401
402 public:
404 typedef TInteger Integer;
405
408
409 // Spaces
413
414 // Cells
419
420 typedef SCell Surfel;
421 typedef bool Sign;
423
424 // Points and Vectors
427
428
429 // static constants
430 static const constexpr Dimension dimension = dim;
431 static const constexpr Dimension DIM = dim;
432 static const constexpr Sign POS = true;
433 static const constexpr Sign NEG = false;
434
435 template < typename CellType >
436 using AnyCellCollection = typename PreCellularGridSpace::template AnyCellCollection< CellType >;
437
438 // Neighborhoods, Incident cells, Faces and Cofaces
441
442 // Sets, Maps
444 typedef std::set<Cell> CellSet;
445
447 typedef std::set<SCell> SCellSet;
448
450 typedef std::set<SCell> SurfelSet;
451
454 template <typename Value> struct CellMap {
455 typedef std::map<Cell,Value> Type;
456 };
457
460 template <typename Value> struct SCellMap {
461 typedef std::map<SCell,Value> Type;
462 };
463
466 template <typename Value> struct SurfelMap {
467 typedef std::map<SCell,Value> Type;
468 };
469
472 {
475 PERIODIC
476 };
477
478 // ----------------------- Standard services ------------------------------
482 public:
483
486
489
494 KhalimskySpaceND ( const KhalimskySpaceND & other ) = default;
495
501 KhalimskySpaceND & operator= ( const KhalimskySpaceND & other ) = default;
502
507 KhalimskySpaceND ( KhalimskySpaceND && other ) = default;
508
515
526 bool init( const Point & lower,
527 const Point & upper,
528 bool isClosed );
529
541 bool init( const Point & lower,
542 const Point & upper,
543 Closure closure );
544
556 bool init( const Point & lower,
557 const Point & upper,
558 const std::array<Closure, dim> & closure );
559
561
562 // ------------------------- Basic services ------------------------------
566 public:
567
574 Size size( Dimension k ) const;
575
583
591
597 const Point & lowerBound() const;
598
604 const Point & upperBound() const;
605
611 const Cell & lowerCell() const;
612
618 const Cell & upperCell() const;
619
632 bool uIsValid( const PreCell & c, Dimension k ) const;
633
645 bool uIsValid( const PreCell & c ) const;
646
659 bool sIsValid( const SPreCell & c, Dimension k ) const;
660
672 bool sIsValid( const SPreCell & c ) const;
673
684 bool cIsValid( const Point & p, Dimension k ) const;
685
695 bool cIsValid( const Point & p ) const;
696
698
699 // ----------------------- Closure type query --------------------------
703 public:
704
709 bool isSpaceClosed() const;
710
716 bool isSpaceClosed( Dimension k ) const;
717
722 bool isSpacePeriodic() const;
723
729 bool isSpacePeriodic( Dimension k ) const;
730
736
742
744
745 // ----------------------- Cell creation services --------------------------
749 public:
750
765 Cell uCell( const PreCell & c ) const;
766
780 Cell uCell( const Point & kp ) const;
781
797 Cell uCell( Point p, const PreCell & c ) const;
798
813 SCell sCell( const SPreCell & c ) const;
814
829 SCell sCell( const Point & kp, Sign sign = POS ) const;
830
846 SCell sCell( Point p, const SPreCell & c ) const;
847
861 Cell uSpel( Point p ) const;
862
877 SCell sSpel( Point p, Sign sign = POS ) const;
878
892 Cell uPointel( Point p ) const;
893
909 SCell sPointel( Point p, Sign sign = POS ) const;
910
912
913 // ----------------------- Read accessors to cells ------------------------
917 public:
925 Integer uKCoord( const Cell & c, Dimension k ) const;
926
934 Integer uCoord( const Cell & c, Dimension k ) const;
935
942 const Point & uKCoords( const Cell & c ) const;
943
950 Point uCoords( const Cell & c ) const;
951
959 Integer sKCoord( const SCell & c, Dimension k ) const;
960
968 Integer sCoord( const SCell & c, Dimension k ) const;
969
976 const Point & sKCoords( const SCell & c ) const;
977
984 Point sCoords( const SCell & c ) const;
985
992 Sign sSign( const SCell & c ) const;
993
995
996 // ----------------------- Write accessors to cells ------------------------
1000 public:
1001
1010 void uSetKCoord( Cell & c, Dimension k, Integer i ) const;
1011
1020 void sSetKCoord( SCell & c, Dimension k, Integer i ) const;
1021
1030 void uSetCoord( Cell & c, Dimension k, Integer i ) const;
1031
1040 void sSetCoord( SCell & c, Dimension k, Integer i ) const;
1041
1050 void uSetKCoords( Cell & c, const Point & kp ) const;
1051
1059 void sSetKCoords( SCell & c, const Point & kp ) const;
1060
1068 void uSetCoords( Cell & c, const Point & kp ) const;
1069
1077 void sSetCoords( SCell & c, const Point & kp ) const;
1078
1083 void sSetSign( SCell & c, Sign s ) const;
1084
1086
1087 // -------------------- Conversion signed/unsigned ------------------------
1091 public:
1100 SCell signs( const Cell & p, Sign s ) const;
1101
1109 Cell unsigns( const SCell & p ) const;
1110
1118 SCell sOpp( const SCell & p ) const;
1119
1121
1122 // ------------------------- Cell topology services -----------------------
1126 public:
1132 Integer uTopology( const Cell & p ) const;
1133
1139 Integer sTopology( const SCell & p ) const;
1140
1146 Dimension uDim( const Cell & p ) const;
1147
1153 Dimension sDim( const SCell & p ) const;
1154
1160 bool uIsSurfel( const Cell & b ) const;
1161
1167 bool sIsSurfel( const SCell & b ) const;
1168
1175 bool uIsOpen( const Cell & p, Dimension k ) const;
1176
1183 bool sIsOpen( const SCell & p, Dimension k ) const;
1184
1186
1187 // -------------------- Iterator services for cells ------------------------
1191 public:
1192
1214 DirIterator uDirs( const Cell & p ) const;
1215
1237 DirIterator sDirs( const SCell & p ) const;
1238
1260 DirIterator uOrthDirs( const Cell & p ) const;
1261
1283 DirIterator sOrthDirs( const SCell & p ) const;
1284
1291 Dimension uOrthDir( const Cell & s ) const;
1292
1299 Dimension sOrthDir( const SCell & s ) const;
1300
1302
1303 // -------------------- Unsigned cell geometry services --------------------
1307 public:
1308
1315 Integer uFirst( const PreCell & p, Dimension k ) const;
1316
1323 Cell uFirst( const PreCell & p ) const;
1324
1331 Integer uLast( const PreCell & p, Dimension k ) const;
1332
1339 Cell uLast( const PreCell & p ) const;
1340
1351 Cell uGetIncr( const Cell & p, Dimension k ) const;
1352
1362 bool uIsMax( const Cell & p, Dimension k ) const;
1363
1364
1372 bool uIsInside( const PreCell & p, Dimension k ) const;
1373
1374
1381 bool uIsInside( const PreCell & p ) const;
1382
1390 bool cIsInside( const Point & p, Dimension k ) const;
1391
1392
1399 bool cIsInside( const Point & p ) const;
1400
1411
1422 Cell uGetDecr( const Cell & p, Dimension k ) const;
1423
1433 bool uIsMin( const Cell & p, Dimension k ) const;
1434
1445
1446
1458 Cell uGetAdd( const Cell & p, Dimension k, Integer x ) const;
1459
1471 Cell uGetSub( const Cell & p, Dimension k, Integer x ) const;
1472
1480 Integer uDistanceToMax( const Cell & p, Dimension k ) const;
1481
1490 Integer uDistanceToMin( const Cell & p, Dimension k ) const;
1491
1500 Cell uTranslation( const Cell & p, const Vector & vec ) const;
1501
1514 Cell uProjection( const Cell & p, const Cell & bound, Dimension k ) const;
1515
1527 void uProject( Cell & p, const Cell & bound, Dimension k ) const;
1528
1552 bool uNext( Cell & p, const Cell & lower, const Cell & upper ) const;
1553
1555
1556 // -------------------- Signed cell geometry services --------------------
1560 public:
1561
1568 Integer sFirst( const SPreCell & p, Dimension k ) const;
1569
1576 SCell sFirst( const SPreCell & p ) const;
1577
1584 Integer sLast( const SPreCell & p, Dimension k ) const;
1585
1592 SCell sLast( const SPreCell & p ) const;
1593
1604 SCell sGetIncr( const SCell & p, Dimension k ) const;
1605
1615 bool sIsMax( const SCell & p, Dimension k ) const;
1616
1624 bool sIsInside( const SPreCell & p, Dimension k ) const;
1625
1632 bool sIsInside( const SPreCell & p ) const;
1633
1644
1655 SCell sGetDecr( const SCell & p, Dimension k ) const;
1656
1666 bool sIsMin( const SCell & p, Dimension k ) const;
1667
1678
1690 SCell sGetAdd( const SCell & p, Dimension k, Integer x ) const;
1691
1703 SCell sGetSub( const SCell & p, Dimension k, Integer x ) const;
1704
1712 Integer sDistanceToMax( const SCell & p, Dimension k ) const;
1713
1722 Integer sDistanceToMin( const SCell & p, Dimension k ) const;
1723
1732 SCell sTranslation( const SCell & p, const Vector & vec ) const;
1733
1746 SCell sProjection( const SCell & p, const SCell & bound, Dimension k ) const;
1747
1759 void sProject( SCell & p, const SCell & bound, Dimension k ) const;
1760
1784 bool sNext( SCell & p, const SCell & lower, const SCell & upper ) const;
1785
1787
1788 // ----------------------- Neighborhood services --------------------------
1792 public:
1793
1805 Cells uNeighborhood( const Cell & cell ) const;
1806
1818 SCells sNeighborhood( const SCell & cell ) const;
1819
1832 Cells uProperNeighborhood( const Cell & cell ) const;
1833
1846 SCells sProperNeighborhood( const SCell & cell ) const;
1847
1861 Cell uAdjacent( const Cell & p, Dimension k, bool up ) const;
1862
1876 SCell sAdjacent( const SCell & p, Dimension k, bool up ) const;
1877
1879
1880 // ----------------------- Incidence services --------------------------
1884 public:
1885
1900 Cell uIncident( const Cell & c, Dimension k, bool up ) const;
1901
1919 SCell sIncident( const SCell & c, Dimension k, bool up ) const;
1920
1928 Cells uLowerIncident( const Cell & c ) const;
1929
1937 Cells uUpperIncident( const Cell & c ) const;
1938
1947 SCells sLowerIncident( const SCell & c ) const;
1948
1957 SCells sUpperIncident( const SCell & c ) const;
1958
1966 Cells uFaces( const Cell & c ) const;
1967
1975 Cells uCoFaces( const Cell & c ) const;
1976
1993 bool sDirect( const SCell & p, Dimension k ) const;
1994
2006 SCell sDirectIncident( const SCell & p, Dimension k ) const;
2007
2020
2021
2022
2029 Point interiorVoxel( const SCell & c ) const;
2030
2037 Point exteriorVoxel( const SCell & c ) const;
2038
2040
2041 // ----------------------- Interface --------------------------------------
2045 public:
2046
2051 void selfDisplay ( std::ostream & out ) const;
2052
2057 bool isValid() const;
2058
2060
2061 // ------------------------- Protected Datas ------------------------------
2062 private:
2063 // ------------------------- Private Datas --------------------------------
2064 private:
2069 std::array<Closure, dimension> myClosure;
2070
2071 // ------------------------- Hidden services ------------------------------
2072 protected:
2073
2074
2075 private:
2076
2077
2078
2079 // ------------------------- Internals ------------------------------------
2083 private:
2085 void uAddFaces( Cells& faces, const Cell& c, Dimension axis ) const;
2086
2088 void uAddCoFaces( Cells& cofaces, const Cell& c, Dimension axis ) const;
2089
2091
2092 }; // end of class KhalimskySpaceND
2093
2094
2101 template < Dimension dim,
2102 typename TInteger >
2103 std::ostream&
2104 operator<< ( std::ostream & out,
2105 const KhalimskySpaceND<dim, TInteger > & object );
2106
2107} // namespace DGtal
2108
2109
2111// Includes inline functions.
2112#include "DGtal/topology/KhalimskySpaceND.ih"
2113
2114// //
2116
2117#endif // !defined KhalimskySpaceND_h
2118
2119#undef KhalimskySpaceND_RECURSES
2120#endif // else defined(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(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
Definition: Common.h:137
boost::int32_t int32_t
signed 32-bit integer.
Definition: BasicTypes.h:72
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::decay< T >::type UnsignedVersion
Alias to the unsigned version of the number type.
Definition: NumberTraits.h:90
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...
Definition: CInteger.h:88
const Point aPoint(3, 4)
Vector lower(const Vector &z, unsigned int k)
Vector upper(const Vector &z, unsigned int k)