In [1]:
import k3d
import vtk
import numpy as np
from k3d.helpers import download
from pyunpack import Archive
import ipywidgets as widgets
filename = download('https://github.com/To-Fujita/Babylon.js_3D_Graphics/raw/master/scenes/stl/Cute%20Darth%20Vader.stl')
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
reader.Update()
plot = k3d.plot()
plot += k3d.vtk_poly_data(reader.GetOutput(), color=0x222222)
plot.display()
debug_info = widgets.HTML()
display(debug_info)
In [3]:
plot.camera = [95.27, 101.43, 224.85,
53.44, 93.47, 46.74,
0.0, 1.0, 0.0]
In [4]:
plot.mode = 'callback'
obj = plot.objects[0]
obj.vertices.shape, obj.indices.shape
Out[4]:
In [5]:
import json
g = None
def foo(params):
global g, debug_info
g = params
debug_info.value = '<pre>' + json.dumps(params, indent=4) + "</pre>"
obj.click_callback = foo
obj.hover_callback = foo
In [ ]:
obj.click_callback = None
obj.hover_callback = None
while plot.objects:
plot -= plot.objects[-1]
In [ ]:
def generate(dim):
data = np.zeros((dim, dim, dim), dtype=np.uint8)
x = np.linspace(-0.5, 0.5, dim, dtype=np.float32)
y = np.linspace(-0.5, 0.5, dim, dtype=np.float32)
z = np.linspace(-0.5, 0.5, dim, dtype=np.float32)
x, y, z = np.meshgrid(x, y, z)
c, s = np.cos(1.5 * x), np.sin(1.5 * x)
my = y * c - z * s
mz = y * s + z * c
my = np.fmod(my + 0.5, 0.333) * 3 - 0.5
mz = np.fmod(mz + 0.5, 0.333) * 3 - 0.5
displace = np.sin(60.0 * x) * np.sin(60.0 * my) * np.sin(60.0 * mz) * 0.1
data = np.sqrt(my**2 + mz**2) * (2.5 + 0.8 * np.sin(x * 50)) + displace
return data.astype(np.float32)
scalar_field = generate(256)
obj = k3d.marching_cubes(scalar_field, level=0.5, color=0xaa0000)
plot += obj
In [ ]:
obj.click_callback = foo
obj.hover_callback = foo
In [ ]:
obj.click_callback = None
obj.hover_callback = None
while plot.objects:
plot -= plot.objects[-1]
In [ ]:
x, y = np.meshgrid(np.linspace(-3, 3, 60),np.linspace(-3, 3, 60))
heights = np.sin(x**2 + y**2)
obj = k3d.surface(heights.astype(np.float32), bounds=[-3,3,-3,3])
plot += obj
In [ ]:
obj.click_callback = foo
obj.hover_callback = foo
In [ ]:
obj.click_callback = None
obj.hover_callback = None
while plot.objects:
plot -= plot.objects[-1]
In [ ]:
obj = k3d.texture(open('assets/texture.png', 'br').read(), 'png')
plot += obj
In [ ]:
obj.click_callback = foo
obj.hover_callback = foo
In [ ]:
obj.click_callback = None
obj.hover_callback = None
while plot.objects:
plot -= plot.objects[-1]
In [ ]:
x, y = np.meshgrid(np.linspace(-3, 3, 60),np.linspace(-3, 3, 60))
data = (np.sin(x*2.0)**2 + np.cos(y*np.sin(x))**2)
obj = k3d.texture(attribute=data)
plot += obj
In [ ]:
obj.click_callback = foo
obj.hover_callback = foo
In [ ]: