Beispiel #1
0
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
Beispiel #2
0
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