Skip to content

Commit 09131c0

Browse files
committed
feat(Degeneration): adding degeneration inspection function with tolerance argument.
1 parent 8823375 commit 09131c0

File tree

12 files changed

+173
-16
lines changed

12 files changed

+173
-16
lines changed

bindings/python/src/inspector/criterion/degeneration/edgedcurve_degeneration.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,13 @@ namespace geode
4040
.def( "is_mesh_degenerated",
4141
&EdgedCurveDegeneration::is_mesh_degenerated )
4242
.def( "degenerated_edges",
43-
&EdgedCurveDegeneration::degenerated_edges );
43+
[]( EdgedCurveDegeneration& self ) {
44+
return self.degenerated_edges();
45+
} )
46+
.def( "degenerated_edges",
47+
[]( EdgedCurveDegeneration& self, double tolerance ) {
48+
return self.degenerated_edges( tolerance );
49+
} );
4450
}
4551
void define_edged_curve_degeneration( pybind11::module& module )
4652
{

bindings/python/src/inspector/criterion/degeneration/surface_degeneration.hpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,21 @@ namespace geode
4040
.def( "is_mesh_degenerated",
4141
&SurfaceMeshDegeneration::is_mesh_degenerated )
4242
.def( "degenerated_edges",
43-
&SurfaceMeshDegeneration::degenerated_edges )
43+
[]( SurfaceMeshDegeneration& self ) {
44+
return self.degenerated_edges();
45+
} )
46+
.def( "degenerated_edges",
47+
[]( SurfaceMeshDegeneration& self, double tolerance ) {
48+
return self.degenerated_edges( tolerance );
49+
} )
50+
.def( "degenerated_polygons",
51+
[]( SurfaceMeshDegeneration& self ) {
52+
return self.degenerated_polygons();
53+
} )
4454
.def( "degenerated_polygons",
45-
&SurfaceMeshDegeneration::degenerated_polygons );
55+
[]( SurfaceMeshDegeneration& self, double tolerance ) {
56+
return self.degenerated_polygons( tolerance );
57+
} );
4658
}
4759
void define_surface_degeneration( pybind11::module& module )
4860
{

include/geode/inspector/criterion/degeneration/brep_meshes_degeneration.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,15 @@ namespace geode
7474
[[nodiscard]] BRepMeshesDegenerationInspectionResult
7575
inspect_elements_degeneration() const;
7676

77+
[[nodiscard]] BRepMeshesDegenerationInspectionResult
78+
inspect_polygons_degeneration( double tolerance ) const;
79+
80+
[[nodiscard]] BRepMeshesDegenerationInspectionResult
81+
inspect_edges_degeneration( double tolerance ) const;
82+
83+
[[nodiscard]] BRepMeshesDegenerationInspectionResult
84+
inspect_polyhedra_degeneration() const;
85+
7786
private:
7887
IMPLEMENTATION_MEMBER( impl_ );
7988
};

include/geode/inspector/criterion/degeneration/edgedcurve_degeneration.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ namespace geode
5252

5353
[[nodiscard]] InspectionIssues< index_t > degenerated_edges() const;
5454

55+
[[nodiscard]] InspectionIssues< index_t > degenerated_edges(
56+
double tolerance ) const;
57+
5558
private:
5659
IMPLEMENTATION_MEMBER( impl_ );
5760
};

include/geode/inspector/criterion/degeneration/surface_degeneration.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,14 @@ namespace geode
5151

5252
[[nodiscard]] bool is_mesh_degenerated() const;
5353

54+
[[nodiscard]] InspectionIssues< index_t > degenerated_edges(
55+
double tolerance ) const;
56+
5457
[[nodiscard]] InspectionIssues< index_t > degenerated_edges() const;
5558

59+
[[nodiscard]] InspectionIssues< index_t > degenerated_polygons(
60+
double tolerance ) const;
61+
5662
[[nodiscard]] InspectionIssues< index_t > degenerated_polygons() const;
5763

5864
private:

include/geode/inspector/criterion/internal/component_meshes_degeneration.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,17 @@ namespace geode
5151
void add_degenerated_edges(
5252
InspectionIssuesMap< index_t >& issues_map ) const;
5353

54+
void add_degenerated_edges(
55+
InspectionIssuesMap< index_t >& issues_map,
56+
double tolerance ) const;
57+
5458
void add_degenerated_polygons(
5559
InspectionIssuesMap< index_t >& issues_map ) const;
5660

61+
void add_degenerated_polygons(
62+
InspectionIssuesMap< index_t >& issues_map,
63+
double tolerance ) const;
64+
5765
protected:
5866
explicit ComponentMeshesDegeneration( const Model& model );
5967

include/geode/inspector/criterion/internal/degeneration_impl.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,15 @@ namespace geode
4141

4242
[[nodiscard]] virtual bool is_mesh_degenerated() const;
4343

44+
[[nodiscard]] InspectionIssues< index_t > degenerated_edges(
45+
double tolerance ) const;
46+
4447
[[nodiscard]] InspectionIssues< index_t > degenerated_edges() const;
4548

4649
private:
50+
[[nodiscard]] bool edge_is_degenerated(
51+
index_t edge_index, double tolerance ) const;
52+
4753
[[nodiscard]] bool edge_is_degenerated( index_t edge_index ) const;
4854

4955
protected:

src/geode/inspector/criterion/degeneration/brep_meshes_degeneration.cpp

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ namespace geode
7676
{
7777
}
7878

79-
void add_solid_degenerations(
79+
void add_degenerated_polyhedra(
8080
InspectionIssuesMap< index_t >& degenerated_edges_map,
8181
InspectionIssuesMap< index_t >& degenerated_polyhedra_map ) const
8282
{
@@ -112,8 +112,37 @@ namespace geode
112112
BRepMeshesDegenerationInspectionResult result;
113113
impl_->add_degenerated_edges( result.degenerated_edges );
114114
impl_->add_degenerated_polygons( result.degenerated_polygons );
115-
impl_->add_solid_degenerations(
115+
impl_->add_degenerated_polyhedra(
116116
result.degenerated_edges, result.degenerated_polyhedra );
117117
return result;
118118
}
119+
120+
BRepMeshesDegenerationInspectionResult
121+
BRepComponentMeshesDegeneration::inspect_edges_degeneration(
122+
double tolerance ) const
123+
{
124+
BRepMeshesDegenerationInspectionResult result;
125+
impl_->add_degenerated_edges( result.degenerated_edges, tolerance );
126+
return result;
127+
}
128+
129+
BRepMeshesDegenerationInspectionResult
130+
BRepComponentMeshesDegeneration::inspect_polygons_degeneration(
131+
double tolerance ) const
132+
{
133+
BRepMeshesDegenerationInspectionResult result;
134+
impl_->add_degenerated_polygons(
135+
result.degenerated_polygons, tolerance );
136+
return result;
137+
}
138+
139+
BRepMeshesDegenerationInspectionResult
140+
BRepComponentMeshesDegeneration::inspect_polyhedra_degeneration() const
141+
{
142+
BRepMeshesDegenerationInspectionResult result;
143+
impl_->add_degenerated_polyhedra(
144+
result.degenerated_edges, result.degenerated_polyhedra );
145+
return result;
146+
}
147+
119148
} // namespace geode

src/geode/inspector/criterion/degeneration/edgedcurve_degeneration.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ namespace geode
5151
return false;
5252
}
5353

54-
InspectionIssues< index_t > degenerated_edges() const
54+
InspectionIssues< index_t > degenerated_edges( double tolerance ) const
5555
{
5656
InspectionIssues< index_t > degenerated_edges_index{
5757
"Degenerated Edges of EdgeCurve " + mesh_.id().string() + "."
5858
};
5959
for( const auto edge_id : Range{ mesh_.nb_edges() } )
6060
{
61-
if( mesh_.is_edge_degenerated( edge_id ) )
61+
if( mesh_.is_edge_degenerated( edge_id, tolerance ) )
6262
{
6363
degenerated_edges_index.add_issue(
6464
edge_id, absl::StrCat( "Edge with index ", edge_id,
@@ -70,6 +70,11 @@ namespace geode
7070
return degenerated_edges_index;
7171
}
7272

73+
InspectionIssues< index_t > degenerated_edges() const
74+
{
75+
return degenerated_edges( GLOBAL_EPSILON );
76+
}
77+
7378
private:
7479
const EdgedCurve< dimension >& mesh_;
7580
};
@@ -90,6 +95,14 @@ namespace geode
9095
return impl_->is_mesh_degenerated();
9196
}
9297

98+
template < index_t dimension >
99+
InspectionIssues< index_t >
100+
EdgedCurveDegeneration< dimension >::degenerated_edges(
101+
double tolerance ) const
102+
{
103+
return impl_->degenerated_edges( tolerance );
104+
}
105+
93106
template < index_t dimension >
94107
InspectionIssues< index_t >
95108
EdgedCurveDegeneration< dimension >::degenerated_edges() const

src/geode/inspector/criterion/degeneration/surface_degeneration.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,16 @@ namespace geode
6363
return false;
6464
}
6565

66-
InspectionIssues< index_t > degenerated_polygons() const
66+
InspectionIssues< index_t > degenerated_polygons(
67+
double tolerance ) const
6768
{
6869
InspectionIssues< index_t > wrong_polygons{
6970
"Degenerated Polygons."
7071
};
7172
for( const auto polygon_id : Range{ this->mesh().nb_polygons() } )
7273
{
73-
if( this->mesh().is_polygon_degenerated( polygon_id ) )
74+
if( this->mesh().is_polygon_degenerated(
75+
polygon_id, tolerance ) )
7476
{
7577
wrong_polygons.add_issue( polygon_id,
7678
absl::StrCat( "Polygon ", polygon_id, " of Surface ",
@@ -79,6 +81,11 @@ namespace geode
7981
}
8082
return wrong_polygons;
8183
}
84+
85+
InspectionIssues< index_t > degenerated_polygons() const
86+
{
87+
return degenerated_polygons( GLOBAL_EPSILON );
88+
}
8289
};
8390

8491
template < index_t dimension >
@@ -97,6 +104,14 @@ namespace geode
97104
return impl_->is_mesh_degenerated();
98105
}
99106

107+
template < index_t dimension >
108+
InspectionIssues< index_t >
109+
SurfaceMeshDegeneration< dimension >::degenerated_edges(
110+
double tolerance ) const
111+
{
112+
return impl_->degenerated_edges( tolerance );
113+
}
114+
100115
template < index_t dimension >
101116
InspectionIssues< index_t >
102117
SurfaceMeshDegeneration< dimension >::degenerated_edges() const
@@ -111,6 +126,14 @@ namespace geode
111126
return impl_->degenerated_polygons();
112127
}
113128

129+
template < index_t dimension >
130+
InspectionIssues< index_t >
131+
SurfaceMeshDegeneration< dimension >::degenerated_polygons(
132+
double tolerance ) const
133+
{
134+
return impl_->degenerated_polygons( tolerance );
135+
}
136+
114137
template class opengeode_inspector_inspector_api
115138
SurfaceMeshDegeneration< 2 >;
116139
template class opengeode_inspector_inspector_api

0 commit comments

Comments
 (0)