Files
stroid/tools/python/visualize_winding.py
Emily Boudreaux d4fa557c64 feat(tools): Added winding visualization
A simple python helper script has been added to aid developers in visualizing the winding order of vertices
2026-03-20 13:00:45 -04:00

47 lines
1.8 KiB
Python

import matplotlib.pyplot as plt
class Box:
def __init__(self, scale, vc="red", ec="blue", offset=0):
self.scale = scale
self.offset = offset
self.verticies = [[scale, -scale, -scale], [scale, scale, -scale], [-scale, -scale, -scale], [-scale, scale, -scale], [scale, -scale, scale], [scale, scale, scale], [-scale, -scale, scale], [-scale, scale, scale]]
self.edges = [[0, 1], [0, 2], [0, 4], [1, 3], [1, 5], [3, 7], [3, 2], [2, 6], [4, 5], [4, 6], [5, 7], [7, 6]]
self.edge_color = ec
self.vertex_color = vc
def plot(self, ax, vlabel=True, elabel=False):
for vertID, vert in enumerate(self.verticies):
ax.scatter(vert[0], vert[1], vert[2], c=self.vertex_color)
if vlabel:
ax.text(vert[0], vert[1], vert[2], f"{self.offset + vertID}", fontsize=25)
for edge in self.edges:
ax.plot([self.verticies[edge[0]][0], self.verticies[edge[1]][0]], [self.verticies[edge[0]][1], self.verticies[edge[1]][1]], [self.verticies[edge[0]][2], self.verticies[edge[1]][2]], color=self.edge_color)
class Wedge:
def __init__(self, A, B, ec="green"):
self.A = A
self.B = B
self.edge_color = ec
def plot(self, ax):
for vA, vB in zip(self.A.verticies, self.B.verticies):
ax.plot([vA[0], vB[0]], [vA[1], vB[1]], [vA[2], vB[2]], color=self.edge_color)
def main():
core = Box(0.5)
envelope = Box(2, offset=8)
star = Wedge(core, envelope)
infinity = Box(5, offset=16)
vacuum = Wedge(envelope, infinity)
fig, ax = plt.subplots(1, 1, figsize=(10, 10), subplot_kw={"projection": "3d"})
core.plot(ax)
envelope.plot(ax)
star.plot(ax)
infinity.plot(ax)
vacuum.plot(ax)
ax.view_init(30, 30)
plt.show()
if __name__ == "__main__":
main()