Skip to content

Commit 2d9bcde

Browse files
committed
fix: don't add to fixed edges if the edge is invalid
1 parent 62a98b2 commit 2d9bcde

1 file changed

Lines changed: 25 additions & 2 deletions

File tree

src/mesh.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,39 @@ TriMesh::TriMesh(const pybind11::array_t<double> &vertices,
7777
}
7878
void TriMesh::init(){
7979
_fixedEdges = collect_border_edges(_mesh);
80+
std::cout << "Found " << _fixedEdges.size() << " fixed edges." << std::endl;
8081
_edge_is_constrained_map = CGAL::make_boolean_property_map(_fixedEdges);
8182
}
8283

8384

8485
void TriMesh::add_fixed_edges(const pybind11::array_t<int> &pairs) {
86+
if (!CGAL::is_valid_polygon_mesh(_mesh))
87+
{
88+
std::cerr << "Mesh is not valid!" << std::endl;
89+
}
8590
// Convert std::set<std::array<int, 2>> to std::set<TriangleMesh::Edge_index>
8691
auto pairs_buf = pairs.unchecked<2>();
92+
8793
for (ssize_t i = 0; i < pairs_buf.shape(0); ++i) {
88-
TriangleMesh::Edge_index e = _mesh.edge(_mesh.halfedge(TriangleMesh::Vertex_index(pairs_buf(i, 0)),
89-
TriangleMesh::Vertex_index(pairs_buf(i, 1))));
94+
TriangleMesh::Vertex_index v0 = TriangleMesh::Vertex_index(pairs_buf(i, 1));
95+
TriangleMesh::Vertex_index v1 = TriangleMesh::Vertex_index(pairs_buf(i, 0));
96+
if (!_mesh.is_valid(v0) || !_mesh.is_valid(v1)) {
97+
std::cerr << "Invalid vertex indices: (" << v0 << ", " << v1 << ")" << std::endl;
98+
continue; // Skip invalid vertex pairs
99+
}
100+
TriangleMesh::Halfedge_index edge = _mesh.halfedge(TriangleMesh::Vertex_index(pairs_buf(i, 0)),
101+
TriangleMesh::Vertex_index(pairs_buf(i, 1)));
102+
if (edge == TriangleMesh::null_halfedge())
103+
{
104+
std::cerr << "Half-edge is null for vertices (" << v1 << ", " << v0 << ")" << std::endl;
105+
continue;
106+
}
107+
if (!_mesh.is_valid(edge)) {
108+
std::cerr << "Invalid half-edge for vertices (" << v0 << ", " << v1 << ")" << std::endl;
109+
continue; // Skip invalid edges
110+
}
111+
TriangleMesh::Edge_index e = _mesh.edge(edge);
112+
90113
_fixedEdges.insert(e);
91114
// if (e.is_valid()) {
92115
// _fixedEdges.insert(e);

0 commit comments

Comments
 (0)