def __init__(self, structure=None, representations=None, parameters=None, **kwargs): super(NGLWidget, self).__init__(**kwargs) self._gui = None self._init_gui = kwargs.pop('gui', False) self._theme = kwargs.pop('theme', 'default') self._widget_image = widget_image.Image() self._widget_image.width = 900. self._image_array = [] # do not use _displayed_callbacks since there is another Widget._display_callbacks self._event = threading.Event() self._ngl_displayed_callbacks_before_loaded = [] self._ngl_displayed_callbacks_after_loaded = [] widget_utils._add_repr_method_shortcut(self, self) self.shape = Shape(view=self) self.stage = Stage(view=self) self.control = ViewerControl(view=self) self._handle_msg_thread = threading.Thread( target=self.on_msg, args=(self._ngl_handle_msg, )) # # register to get data from JS side self._handle_msg_thread.daemon = True self._handle_msg_thread.start() self._remote_call_thread = RemoteCallThread( self, registered_funcs=['loadFile', 'replaceStructure']) self._remote_call_thread.start() self._trajlist = [] self._ngl_component_ids = [] if parameters: self.parameters = parameters if isinstance(structure, Trajectory): name = py_utils.get_name(structure, kwargs) self.add_trajectory(structure, name=name) elif isinstance(structure, (list, tuple)): trajectories = structure for trajectory in trajectories: name = py_utils.get_name(trajectory, kwargs) self.add_trajectory(trajectory, name=name) else: if structure is not None: self.add_structure(structure, **kwargs) if representations: self.representations = representations self._set_unsync_camera() selector = 'nglviewHolder' + str(id(self)) self._remote_call( 'setSelector', target='Widget', args=[ selector, ]) self.player = TrajectoryPlayer(self) self._already_constructed = True
def get_image(self, change=""): '''get rendered image. Make sure to call `render_image` first Notes ----- method name might be changed ''' image = widget_image.Image() image._b64value = self._image_data return image
def __init__(self, structure=None, representations=None, parameters=None, **kwargs): super(NGLWidget, self).__init__(**kwargs) self._gui = None self._init_gui = kwargs.pop('gui', False) self._theme = kwargs.pop('theme', 'default') self._widget_image = widget_image.Image() self._widget_image.width = 900. self._image_array = [] # do not use _displayed_callbacks since there is another Widget._display_callbacks self._ngl_displayed_callbacks = [] _add_repr_method_shortcut(self, self) self.shape = Shape(view=self) # register to get data from JS side self.on_msg(self._ngl_handle_msg) self._trajlist = [] self._ngl_component_ids = [] self._init_structures = [] if parameters: self.parameters = parameters if isinstance(structure, Trajectory): name = py_utils.get_name(structure, kwargs) self.add_trajectory(structure, name=name) elif isinstance(structure, (list, tuple)): trajectories = structure for trajectory in trajectories: name = py_utils.get_name(trajectory, kwargs) self.add_trajectory(trajectory, name=name) else: if structure is not None: self.add_structure(structure, **kwargs) # initialize _init_structure_list # hack to trigger update on JS side if structure is not None: self._set_initial_structure(self._init_structures) if representations: self._init_representations = representations else: self._init_representations = [ {"type": "cartoon", "params": { "sele": "polymer" }}, {"type": "ball+stick", "params": { "sele": "hetero OR mol" }}, {"type": "ball+stick", "params": { "sele": "not protein and not nucleic" }} ] # keep track but making copy if structure is not None: self._representations = self._init_representations[:] self._set_unsync_camera() # need to initialize before _ngl_component_ids self.player = TrajectoryPlayer(self)