Source code for glue_jupyter.ipyvolume.volume.layer_style_widget

from ipywidgets import (Checkbox, VBox, ColorPicker, Dropdown, FloatSlider,
                        FloatLogSlider)

from glue.utils import color2hex

from ...link import link, dlink

__all__ = ['Volume3DLayerStateWidget']


[docs]class Volume3DLayerStateWidget(VBox): def __init__(self, layer_state): self.state = layer_state self.widget_lighting = Checkbox(description='lighting', value=self.state.lighting) link((self.state, 'lighting'), (self.widget_lighting, 'value')) render_methods = 'NORMAL MAX_INTENSITY'.split() self.widget_render_method = Dropdown(options=render_methods, value=self.state.render_method, description='method') link((self.state, 'render_method'), (self.widget_render_method, 'value')) self.size_options = [32, 64, 128, 128+64, 256, 256+128, 512] options = [(str(k), k) for k in self.size_options] self.widget_max_resolution = Dropdown(options=options, value=128, description='max resolution') link((self.state, 'max_resolution'), (self.widget_max_resolution, 'value')) if self.state.vmin is None: self.state.vmin = 0 self.widget_data_min = FloatSlider(description='min', min=0, max=1, value=self.state.vmin, step=0.001) link((self.state, 'vmin'), (self.widget_data_min, 'value')) dlink((self.state, 'data_min'), (self.widget_data_min, 'min')) dlink((self.state, 'data_max'), (self.widget_data_min, 'max')) if self.state.vmax is None: self.state.vmax = 1 self.widget_data_max = FloatSlider(description='max', min=0, max=1, value=self.state.vmax, step=0.001) link((self.state, 'vmax'), (self.widget_data_max, 'value')) dlink((self.state, 'data_min'), (self.widget_data_max, 'min')) dlink((self.state, 'data_max'), (self.widget_data_max, 'max')) self.widget_clamp_min = Checkbox(description='clamp minimum', value=self.state.clamp_min) link((self.state, 'clamp_min'), (self.widget_clamp_min, 'value')) self.widget_clamp_max = Checkbox(description='clamp maximum', value=self.state.clamp_max) link((self.state, 'clamp_max'), (self.widget_clamp_max, 'value')) self.widget_color = ColorPicker(value=self.state.color, description='color') link((self.state, 'color'), (self.widget_color, 'value'), color2hex) if self.state.alpha is None: self.state.alpha = 1 self.widget_opacity = FloatSlider(description='opacity', min=0, max=1, value=self.state.alpha, step=0.001) link((self.state, 'alpha'), (self.widget_opacity, 'value')) self.widget_opacity_scale = FloatLogSlider(description='opacity scale', base=10, min=-3, max=3, step=0.01, value=self.state.opacity_scale) link((self.state, 'opacity_scale'), (self.widget_opacity_scale, 'value')) # FIXME: this should be fixed # self.widget_reset_zoom = Button(description="Reset zoom") # self.widget_reset_zoom.on_click(self.state.viewer_state.reset_limits) super().__init__([self.widget_render_method, self.widget_lighting, self.widget_data_min, self.widget_data_max, self.widget_clamp_min, self.widget_clamp_max, self.widget_max_resolution, # self.widget_reset_zoom, self.widget_color, self.widget_opacity, self.widget_opacity_scale])