@@ -77,16 +77,39 @@ TriMesh::TriMesh(const pybind11::array_t<double> &vertices,
7777}
7878void 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
8485void 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