feat(tools): Added winding visualization
A simple python helper script has been added to aid developers in visualizing the winding order of vertices
This commit is contained in:
46
tools/python/visualize_winding.py
Normal file
46
tools/python/visualize_winding.py
Normal file
@@ -0,0 +1,46 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user