DGtal  0.9.3
Functions
khalimskySpaceScanner.cpp File Reference
#include <iostream>
#include "DGtal/base/Common.h"
#include "DGtal/topology/KhalimskySpaceND.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/io/Color.h"
#include "DGtal/io/boards/Board2D.h"
Include dependency graph for khalimskySpaceScanner.cpp:

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
Bertrand Kerautret (kerau.nosp@m.tre@.nosp@m.loria.nosp@m..fr ) LORIA (CNRS, UMR 7503), University of Nancy, France
Date
2011/04/30

An example file named KhalimskySpaceScanner.

This file is part of the DGtal library.

Definition in file khalimskySpaceScanner.cpp.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 62 of file khalimskySpaceScanner.cpp.

References DGtal::Trace::beginBlock(), DGtal::HyperRectDomain< TSpace >::className(), draw(), DGtal::Trace::info(), DGtal::KhalimskySpaceND< dim, TInteger >::init(), K, DGtal::HyperRectDomain< TSpace >::lowerBound(), LibBoard::Board::saveFIG(), LibBoard::Board::saveSVG(), LibBoard::Board::setPenColor(), DGtal::trace, DGtal::KhalimskySpaceND< dim, TInteger >::uCell(), DGtal::KhalimskySpaceND< dim, TInteger >::uCoords(), DGtal::KhalimskySpaceND< dim, TInteger >::uFirst(), DGtal::KhalimskySpaceND< dim, TInteger >::uGetMax(), DGtal::KhalimskySpaceND< dim, TInteger >::uIsInside(), DGtal::KhalimskySpaceND< dim, TInteger >::uLast(), DGtal::KhalimskySpaceND< dim, TInteger >::uNext(), DGtal::HyperRectDomain< TSpace >::upperBound(), and DGtal::KhalimskySpaceND< dim, TInteger >::uSpel().

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 }
void beginBlock(const std::string &keyword="")
Trace trace
Definition: Common.h:137
Cell uGetMax(Cell p, Dimension k) const
Aim: This class is a model of CPreCellularGridSpaceND. It represents the cubical grid as a cell compl...
void saveSVG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
Definition: Board.cpp:1012
Cell uSpel(Point p) const
bool init(const Point &lower, const Point &upper, bool isClosed)
Cell uCell(const PreCell &c) const
Point uCoords(const Cell &c) const
std::ostream & info()
Modifier class in a Board2D stream. Useful to choose your own mode for a given class. Realizes the concept CDrawableWithBoard2D.
Definition: Board2D.h:247
Structure representing an RGB triple with alpha component.
Definition: Color.h:66
Board & setPenColor(const DGtal::Color &color)
Definition: Board.cpp:298
bool uIsInside(const PreCell &p, Dimension k) const
KSpace K
KSpace::Cell Cell
bool uNext(Cell &p, const Cell &lower, const Cell &upper) const
Aim: This class is a model of CCellularGridSpaceND. It represents the cubical grid as a cell complex...
void saveFIG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0, bool includeFIGHeader=true) const
Definition: Board.cpp:907
Integer uLast(const PreCell &p, Dimension k) const
void draw(const Iterator &itb, const Iterator &ite, Board &aBoard)
Integer uFirst(const PreCell &p, Dimension k) const
Aim: This class specializes a &#39;Board&#39; class so as to display DGtal objects more naturally (with <<)...
Definition: Board2D.h:70