def split(mesh, only_watertight=True, adjacency=None):
'''
Given a mesh, will split it up into a list of meshes based on face connectivity
If only_watertight is true, it will only return meshes where each face has
exactly 3 adjacent faces.
Arguments
----------
mesh: Trimesh
only_watertight: if True, only return watertight components
adjacency: (n,2) list of face adjacency to override using the plain
adjacency calculated automatically.
Returns
----------
meshes: list of Trimesh objects
'''
def split_nx():
adjacency_graph = nx.from_edgelist(adjacency)
components = nx.connected_components(adjacency_graph)
result = mesh.submesh(components, only_watertight=only_watertight)
return result
def split_gt():
g = GTGraph()
g.add_edge_list(adjacency)
component_labels = label_components(g, directed=False)[0].a
components = group(component_labels)
result = mesh.submesh(components, only_watertight=only_watertight)
return result
if adjacency is None:
adjacency = mesh.face_adjacency
if _has_gt:
return split_gt()
else:
return split_nx()
评论列表
文章目录