DGtal 1.4.0
Loading...
Searching...
No Matches
GridCurve.h
1
17#pragma once
18
34#if defined(GridCurve_RECURSES)
35#error Recursive header files inclusion detected in GridCurve.h
36#else // defined(GridCurve_RECURSES)
38#define GridCurve_RECURSES
39
40#if !defined GridCurve_h
42#define GridCurve_h
43
45// Inclusions
46#include <iostream>
47#include <sstream>
48#include <vector>
49#include <iterator>
50#include <cstddef>
51#include <utility>
52
53#include "DGtal/base/Common.h"
54#include "DGtal/io/readers/PointListReader.h"
55#include "DGtal/base/ConstAlias.h"
56
57#include "DGtal/base/BasicFunctors.h"
58#include "DGtal/base/Circulator.h"
59#include "DGtal/base/ConstRangeAdapter.h"
60#include "DGtal/base/ConstIteratorAdapter.h"
61
62#include "DGtal/topology/CCellularGridSpaceND.h"
63#include "DGtal/topology/KhalimskySpaceND.h"
64#include "DGtal/topology/SCellsFunctors.h"
65#include "DGtal/topology/CanonicSCellEmbedder.h"
66
68
69namespace DGtal
70{
71
72
73
75 // class GridCurve
77
171 template <typename TKSpace = KhalimskySpaceND<2> >
173 {
174
175 public:
176 typedef TKSpace KSpace;
178
179 typedef typename KSpace::Point Point;
180 typedef typename KSpace::Point Vector;
181
182 typedef typename KSpace::SCell SCell;
183 typedef typename std::vector<SCell> Storage;
184
185 // ----------------------- Standard services ------------------------------
186 public:
187
192
198
204
209 GridCurve( const GridCurve & other );
210
216 GridCurve & operator=( const GridCurve & other );
217
218 // ----------------------- common ------------------------------
219
223 std::string className() const;
224
229 void selfDisplay ( std::ostream & out ) const;
230
235 bool isValid() const;
236
237 // ----------------------- streams ------------------------------
238
243 bool initFromVectorStream(std::istream & in );
244
249 void writeVectorToStream( std::ostream & out );
250
251 // ----------------------- Initializations ------------------------------
252
259 bool initFromVector( const std::vector<Point>& aVectorOfPoints );
260
266 bool initFromPointsVector( const std::vector<Point>& aVectorOfPoints );
267
273 template <typename TIterator>
274 bool initFromPointsRange( const TIterator& itb, const TIterator& ite );
275
281 bool initFromSCellsVector( const std::vector<SCell>& aVectorOfSCells );
282
288 template <typename TIterator>
289 bool initFromSCellsRange( const TIterator& itb, const TIterator& ite );
290
291
292 // ----------------------- open/closed ------------------------------
293
294
303 bool isClosed() const;
304
309 bool isOpen() const;
310
311 // ----------------------- container interface ------------------------------
312
313 typedef typename Storage::const_iterator const_iterator;
314 typedef typename Storage::const_iterator ConstIterator;
315 typedef typename Storage::const_reverse_iterator const_reverse_iterator;
316 typedef typename Storage::const_reverse_iterator ConstReverseIterator;
317
322
327
332
337
341 SCell back() const;
342
349 void push_back(const SCell& aSCell);
350
355 void pushBack(const SCell& aSCell);
356
360 typename Storage::size_type size() const;
361
362 // ------------------------- private Datas --------------------------------
363 private:
373
378
379
380 // ------------------------- Public Datas --------------------------------
381 public:
382
383
384
385 // ------------------------- Internal --------------------------------
386 private:
387
394 SCell PointVectorTo1SCell(const Point& aPoint, const Vector& aVector);
400 bool isInside(const SCell& aSCell) const;
401
402
403
404 // ------------------------- inner classes --------------------------------
405
406 public:
407
409
411
416 return SCellsRange(mySCells.begin(), mySCells.end(), new functors::Identity() );
417 }
418
420
422
429
431
433 typename KSpace::Space::RealPoint > MidPointsRange;
434
441
443
445 std::pair<Point,Vector> > ArrowsRange;
446
453
455
458
465
467
470
477
479
481 std::pair<Point, Point> > IncidentPointsRange;
482
490
492
497 return CodesRange( mySCells.begin(), mySCells.end(), new functors::SCellToCode<KSpace>(*myKPtr) );
498 }
499
500 }; // end of class GridCurve
501
502
503
510 template<typename TKSpace>
511 std::ostream&
512 operator<< ( std::ostream & out, const GridCurve<TKSpace> & object );
513
514
515} // namespace DGtal
516
517
519// Includes inline functions/methods.
520#include "DGtal/geometry/curves/GridCurve.ih"
521
522// //
524
525#endif // !defined GridCurve_h
526
527#undef GridCurve_RECURSES
528#endif // else defined(GridCurve_RECURSES)
Aim: This class encapsulates its parameter class so that to indicate to the user that the object/poin...
Definition ConstAlias.h:187
Aim: model of CConstBidirectionalRange that adapts any range of elements bounded by two iterators [it...
Aim: describes, in a cellular space of dimension n, a closed or open sequence of signed d-cells (or d...
Definition GridCurve.h:173
bool initFromPointsVector(const std::vector< Point > &aVectorOfPoints)
SCell PointVectorTo1SCell(const Point &aPoint, const Vector &aVector)
Storage::const_reverse_iterator ConstReverseIterator
Definition GridCurve.h:316
ConstRangeAdapter< typename Storage::const_iterator, functors::Identity, SCell > SCellsRange
Definition GridCurve.h:410
SCell back() const
ConstIterator begin() const
Storage::const_reverse_iterator const_reverse_iterator
Definition GridCurve.h:315
SCellsRange getSCellsRange() const
Definition GridCurve.h:415
MidPointsRange getMidPointsRange() const
Definition GridCurve.h:438
std::string className() const
bool initFromVectorStream(std::istream &in)
void selfDisplay(std::ostream &out) const
PointsRange getPointsRange() const
Definition GridCurve.h:426
ConstRangeAdapter< typename Storage::const_iterator, functors::SCellToCode< KSpace >, char > CodesRange
Definition GridCurve.h:491
ConstRangeAdapter< typename Storage::const_iterator, CanonicSCellEmbedder< KSpace >, typename KSpace::Space::RealPoint > MidPointsRange
Definition GridCurve.h:433
KSpace::Point Vector
Definition GridCurve.h:180
void pushBack(const SCell &aSCell)
Storage::const_iterator const_iterator
Definition GridCurve.h:313
ConstReverseIterator rbegin() const
ConstRangeAdapter< typename Storage::const_iterator, functors::SCellToPoint< KSpace >, Point > PointsRange
Definition GridCurve.h:421
const KSpace * myKPtr
Definition GridCurve.h:367
std::vector< SCell > Storage
Definition GridCurve.h:183
ConstRangeAdapter< typename Storage::const_iterator, functors::SCellToInnerPoint< KSpace >, Point > InnerPointsRange
Definition GridCurve.h:457
IncidentPointsRange getIncidentPointsRange() const
Definition GridCurve.h:486
KSpace::SCell SCell
Definition GridCurve.h:182
bool initFromSCellsVector(const std::vector< SCell > &aVectorOfSCells)
GridCurve(ConstAlias< KSpace > aKSpace)
void writeVectorToStream(std::ostream &out)
ArrowsRange getArrowsRange() const
Definition GridCurve.h:450
ConstRangeAdapter< typename Storage::const_iterator, functors::SCellToIncidentPoints< KSpace >, std::pair< Point, Point > > IncidentPointsRange
Definition GridCurve.h:481
ConstIterator end() const
OuterPointsRange getOuterPointsRange() const
Definition GridCurve.h:474
bool isOpen() const
bool isInside(const SCell &aSCell) const
bool initFromPointsRange(const TIterator &itb, const TIterator &ite)
Storage::size_type size() const
InnerPointsRange getInnerPointsRange() const
Definition GridCurve.h:462
GridCurve(const GridCurve &other)
bool initFromSCellsRange(const TIterator &itb, const TIterator &ite)
KSpace::Point Point
Definition GridCurve.h:179
ConstReverseIterator rend() const
GridCurve & operator=(const GridCurve &other)
GridCurve::CodesRange getCodesRange() const
Definition GridCurve.h:496
ConstRangeAdapter< typename Storage::const_iterator, functors::SCellToArrow< KSpace >, std::pair< Point, Vector > > ArrowsRange
Definition GridCurve.h:445
Storage::const_iterator ConstIterator
Definition GridCurve.h:314
bool isValid() const
BOOST_CONCEPT_ASSERT((concepts::CCellularGridSpaceND< KSpace >))
ConstRangeAdapter< typename Storage::const_iterator, functors::SCellToOuterPoint< KSpace >, Point > OuterPointsRange
Definition GridCurve.h:469
bool isClosed() const
void push_back(const SCell &aSCell)
bool initFromVector(const std::vector< Point > &aVectorOfPoints)
Aim: transforms a signed cell into an arrow, ie. a pair point-vector.
Aim: transforms a 2d signed cell, basically a linel, into a code (0,1,2 or 3),.
Aim: transforms a signed cell c into a pair of points corresponding to the signed cells of greater di...
Aim: transforms a signed cell c into a point corresponding to the signed cell of greater dimension th...
Aim: transforms a signed cell c into a point corresponding to the signed cell of greater dimension th...
Aim: transforms a scell into a point.
DGtal is the top-level namespace which contains all DGtal functions and types.
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
Aim: A trivial embedder for signed cell, which corresponds to the canonic injection of cell centroids...
Represents a signed cell in a cellular grid space by its Khalimsky coordinates and a boolean value.
Aim: This concept describes a cellular grid space in nD. In these spaces obtained by cartesian produc...
Aim: Define a simple default functor that just returns its argument.
const Point aPoint(3, 4)