DGtal  1.5.beta
khalimskySpaceScanner.cpp
Go to the documentation of this file.
1 
48 #include <iostream>
49 #include "DGtal/base/Common.h"
50 #include "DGtal/topology/KhalimskySpaceND.h"
51 #include "DGtal/helpers/StdDefs.h"
52 #include "DGtal/io/Color.h"
53 #include "DGtal/io/boards/Board2D.h"
54 
56 
57 using namespace std;
58 using namespace DGtal;
59 
61 
62 int main( int argc, char** argv )
63 {
64  trace.beginBlock ( "Example KhalimskySpaceScanner" );
65  trace.info() << "Args:";
66  for ( int i = 0; i < argc; ++i )
67  trace.info() << " " << argv[ i ];
68  trace.info() << endl;
69 
70 
71  Board2D boardScan1; // for 2D display
72  Board2D boardScan2; // for 2D display
73 
74 
75  Z2i::KSpace K;
76  Z2i::Point plow(0,0);
77  Z2i::Point pup(3,2);
78 
79  Z2i::Domain dom (plow, pup);
80  boardScan1 << SetMode( dom.className(), "Paving" )
81  << dom;
82  boardScan2 << SetMode( dom.className(), "Paving" )
83  << dom;
84 
85  K.init( dom.lowerBound(),dom.upperBound(), true );
86 
87 
88 
89  Z2i::KSpace::Cell q = K.uSpel(plow);
90  Z2i::KSpace::Cell p = K.uSpel(plow);
91 
92 
93  Z2i::Vector shift;
94  Z2i::KSpace::Cell prec=p;
95  bool first=true;
96  // Simple way to scan Khalimsky space
97  do
98  {
99  boardScan1 << p;
100  if(first){
101  first=false;
102  prec=p;
103  continue;
104  }
105  // Drawing the scan arrows
106  boardScan1.setPenColor( Color( 30, 30, 200 ));
107  shift = K.uCoords(p)-K.uCoords(prec);
108  Display2DFactory::draw(boardScan1, shift, K.uCoords(prec));
109  prec=p;
110  }
111  while ( K.uNext( p, K.uFirst(p), K.uLast(p) ) );
112 
113 
114 
115 
116  // Other way to scan Khalimsky space by controlling axis order
117  Z2i::Vector shiftq;
118  Z2i::KSpace::Cell precq = q;
119  bool firstq = true;
120  using KPS = Z2i::KPreSpace;
121  for ( KPS::Cell qq = K.uGetMax(q, 0); K.uIsInside(qq, 0); qq = KPS::uGetDecr(qq, 0) )
122  {
123  for ( KPS::uSetKCoord( qq, K.uFirst( qq, 1 ), 1 ); K.uIsInside(qq, 1); qq = KPS::uGetIncr(qq, 1) )
124  {
125  q = K.uCell( qq );
126  boardScan2 << q;
127  if(firstq){
128  firstq = false;
129  precq = q;
130  continue;
131  }
132  // Drawing the scan arrows
133  shiftq = K.uCoords(q) - K.uCoords(precq);
134  boardScan2.setPenColor( Color( 30, 30, 200 ));
135  Display2DFactory::draw(boardScan2, shiftq, K.uCoords(precq));
136  precq = q;
137  }
138  }
139 
140  boardScan1.saveSVG("khalimskySpaceScanner1.svg");
141  boardScan1.saveFIG("khalimskySpaceScanner1.fig");
142 
143  boardScan2.saveSVG("khalimskySpaceScanner2.svg");
144  boardScan2.saveFIG("khalimskySpaceScanner2.fig");
145 
146  return 0;
147 
148 }
149 // //
151 
Aim: This class specializes a 'Board' class so as to display DGtal objects more naturally (with <<)....
Definition: Board2D.h:71
Structure representing an RGB triple with alpha component.
Definition: Color.h:68
const Point & lowerBound() const
const Point & upperBound() const
std::string className() const
Aim: This class is a model of CPreCellularGridSpaceND. It represents the cubical grid as a cell compl...
Aim: This class is a model of CCellularGridSpaceND. It represents the cubical grid as a cell complex,...
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.
bool init(const Point &lower, const Point &upper, bool isClosed)
Specifies the upper and lower bounds for the maximal cells in this space.
Cell uGetMax(Cell p, Dimension k) const
Useful to check if you are going out of the space.
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).
Cell uCell(const PreCell &c) const
From an unsigned cell, returns an unsigned cell lying into this Khalismky space.
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].
Point uCoords(const Cell &c) const
Return its digital coordinates.
void beginBlock(const std::string &keyword="")
std::ostream & info()
Board & setPenColor(const DGtal::Color &color)
Definition: Board.cpp:297
void saveFIG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0, bool includeFIGHeader=true) const
Definition: Board.cpp:906
void saveSVG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
Definition: Board.cpp:1011
int main(int argc, char **argv)
DGtal is the top-level namespace which contains all DGtal functions and types.
Trace trace
Definition: Common.h:153
Modifier class in a Board2D stream. Useful to choose your own mode for a given class....
Definition: Board2D.h:247
KSpace K
KSpace::Cell Cell
void draw(const Iterator &itb, const Iterator &ite, Board &aBoard)