class MaterialEditor(_Editor): """TODO: Add docstring here """ _model_name = Unicode('MaterialEditorModel').tag(sync=True) _view_name = Unicode('MaterialEditorView').tag(sync=True) __text = None __index = None __ambient = None __specular = None __emission = None __diffuse = None __transparency = None __shininess = None __validator = None index = Int().tag(sync=False) ambient = List().tag(sync=False) specular = List().tag(sync=False) emission = List().tag(sync=False) diffuse = Float().tag(sync=False) transparency = Float().tag(sync=False) shininess = Float().tag(sync=False) def __init__(self, index, ambient=[80, 80, 80], specular=[40, 40, 40], emission=[0, 0, 0], diffuse=1, transparency=0, shininess=0.2, **kwargs): self.index = index self.ambient = ambient self.specular = specular self.emission = emission self.diffuse = diffuse self.transparency = transparency self.shininess = shininess self.__index = BoundedIntText(value=index, description='index', min=0) self.__ambient = ColorPicker( value='#' + ''.join(format(v, "02x") for v in ambient), description='ambient') self.__specular = ColorPicker( value='#' + ''.join(format(v, "02x") for v in specular), description='specular') self.__emission = ColorPicker( value='#' + ''.join(format(v, "02x") for v in emission), description='emission') self.__diffuse = FloatSlider(value=diffuse, description='diffuse', min=0, max=3, continuous_update=False) self.__transparency = FloatSlider(value=transparency, description='transparency', min=0, max=1, continuous_update=False) self.__shininess = FloatSlider(value=shininess, description='shininess', min=0, max=1, continuous_update=False) self.__index.observe(self.__on_index_changed, names='value') self.__ambient.observe(self.__on_ambient_changed, names='value') self.__specular.observe(self.__on_specular_changed, names='value') self.__emission.observe(self.__on_emission_changed, names='value') self.__diffuse.observe(self.__on_diffuse_changed, names='value') self.__transparency.observe(self.__on_transparency_changed, names='value') self.__shininess.observe(self.__on_shininess_changed, names='value') kwargs['children'] = [ self.__index, self.__ambient, self.__specular, self.__emission, self.__diffuse, self.__transparency, self.__shininess ] super().__init__(**kwargs) def __rgb_to_list(self, rgb): return [255, 0, 0] if len(rgb) != 7 else [ int(v, 16) for v in [rgb[1:][i:i + 2] for i in range(0, 6, 2)] ] def __on_index_changed(self, change): self.index = self.__index.value def __on_ambient_changed(self, change): self.ambient = self.__rgb_to_list(self.__ambient.value) def __on_specular_changed(self, change): self.specular = self.__rgb_to_list(self.__specular.value) def __on_emission_changed(self, change): self.emission = self.__rgb_to_list(self.__emission.value) def __on_diffuse_changed(self, change): self.diffuse = self.__diffuse.value def __on_transparency_changed(self, change): self.transparency = self.__transparency.value def __on_shininess_changed(self, change): self.shininess = self.__shininess.value
class FloatEditor(_Editor): """TODO: Add docstring here """ _model_name = Unicode('FloatEditorModel').tag(sync=True) _view_name = Unicode('FloatEditorView').tag(sync=True) __slider = None __min_ipt = None __max_ipt = None __step_ipt = None __type = '' value = Float(0).tag(sync=False) min = Float(0).tag(sync=False) max = Float(0).tag(sync=False) step = Float(0).tag(sync=False) def __init__(self, value, type='Float', min=1, max=10, step=1, **kwargs): self.value = float(value) description = kwargs[ 'name'] if 'no_name' in kwargs and kwargs['no_name'] else 'value' self.__slider = FloatSlider(value, min=min, max=max, step=step, description=description, continuous_update=False) # self.__min_ipt = FloatText(min, description='min') # self.__max_ipt = FloatText(max, description='max') # self.__step_ipt = BoundedFloatText(step, description='step', min=0.01, max=1, step=step) self.__slider.observe(self.__on_slider_changed, names='value') # self.__min_ipt.observe(self.__on_min_changed, names='value') # self.__max_ipt.observe(self.__on_max_changed, names='value') # self.__step_ipt.observe(self.__on_step_changed, names='value') kwargs['children'] = [ self.__slider, # self.__min_ipt, # self.__max_ipt, # self.__step_ipt ] super().__init__(**kwargs) # def __on_min_changed(self, change): # if self.__min_ipt.value < self.__slider.max: # self.__slider.min = self.__min_ipt.value # else: # self.__min_ipt.value = self.__slider.max - self.__step_ipt.value # self.min = self.__min_ipt.value # def __on_max_changed(self, change): # if self.__max_ipt.value > self.__slider.min: # self.__slider.max = self.__max_ipt.value # else: # self.__max_ipt.value = self.__slider.min + self.__step_ipt.value # self.max = self.__max_ipt.value # def __on_step_changed(self, change): # self.__slider.step = self.__step_ipt.value # self.step = self.__step_ipt.value def __on_slider_changed(self, change): self.value = self.__slider.value