#!/usr/bin/env python # coding: utf-8 # In[ ]: import k3d import vtk import numpy as np from k3d.helpers import download 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[ ]: plot.camera = [95.27, 101.43, 224.85, 53.44, 93.47, 46.74, 0.0, 1.0, 0.0] # In[ ]: plot.camera_rotate_speed = 0.1 plot.camera_zoom_speed = 5.0 # In[ ]: plot.mode = 'callback' obj = plot.objects[0] obj.vertices.shape, obj.indices.shape # In[ ]: import json g = None def foo(params): global g, debug_info g = params debug_info.value = '
' + json.dumps(params, indent=4) + "
" obj.click_callback = foo obj.hover_callback = foo # # please click or hover on Darth Vader # 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 # # please click or hover on mesh # 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 # # please click or hover on surface # 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 # # please click or hover on texture # 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 # # please click or hover on texture # In[ ]: