DGtal 1.4.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
477
478 // ----------------------- Standard services ------------------------------
482 public:
483
486
489
500 const Point & upper,
501 bool isClosed );
502
507 KhalimskySpaceND ( const KhalimskySpaceND & other ) = default;
508
514 KhalimskySpaceND & operator= ( const KhalimskySpaceND & other ) = default;
515
520 KhalimskySpaceND ( KhalimskySpaceND && other ) = default;
521
528
539 bool init( const Point & lower,
540 const Point & upper,
541 bool isClosed );
542
554 bool init( const Point & lower,
555 const Point & upper,
556 Closure closure );
557
569 bool init( const Point & lower,
570 const Point & upper,
571 const std::array<Closure, dim> & closure );
572
574
575 // ------------------------- Basic services ------------------------------
579 public:
580
587 Size size( Dimension k ) const;
588
596
604
610 const Point & lowerBound() const;
611
617 const Point & upperBound() const;
618
624 const Cell & lowerCell() const;
625
631 const Cell & upperCell() const;
632
645 bool uIsValid( const PreCell & c, Dimension k ) const;
646
658 bool uIsValid( const PreCell & c ) const;
659
672 bool sIsValid( const SPreCell & c, Dimension k ) const;
673
685 bool sIsValid( const SPreCell & c ) const;
686
697 bool cIsValid( const Point & p, Dimension k ) const;
698
708 bool cIsValid( const Point & p ) const;
709
711
712 // ----------------------- Closure type query --------------------------
716 public:
717
722 bool isSpaceClosed() const;
723
729 bool isSpaceClosed( Dimension k ) const;
730
735 bool isSpacePeriodic() const;
736
742 bool isSpacePeriodic( Dimension k ) const;
743
749
755
757
758 // ----------------------- Cell creation services --------------------------
762 public:
763
778 Cell uCell( const PreCell & c ) const;
779
793 Cell uCell( const Point & kp ) const;
794
810 Cell uCell( Point p, const PreCell & c ) const;
811
826 SCell sCell( const SPreCell & c ) const;
827
842 SCell sCell( const Point & kp, Sign sign = POS ) const;
843
859 SCell sCell( Point p, const SPreCell & c ) const;
860
874 Cell uSpel( Point p ) const;
875
890 SCell sSpel( Point p, Sign sign = POS ) const;
891
905 Cell uPointel( Point p ) const;
906
922 SCell sPointel( Point p, Sign sign = POS ) const;
923
925
926 // ----------------------- Read accessors to cells ------------------------
930 public:
938 Integer uKCoord( const Cell & c, Dimension k ) const;
939
947 Integer uCoord( const Cell & c, Dimension k ) const;
948
955 const Point & uKCoords( const Cell & c ) const;
956
963 Point uCoords( const Cell & c ) const;
964
972 Integer sKCoord( const SCell & c, Dimension k ) const;
973
981 Integer sCoord( const SCell & c, Dimension k ) const;
982
989 const Point & sKCoords( const SCell & c ) const;
990
997 Point sCoords( const SCell & c ) const;
998
1005 Sign sSign( const SCell & c ) const;
1006
1008
1009 // ----------------------- Write accessors to cells ------------------------
1013 public:
1014
1023 void uSetKCoord( Cell & c, Dimension k, Integer i ) const;
1024
1033 void sSetKCoord( SCell & c, Dimension k, Integer i ) const;
1034
1043 void uSetCoord( Cell & c, Dimension k, Integer i ) const;
1044
1053 void sSetCoord( SCell & c, Dimension k, Integer i ) const;
1054
1063 void uSetKCoords( Cell & c, const Point & kp ) const;
1064
1072 void sSetKCoords( SCell & c, const Point & kp ) const;
1073
1081 void uSetCoords( Cell & c, const Point & kp ) const;
1082
1090 void sSetCoords( SCell & c, const Point & kp ) const;
1091
1096 void sSetSign( SCell & c, Sign s ) const;
1097
1099
1100 // -------------------- Conversion signed/unsigned ------------------------
1104 public:
1113 SCell signs( const Cell & p, Sign s ) const;
1114
1122 Cell unsigns( const SCell & p ) const;
1123
1131 SCell sOpp( const SCell & p ) const;
1132
1134
1135 // ------------------------- Cell topology services -----------------------
1139 public:
1145 Integer uTopology( const Cell & p ) const;
1146
1152 Integer sTopology( const SCell & p ) const;
1153
1159 Dimension uDim( const Cell & p ) const;
1160
1166 Dimension sDim( const SCell & p ) const;
1167
1173 bool uIsSurfel( const Cell & b ) const;
1174
1180 bool sIsSurfel( const SCell & b ) const;
1181
1188 bool uIsOpen( const Cell & p, Dimension k ) const;
1189
1196 bool sIsOpen( const SCell & p, Dimension k ) const;
1197
1199
1200 // -------------------- Iterator services for cells ------------------------
1204 public:
1205
1227 DirIterator uDirs( const Cell & p ) const;
1228
1250 DirIterator sDirs( const SCell & p ) const;
1251
1273 DirIterator uOrthDirs( const Cell & p ) const;
1274
1296 DirIterator sOrthDirs( const SCell & p ) const;
1297
1304 Dimension uOrthDir( const Cell & s ) const;
1305
1312 Dimension sOrthDir( const SCell & s ) const;
1313
1315
1316 // -------------------- Unsigned cell geometry services --------------------
1320 public:
1321
1328 Integer uFirst( const PreCell & p, Dimension k ) const;
1329
1336 Cell uFirst( const PreCell & p ) const;
1337
1344 Integer uLast( const PreCell & p, Dimension k ) const;
1345
1352 Cell uLast( const PreCell & p ) const;
1353
1364 Cell uGetIncr( const Cell & p, Dimension k ) const;
1365
1375 bool uIsMax( const Cell & p, Dimension k ) const;
1376
1377
1385 bool uIsInside( const PreCell & p, Dimension k ) const;
1386
1387
1394 bool uIsInside( const PreCell & p ) const;
1395
1403 bool cIsInside( const Point & p, Dimension k ) const;
1404
1405
1412 bool cIsInside( const Point & p ) const;
1413
1424
1435 Cell uGetDecr( const Cell & p, Dimension k ) const;
1436
1446 bool uIsMin( const Cell & p, Dimension k ) const;
1447
1458
1459
1471 Cell uGetAdd( const Cell & p, Dimension k, Integer x ) const;
1472
1484 Cell uGetSub( const Cell & p, Dimension k, Integer x ) const;
1485
1493 Integer uDistanceToMax( const Cell & p, Dimension k ) const;
1494
1503 Integer uDistanceToMin( const Cell & p, Dimension k ) const;
1504
1513 Cell uTranslation( const Cell & p, const Vector & vec ) const;
1514
1527 Cell uProjection( const Cell & p, const Cell & bound, Dimension k ) const;
1528
1540 void uProject( Cell & p, const Cell & bound, Dimension k ) const;
1541
1565 bool uNext( Cell & p, const Cell & lower, const Cell & upper ) const;
1566
1568
1569 // -------------------- Signed cell geometry services --------------------
1573 public:
1574
1581 Integer sFirst( const SPreCell & p, Dimension k ) const;
1582
1589 SCell sFirst( const SPreCell & p ) const;
1590
1597 Integer sLast( const SPreCell & p, Dimension k ) const;
1598
1605 SCell sLast( const SPreCell & p ) const;
1606
1617 SCell sGetIncr( const SCell & p, Dimension k ) const;
1618
1628 bool sIsMax( const SCell & p, Dimension k ) const;
1629
1637 bool sIsInside( const SPreCell & p, Dimension k ) const;
1638
1645 bool sIsInside( const SPreCell & p ) const;
1646
1657
1668 SCell sGetDecr( const SCell & p, Dimension k ) const;
1669
1679 bool sIsMin( const SCell & p, Dimension k ) const;
1680
1691
1703 SCell sGetAdd( const SCell & p, Dimension k, Integer x ) const;
1704
1716 SCell sGetSub( const SCell & p, Dimension k, Integer x ) const;
1717
1725 Integer sDistanceToMax( const SCell & p, Dimension k ) const;
1726
1735 Integer sDistanceToMin( const SCell & p, Dimension k ) const;
1736
1745 SCell sTranslation( const SCell & p, const Vector & vec ) const;
1746
1759 SCell sProjection( const SCell & p, const SCell & bound, Dimension k ) const;
1760
1772 void sProject( SCell & p, const SCell & bound, Dimension k ) const;
1773
1797 bool sNext( SCell & p, const SCell & lower, const SCell & upper ) const;
1798
1800
1801 // ----------------------- Neighborhood services --------------------------
1805 public:
1806
1818 Cells uNeighborhood( const Cell & cell ) const;
1819
1831 SCells sNeighborhood( const SCell & cell ) const;
1832
1845 Cells uProperNeighborhood( const Cell & cell ) const;
1846
1859 SCells sProperNeighborhood( const SCell & cell ) const;
1860
1874 Cell uAdjacent( const Cell & p, Dimension k, bool up ) const;
1875
1889 SCell sAdjacent( const SCell & p, Dimension k, bool up ) const;
1890
1892
1893 // ----------------------- Incidence services --------------------------
1897 public:
1898
1913 Cell uIncident( const Cell & c, Dimension k, bool up ) const;
1914
1932 SCell sIncident( const SCell & c, Dimension k, bool up ) const;
1933
1941 Cells uLowerIncident( const Cell & c ) const;
1942
1950 Cells uUpperIncident( const Cell & c ) const;
1951
1960 SCells sLowerIncident( const SCell & c ) const;
1961
1970 SCells sUpperIncident( const SCell & c ) const;
1971
1979 Cells uFaces( const Cell & c ) const;
1980
1988 Cells uCoFaces( const Cell & c ) const;
1989
2006 bool sDirect( const SCell & p, Dimension k ) const;
2007
2019 SCell sDirectIncident( const SCell & p, Dimension k ) const;
2020
2033
2034
2035
2042 Point interiorVoxel( const SCell & c ) const;
2043
2050 Point exteriorVoxel( const SCell & c ) const;
2051
2053
2054 // ----------------------- Interface --------------------------------------
2058 public:
2059
2064 void selfDisplay ( std::ostream & out ) const;
2065
2070 bool isValid() const;
2071
2073
2074 // ------------------------- Protected Datas ------------------------------
2075 private:
2076 // ------------------------- Private Datas --------------------------------
2077 private:
2082 std::array<Closure, dimension> myClosure;
2083
2084 // ------------------------- Hidden services ------------------------------
2085 protected:
2086
2087
2088 private:
2089
2090
2091
2092 // ------------------------- Internals ------------------------------------
2096 private:
2098 void uAddFaces( Cells& faces, const Cell& c, Dimension axis ) const;
2099
2101 void uAddCoFaces( Cells& cofaces, const Cell& c, Dimension axis ) const;
2102
2104
2105 }; // end of class KhalimskySpaceND
2106
2107
2114 template < Dimension dim,
2115 typename TInteger >
2116 std::ostream&
2117 operator<< ( std::ostream & out,
2118 const KhalimskySpaceND<dim, TInteger > & object );
2119
2120} // namespace DGtal
2121
2122
2124// Includes inline functions.
2125#include "DGtal/topology/KhalimskySpaceND.ih"
2126
2127// //
2129
2130#endif // !defined KhalimskySpaceND_h
2131
2132#undef KhalimskySpaceND_RECURSES
2133#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(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
Definition Common.h:136
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.
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)