You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

38 lines
1.0 KiB

import numpy as np
from occwl.solid import Solid
from occwl.viewer import Viewer
from occwl.graph import vertex_adjacency
example = Solid.make_box(10, 10, 10)
# example = Solid.make_sphere(10, (0, 0, 0))
g = vertex_adjacency(example, self_loops=True)
print(f"Number of nodes (vertices): {len(g.nodes)}")
print(f"Number of edges: {len(g.edges)}")
v = Viewer(backend="wx")
v.display(example, transparency=0.5)
# Get the points for each vertex
points = {}
for vert_idx in g.nodes:
pt = g.nodes[vert_idx]["vertex"].point()
points[vert_idx] = pt
v.display(Solid.make_sphere(center=pt, radius=0.25))
# Make a cylinder for each edge connecting a pair of vertices
for vi, vj in g.edges:
pt1 = points[vi]
pt2 = points[vj]
up_dir = pt2 - pt1
if np.linalg.norm(up_dir) < 1e-6:
# This must be a loop with one Vertex
continue
v.display(
Solid.make_cylinder(
radius=0.2, height=np.linalg.norm(up_dir), base_point=pt1, up_dir=up_dir
)
)
# Show the viewer
v.fit()
v.show()