def visualize_layers(reachable_layers): layers = {} for (x, y, z), label in label_matrix.voxels.items(): pos = Vec3(x, y, z) if label == 0 or label not in reachable_layers: continue if label in layers: layers[label][pos] = True continue layers[label] = np.zeros(label_matrix.shape, dtype=bool) layers[label][pos] = True color_gen = randomcolor.RandomColor() colors = color_gen.generate(count=len(layers), format_='rgb') for i in range(len(colors)): values = map(lambda e: int(e), re.findall('\\d+', colors[i])) values = list(values) colors[i] = (values[0] / 255, values[1] / 255, values[2] / 255) meshes = [] i = 0 for label in layers: color = colors[i] meshes.append(Mesh.from_voxel_grid(layers[label], colors=color)) i += 1 show(meshes)
import numpy as np from simple_3dviz import Mesh, Lines from simple_3dviz.window import show def heart_voxel_grid(N): """Create a NxNxN voxel grid with True if the voxel is inside a heart object and False otherwise.""" x = np.linspace(-1.3, 1.3, N) y = np.linspace(-1.3, 1.3, N) z = np.linspace(-1.3, 1.3, N) x, y, z = np.meshgrid(x, y, z) return (2 * x**2 + y**2 + z**2 - 1)**3 - (1 / 10) * x**2 * z**3 - y**2 * z**3 < 0 if __name__ == "__main__": voxels = heart_voxel_grid(64) m = Mesh.from_voxel_grid(voxels, colors=(0.8, 0, 0)) l = Lines.from_voxel_grid(voxels, colors=(0, 0, 0.), width=0.001) show([l, m])