Source code for pythreejs._base.Three
from ipywidgets import Widget, widget_serialization
from traitlets import Unicode
from .._package import npm_pkg_name
from .._version import EXTENSION_SPEC_VERSION
[docs]class ThreeWidget(Widget):
"""Base widget type for all pythreejs widgets"""
_model_module = Unicode(npm_pkg_name).tag(sync=True)
_model_module_version = Unicode(EXTENSION_SPEC_VERSION).tag(sync=True)
_previewable = True
def __init__(self, **kwargs):
super(ThreeWidget, self).__init__(**kwargs)
self.on_msg(self._on_potential_ret_val)
[docs] def exec_three_obj_method(self, method_name, *args, **kwargs):
"""Execute a method on the three object.
Excute the method specified by `method_name` on the three
object, with arguments `args`. `kwargs` is currently ignored.
"""
content = {
"type": "exec_three_obj_method",
"method_name": method_name,
"args": widget_serialization['to_json'](args, None)
}
self.send(content=content, buffers=None)
def _on_potential_ret_val(self, widget, content, buffers):
"""Message callback used internally"""
if content['type'] == "exec_three_obj_method_retval":
self._on_ret_val(content['method_name'], content['ret_val'])
def _on_ret_val(self, method_name, ret_val):
"""Message callback used internally for logging exec returns"""
self.log.info('%s() -> %s' % (method_name, ret_val))
def _ipython_display_(self, **kwargs):
if self._previewable:
from IPython.display import display
from .renderable import Preview
return display(Preview(self), **kwargs)
else:
return super(ThreeWidget, self)._ipython_display_(**kwargs)