.. _jspythreejsrst: ========= pythreejs ========= .. only:: html **Links:** :download:`notebook `, :downloadlink:`html `, :download:`PDF `, :download:`python `, :downloadlink:`slides `, :githublink:`GitHub|_doc/notebooks/2016/pydata/js_pythreejs.ipynb|*` `pythreejs `__ allows 3D interactive graphs in a notebook. `documentation `__ `source `__ `installation `__ `tutorial `__ `gallery `__ .. code:: ipython3 from jyquickhelper import add_notebook_menu add_notebook_menu() .. contents:: :local: Installation ------------ *pythreejs* requires local installation. :: pip install pythreejs jupyter nbextension enable --py pythreejs example ------- .. code:: ipython3 from pythreejs import * import numpy as np from IPython.display import display from ipywidgets import HTML, Text from traitlets import link, dlink .. code:: ipython3 ball = Mesh(geometry=SphereGeometry(radius=1), material=MeshLambertMaterial(color='red'), position=[2,1,0]) scene = Scene(children=[ball, AmbientLight(color='#777777'), make_text('Hello World!', height=.6)]) c = PerspectiveCamera(position=[0, 5, 5], up=[0, 0, 1], children=[DirectionalLight(color='white', position=[3, 5, 1], intensity=0.5)]) renderer = Renderer(camera=c, scene=scene, controls=[OrbitControls(controlling=c)]) display(renderer) .. raw:: html

Failed to display Jupyter Widget of type Renderer.

If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean that the widgets JavaScript is still loading. If this message persists, it likely means that the widgets JavaScript library is either not installed or not enabled. See the Jupyter Widgets Documentation for setup instructions.

If you're reading this message in another frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets.

.. code:: ipython3 nx, ny = (20, 20) xmax=1 x = np.linspace(-xmax, xmax, nx) y = np.linspace(-xmax, xmax, ny) xx, yy = np.meshgrid(x, y) z = xx ** 2 - yy ** 2 #z[6,1] = float('nan') surf_g = SurfaceGeometry(z=list(z[::-1].flat), width=2 * xmax, height=2 * xmax, width_segments=nx - 1, height_segments=ny - 1) surf = Mesh(geometry=surf_g, material=MeshLambertMaterial(map=height_texture(z[::-1], 'YlGnBu_r'))) surfgrid = SurfaceGrid(geometry=surf_g, material=LineBasicMaterial(color='black')) hover_point = Mesh(geometry=SphereGeometry(radius=0.05), material=MeshLambertMaterial(color='hotpink')) scene = Scene(children=[surf, surfgrid, hover_point, AmbientLight(color='#777777')]) c = PerspectiveCamera(position=[0, 3, 3], up=[0, 0, 1], children=[DirectionalLight(color='white', position=[3, 5, 1], intensity=0.6)]) pickable_objects = Group() pickable_objects.add(surf) click_picker = Picker(controlling = pickable_objects, event='dblclick') hover_picker = Picker(controlling = pickable_objects, event='mousemove') renderer = Renderer(camera=c, scene = scene, controls=[OrbitControls(controlling=c), click_picker, hover_picker]) def f(change): value = change['new'] print('Clicked on %s' % value) point = Mesh(geometry=SphereGeometry(radius=0.05), material=LambertMaterial(color='red'), position=value) scene.children = list(scene.children) + [point] click_picker.observe(f, names=['point']) link((hover_point, 'position'), (hover_picker, 'point')) h = HTML() def g(change): h.value = 'Green point at (%.3f, %.3f, %.3f)' % tuple(change['new']) g({'new': hover_point.position}) hover_picker.observe(g, names=['point']) display(h) display(renderer) .. raw:: html

Failed to display Jupyter Widget of type HTML.

If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean that the widgets JavaScript is still loading. If this message persists, it likely means that the widgets JavaScript library is either not installed or not enabled. See the Jupyter Widgets Documentation for setup instructions.

If you're reading this message in another frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets.

.. raw:: html

Failed to display Jupyter Widget of type Renderer.

If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean that the widgets JavaScript is still loading. If this message persists, it likely means that the widgets JavaScript library is either not installed or not enabled. See the Jupyter Widgets Documentation for setup instructions.

If you're reading this message in another frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets.