open3d寻找mesh的边缘

首先需要从mesh中创建一个o3d.geometry.HalfEdgeTriangleMesh
import open3d as o3d

mesh_temp = o3d.geometry.TriangleMesh()
mesh_temp.vertices = o3d.utility.Vector3dVector(mesh.vertices)
mesh_temp.triangles = o3d.utility.Vector3iVector(mesh.vertex_indices)
half_edge_mesh = o3d.geometry.HalfEdgeTriangleMesh.create_from_triangle_mesh(mesh_temp)



其次从half_edge_mesh中获取边缘列表:
boundary_list = half_edge_mesh.get_boundaries() 

但是该库对于halfedge的定义是比较严格的,如果有非流形面,或者一边被三个以上的面共享,则该mesh无法建立半边结构mesh,会有形如下列的问题告警:

RuntimeError: [Open3D Error] (class std::shared_ptr<class open3d::geometry::HalfEdgeTriangleMesh> __cdecl open3d::geometry::HalfEdgeTriangleMesh::CreateFromTriangleMesh(const class open3d::geometry::TriangleMesh &)) D:\a\Open3D\Open3D\cpp\open3d\geometry\HalfEdgeTriangleMesh.cpp:202: ComputeHalfEdges failed. Duplicated half-edges.
 

此时也不要慌,可以采用igl库来做边界的查找,具体代码如下:

如果想查找最长边界:

bourdary_vert_id = igl.boundary_loop(mesh_c.vertex_indices)

如果想找到全部边界Edge:

b_edgess = igl.boundary_facets(mesh_c.vertex_indices)

扫描二维码关注公众号,回复: 14616391 查看本文章

猜你喜欢

转载自blog.csdn.net/chenguowen21/article/details/124415821