55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
import gen_marching_cubes_conf as gen
|
|
import matplotlib.pyplot as plt
|
|
from mpl_toolkits.mplot3d import axes3d
|
|
import random
|
|
|
|
|
|
def split_pt_list(pts):
|
|
splitted = [[], [], []]
|
|
for point in pts:
|
|
for i in range(3):
|
|
splitted[i].append(point[i])
|
|
return splitted
|
|
|
|
|
|
def pt_of_edge(edge):
|
|
def avg(val0, val1):
|
|
return (val0 + val1) / 2
|
|
|
|
vert0 = edge.vert[0]
|
|
vert1 = edge.vert[1]
|
|
|
|
return (avg(vert0[0], vert1[0]),
|
|
avg(vert0[1], vert1[1]),
|
|
avg(vert0[2], vert1[2]))
|
|
|
|
|
|
def tri_repr(tri, subplt):
|
|
pts = [pt_of_edge(tri[i]) for i in range(3)]
|
|
|
|
x_val, y_val, z_val = split_pt_list(pts)
|
|
x_val = [val + random.random() / 10**5 for val in x_val]
|
|
y_val = [val + random.random() / 10**5 for val in y_val]
|
|
|
|
subplt.plot_trisurf(x_val, y_val, z_val)
|
|
|
|
|
|
def display_case(tri_cube):
|
|
figure = plt.figure()
|
|
subplt = figure.add_subplot(111, projection='3d')
|
|
|
|
actives = split_pt_list(list(tri_cube.activated))
|
|
inactives = split_pt_list(list(tri_cube.non_activated))
|
|
|
|
subplt.scatter3D(actives[0], actives[1], actives[2],
|
|
c='r', marker='o')
|
|
subplt.scatter3D(inactives[0], inactives[1], inactives[2],
|
|
c='b', marker='.')
|
|
|
|
for triangle in tri_cube.triangles:
|
|
tri_repr(triangle, subplt)
|
|
|
|
plt.show()
|
|
|
|
|
|
index = gen.gen_index(gen.BASE_CASES)
|