DGtal  1.3.beta
Functions
testIndexedDigitalSurface.cpp File Reference
#include <iostream>
#include <algorithm>
#include "DGtal/base/Common.h"
#include "ConfigTest.h"
#include "DGtalCatch.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/kernel/PointVector.h"
#include "DGtal/graph/CUndirectedSimpleGraph.h"
#include "DGtal/graph/BreadthFirstVisitor.h"
#include "DGtal/topology/DigitalSetBoundary.h"
#include "DGtal/topology/IndexedDigitalSurface.h"
#include "DGtal/shapes/Shapes.h"
Include dependency graph for testIndexedDigitalSurface.cpp:

Go to the source code of this file.

Functions

 SCENARIO ("IndexedDigitalSurface< DigitalSetBoundary > build tests", "[idxdsurf][build]")
 
 SCENARIO ("IndexedDigitalSurface< RealPoint3 > concept check tests", "[idxdsurf][concepts]")
 

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
Jacques-Olivier Lachaud (jacqu.nosp@m.es-o.nosp@m.livie.nosp@m.r.la.nosp@m.chaud.nosp@m.@uni.nosp@m.v-sav.nosp@m.oie..nosp@m.fr ) Laboratory of Mathematics (CNRS, UMR 5127), University of Savoie, France
Date
2017/02/06

Functions for testing class IndexedDigitalSurface.

This file is part of the DGtal library.

Definition in file testIndexedDigitalSurface.cpp.

Function Documentation

◆ SCENARIO() [1/2]

SCENARIO ( "IndexedDigitalSurface< DigitalSetBoundary > build tests"  ,
""  [idxdsurf][build] 
)

Definition at line 54 of file testIndexedDigitalSurface.cpp.

55 {
56  typedef DigitalSetBoundary< KSpace, DigitalSet > DigitalSurfaceContainer;
58  Point p1( -5, -5, -5 );
59  Point p2( 5, 5, 5 );
60  KSpace K;
61  K.init( p1, p2, true );
62  DigitalSet aSet( Domain( p1, p2 ) );
63  Shapes<Domain>::addNorm2Ball( aSet, Point( 0, 0, 0 ), 3 );
64  DigSurface dsurf;
65  bool build_ok = dsurf.build( new DigitalSurfaceContainer( K, aSet ) );
66  GIVEN( "A digital set boundary over a ball of radius 3" ) {
67  THEN( "Build of underlying half-edge data structure should be ok" ) {
68  REQUIRE( build_ok == true );
69  }
70  THEN( "The indexed digital surface has 174 vertices, 348 edges, 176 edges, and Euler=2 as the sphere" ) {
71  REQUIRE( dsurf.nbVertices() == 174 );
72  REQUIRE( dsurf.nbEdges() == 348 );
73  REQUIRE( dsurf.nbFaces() == 176 );
74  REQUIRE( dsurf.Euler() == 2 );
75  }
76  THEN( "All vertices have 4 neighbors" ) {
77  REQUIRE( dsurf.degree( 0 ) == 4 );
78  REQUIRE( dsurf.degree( 17 ) == 4 );
79  REQUIRE( dsurf.degree( 54) == 4 );
80  REQUIRE( dsurf.degree( 102 ) == 4 );
81  }
82  THEN( "Vertices corresponds to surfels, Arcs to linels, Faces to pointels" ) {
83  REQUIRE( K.sDim( dsurf.surfel( 0 ) ) == 2 );
84  REQUIRE( K.sDim( dsurf.surfel( 17 ) ) == 2 );
85  REQUIRE( K.sDim( dsurf.linel( 0 ) ) == 1 );
86  REQUIRE( K.sDim( dsurf.linel( 25 ) ) == 1 );
87  REQUIRE( K.sDim( dsurf.pointel( 0 ) ) == 0 );
88  REQUIRE( K.sDim( dsurf.pointel( 25 ) ) == 0 );
89  }
90  THEN( "Linels of opposite arcs are opposite cells" ) {
91  REQUIRE( K.sOpp( dsurf.linel( 15 ) ) == dsurf.linel( dsurf.opposite( 15 ) ) );
92  REQUIRE( K.sOpp( dsurf.linel( 34 ) ) == dsurf.linel( dsurf.opposite( 34 ) ) );
93  REQUIRE( K.sOpp( dsurf.linel( 112 ) ) == dsurf.linel( dsurf.opposite( 112 ) ) );
94  REQUIRE( K.sOpp( dsurf.linel( 200 ) ) == dsurf.linel( dsurf.opposite( 200 ) ) );
95  }
96  THEN( "Breadth-first visiting the digital surface from vertex 0 goes to a distance 13." ) {
97  BreadthFirstVisitor< DigSurface > visitor( dsurf, 0 );
98  std::vector<int> vertices;
99  std::vector<int> distances;
100  while ( ! visitor.finished() )
101  {
102  vertices.push_back( visitor.current().first );
103  distances.push_back( visitor.current().second );
104  visitor.expand();
105  }
106  REQUIRE( vertices.size() == 174 );
107  REQUIRE( distances.size() == 174 );
108  REQUIRE( distances.back() == 13 );
109  }
110  }
111 }

References DGtal::BreadthFirstVisitor< TGraph, TMarkSet >::current(), DGtal::BreadthFirstVisitor< TGraph, TMarkSet >::expand(), DGtal::BreadthFirstVisitor< TGraph, TMarkSet >::finished(), GIVEN(), DGtal::KhalimskySpaceND< dim, TInteger >::init(), K, REQUIRE(), DGtal::KhalimskySpaceND< dim, TInteger >::sDim(), and DGtal::KhalimskySpaceND< dim, TInteger >::sOpp().

◆ SCENARIO() [2/2]

SCENARIO ( "IndexedDigitalSurface< RealPoint3 > concept check tests"  ,
""  [idxdsurf][concepts] 
)

Definition at line 113 of file testIndexedDigitalSurface.cpp.

114 {
115  typedef DigitalSetBoundary< KSpace, DigitalSet > DigitalSurfaceContainer;
117  BOOST_CONCEPT_ASSERT(( concepts::CUndirectedSimpleGraph< DigSurface > ));
118 }
DGtal::IndexedDigitalSurface
Aim: Represents a digital surface with the topology of its dual surface. Its aim is to mimick the sta...
Definition: IndexedDigitalSurface.h:96
DGtal::KhalimskySpaceND::init
bool init(const Point &lower, const Point &upper, bool isClosed)
Specifies the upper and lower bounds for the maximal cells in this space.
DGtal::DigitalSetBoundary
Aim: A model of CDigitalSurfaceContainer which defines the digital surface as the boundary of a given...
Definition: DigitalSetBoundary.h:69
DGtal::BreadthFirstVisitor
Aim: This class is useful to perform a breadth-first exploration of a graph given a starting point or...
Definition: BreadthFirstVisitor.h:94
K
KSpace K
Definition: testCubicalComplex.cpp:62
REQUIRE
REQUIRE(domain.isInside(aPoint))
boost::vertices
std::pair< typename graph_traits< DGtal::DigitalSurface< TDigitalSurfaceContainer > >::vertex_iterator, typename graph_traits< DGtal::DigitalSurface< TDigitalSurfaceContainer > >::vertex_iterator > vertices(const DGtal::DigitalSurface< TDigitalSurfaceContainer > &digSurf)
Domain
HyperRectDomain< Space > Domain
Definition: testSimpleRandomAccessRangeFromPoint.cpp:44
DGtal::concepts::CUndirectedSimpleGraph
Aim: Represents the concept of local graph: each vertex has neighboring vertices, but we do not neces...
Definition: CUndirectedSimpleGraph.h:102
DGtal::Shapes
Aim: A utility class for constructing different shapes (balls, diamonds, and others).
Definition: DGtal/shapes/Shapes.h:71
DGtal::PointVector< dim, Integer >
GIVEN
GIVEN("A cubical complex with random 3-cells")
Definition: testCubicalComplex.cpp:70
DGtal::KhalimskySpaceND::sDim
Dimension sDim(const SCell &p) const
Return the dimension of the cell [p].
Point
MyPointD Point
Definition: testClone2.cpp:383
DGtal::DigitalSetByAssociativeContainer
Aim: A wrapper class around a STL associative container for storing sets of digital points within som...
Definition: DigitalSetByAssociativeContainer.h:89
DGtal::KhalimskySpaceND
Aim: This class is a model of CCellularGridSpaceND. It represents the cubical grid as a cell complex,...
Definition: KhalimskySpaceND.h:64
DGtal::KhalimskySpaceND::sOpp
SCell sOpp(const SCell &p) const
Creates the signed cell with the inverse sign of [p].