DGtal 1.4.0
Loading...
Searching...
No Matches
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.

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
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}
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
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
KhalimskyPreSpaceND< 2, Integer > KPreSpace
Definition StdDefs.h:83
Trace trace
Definition Common.h:153
static void draw(DGtal::Board2D &board, const DGtal::DiscreteExteriorCalculus< dimEmbedded, dimAmbient, TLinearAlgebraBackend, TInteger > &calculus)
Modifier class in a Board2D stream. Useful to choose your own mode for a given class....
Definition Board2D.h:247
KSpace K

References DGtal::Trace::beginBlock(), DGtal::HyperRectDomain< TSpace >::className(), DGtal::Display2DFactory::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().