jupyter-widgets / pythreejs

A Jupyter - Three.js bridge
https://pythreejs.readthedocs.io
Other
934 stars 185 forks source link

Error in Animation.ipynb on binder #377

Closed moorepants closed 2 years ago

moorepants commented 2 years ago

I ran the repository with binder today (tip of master) to try out the examples/Animation.ipynb. In cell 17 I get this error:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-17-56e4cb37e829> in <module>
      2 
      3 # Set up morph targets:
----> 4 vertices = np.array(morph.attributes['position'].array)
      5 for i in range(len(vertices)):
      6     if vertices[i, 0] > 0:

KeyError: 'position'

Cell 17's contents:

import numpy as np

# Set up morph targets:
vertices = np.array(morph.attributes['position'].array)
for i in range(len(vertices)):
    if vertices[i, 0] > 0:
        vertices[i, 0] += 1
morph.morphAttributes = {'position': [
    BufferAttribute(vertices),
]}

morphMesh = Mesh(morph, MeshPhongMaterial(
    color='#ff3333', shininess=150, morphTargets=True))
vidartf commented 2 years ago

Thanks for the report. Did you see the notice in the comment in cell 16?

# This lets three.js create the geometry, then syncs back vertex positions etc.
# For this reason, you should allow for the sync to complete before executing
# the next cell.

I believe that is what you are seeing here. In summary, you will need to wait a little while after executing cell 16, to allow the buffers generated in the browser (by three.js) to sync back to the kernel. This is also why I would recommend to rely on from_geometry as little as possible!

vidartf commented 2 years ago

Closing as answered.