Skip to content

Commit cd06ebd

Browse files
committed
working version of the degeneration inspector for surfacemeshes
1 parent 322f0d9 commit cd06ebd

File tree

3 files changed

+67
-7
lines changed

3 files changed

+67
-7
lines changed

include/geode/inspector/criterion/degeneration.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ namespace geode
4444
class opengeode_inspector_inspector_api SurfaceMeshDegeneration
4545
{
4646
public:
47-
SurfaceMeshDegeneration() = default;
47+
SurfaceMeshDegeneration();
4848
SurfaceMeshDegeneration( SurfaceMeshDegeneration&& other );
4949
~SurfaceMeshDegeneration();
5050

src/geode/inspector/criterion/degeneration.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ namespace geode
6767
index_t nb_degenerated_edges(
6868
const SurfaceMesh< dimension >& mesh ) const
6969
{
70-
index_t nb_degeneration;
70+
index_t nb_degeneration = 0;
7171

7272
mesh.enable_edges();
7373
for( auto edge_index : Range( mesh.edges().nb_edges() ) )
@@ -109,6 +109,11 @@ namespace geode
109109
}
110110
};
111111

112+
template < index_t dimension >
113+
SurfaceMeshDegeneration< dimension >::SurfaceMeshDegeneration()
114+
{
115+
}
116+
112117
template < index_t dimension >
113118
SurfaceMeshDegeneration< dimension >::~SurfaceMeshDegeneration()
114119
{

tests/inspector/test-degeneration.cpp

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,13 @@
2626

2727
#include <geode/geometry/point.h>
2828
#include <geode/mesh/builder/triangulated_surface_builder.h>
29+
#include <geode/mesh/core/surface_edges.h>
2930
#include <geode/mesh/core/triangulated_surface.h>
3031

3132
#include <geode/inspector/criterion/degeneration.h>
3233

34+
#include <iostream>
35+
3336
void check_non_degeneration()
3437
{
3538
auto surface = geode::TriangulatedSurface2D::create();
@@ -43,22 +46,74 @@ void check_non_degeneration()
4346
builder->create_triangle( { 0, 1, 2 } );
4447
builder->create_triangle( { 2, 1, 3 } );
4548

49+
geode::inspector::SurfaceMeshDegeneration2D degeneration_inspector;
50+
OPENGEODE_EXCEPTION(
51+
!degeneration_inspector.is_mesh_degenerated( *surface ),
52+
"[Test] Surface is shown degenerated whereas it is not." );
53+
OPENGEODE_EXCEPTION(
54+
degeneration_inspector.nb_degenerated_edges( *surface ) == 0,
55+
"[Test] Surface has more degenerated edges than it should." );
56+
OPENGEODE_EXCEPTION(
57+
degeneration_inspector.degenerated_edges( *surface ).size() == 0,
58+
"[Test] Surface has degenerated edges when it should have none." );
59+
}
60+
61+
void check_degeneration_by_colocalisation()
62+
{
63+
auto surface = geode::TriangulatedSurface2D::create();
64+
auto builder = geode::TriangulatedSurfaceBuilder2D::create( *surface );
65+
builder->create_vertices( 4 );
66+
builder->set_point( 0, { { 0., 2. } } );
67+
builder->set_point( 1, { { 2., 0. } } );
68+
builder->set_point( 2, { { 1., 4. } } );
69+
builder->set_point( 3, { { 2., geode::global_epsilon / 2 } } );
70+
71+
builder->create_triangle( { 0, 1, 2 } );
72+
builder->create_triangle( { 2, 1, 3 } );
73+
surface->enable_edges();
74+
4675
geode::inspector::SurfaceMeshDegeneration2D degeneration_inspector;
4776
OPENGEODE_EXCEPTION( degeneration_inspector.is_mesh_degenerated( *surface ),
48-
"[Test] Surface is shown degenerated whereas it is not" );
77+
"[Test] Surface is shown not degenerated whereas it is." );
4978
OPENGEODE_EXCEPTION(
50-
degeneration_inspector.nb_degenerated_edges( *surface ) != 0,
51-
"[Test] Surface is shown degenerated whereas it is not" );
79+
degeneration_inspector.nb_degenerated_edges( *surface ) == 1,
80+
"[Test] Surface has wrong number of degenerated edges." );
81+
OPENGEODE_EXCEPTION( degeneration_inspector.degenerated_edges( *surface )[0]
82+
== surface->edges().edge_from_vertices( { 1, 3 } ),
83+
"[Test] Surface has wrong degenerated edges." );
84+
}
85+
86+
void check_degeneration_by_point_multiple_presence()
87+
{
88+
auto surface = geode::TriangulatedSurface2D::create();
89+
auto builder = geode::TriangulatedSurfaceBuilder2D::create( *surface );
90+
builder->create_vertices( 4 );
91+
builder->set_point( 0, { { 0., 2. } } );
92+
builder->set_point( 1, { { 2., 0. } } );
93+
builder->set_point( 2, { { 1., 4. } } );
94+
95+
builder->create_triangle( { 0, 1, 2 } );
96+
builder->create_triangle( { 1, 2, 1 } );
97+
surface->enable_edges();
98+
99+
geode::inspector::SurfaceMeshDegeneration2D degeneration_inspector;
100+
OPENGEODE_EXCEPTION( degeneration_inspector.is_mesh_degenerated( *surface ),
101+
"[Test] Surface is not shown degenerated whereas it is." );
52102
OPENGEODE_EXCEPTION(
53-
degeneration_inspector.degenerated_edges( *surface ).size() != 0,
54-
"[Test] Surface is shown degenerated whereas it is not" );
103+
degeneration_inspector.nb_degenerated_edges( *surface ) == 1,
104+
"[Test] Surface has the wrong number of degenerated edges." );
105+
OPENGEODE_EXCEPTION( degeneration_inspector.degenerated_edges( *surface )[0]
106+
== surface->edges().edge_from_vertices( { 1, 1 } ),
107+
"[Test] Surface shows the wrong degenerated edges." );
55108
}
56109

57110
int main()
58111
{
59112
try
60113
{
61114
check_non_degeneration();
115+
check_degeneration_by_colocalisation();
116+
check_degeneration_by_point_multiple_presence();
62117

63118
geode::Logger::info( "TEST SUCCESS" );
64119
return 0;

0 commit comments

Comments
 (0)