1234567891011121314151617181920212223242526272829303132333435363738394041 |
- from vedo import show
- import trimesh
- import networkx as nx
- # test on a sphere mesh
- mesh = trimesh.primitives.Sphere()
- # edges without duplication
- edges = mesh.edges_unique
- # the actual length of each unique edge
- length = mesh.edges_unique_length
- # create the graph with edge attributes for length
- g = nx.Graph()
- for edge, L in zip(edges, length):
- g.add_edge(*edge, length=L)
- # alternative method for weighted graph creation
- ga = nx.from_edgelist([(e[0], e[1], {"length": L}) for e, L in zip(edges, length)])
- # arbitrary indices of mesh.vertices to test with
- start = 0
- end = int(len(mesh.vertices) / 2.0)
- # run the shortest path query using length for edge weight
- path = nx.shortest_path(g, source=start, target=end, weight="length")
- ################################### VISUALIZE RESULT
- # make the sphere transparent-ish
- mesh.visual.face_colors = [150, 150, 180, 255]
- # Path3D with the path between the points
- path_visual = trimesh.load_path(mesh.vertices[path])
- # visualizable two points
- points_visual = trimesh.points.PointCloud(mesh.vertices[[start, end]])
- txt = 'Shortest path query\nusing length for edge weight'
- show(mesh, points_visual, path_visual, txt, axes=6).close()
|