54SCENARIO(
"IndexedDigitalSurface< DigitalSetBoundary > build tests",
"[idxdsurf][build]" )
58 Point p1( -5, -5, -5 );
61 K.
init( p1, p2,
true );
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" ) {
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 );
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 );
82 THEN(
"Vertices corresponds to surfels, Arcs to linels, Faces to pointels" ) {
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 ) ) );
96 THEN(
"Breadth-first visiting the digital surface from vertex 0 goes to a distance 13." ) {
98 std::vector<int> vertices;
99 std::vector<int> distances;
102 vertices.push_back( visitor.
current().first );
103 distances.push_back( visitor.
current().second );
106 REQUIRE( vertices.size() == 174 );
107 REQUIRE( distances.size() == 174 );
108 REQUIRE( distances.back() == 13 );
bool init(const Point &lower, const Point &upper, bool isClosed)
Specifies the upper and lower bounds for the maximal cells in this space.