Skip to content
Snippets Groups Projects
ui.py 142 KiB
Newer Older
  • Learn to ignore specific revisions
  •                     icon='LOCKED',
                    )
                    col.label(
                        text="Rainbow projection angle: " + str(obj.data.spot_size)
                    )
    
                    col.label(text="Rainbow width: " + str(obj.data.spot_blend))
    
                    col.label(
                        text="Rainbow distance: "
                        + str(obj.data.shadow_buffer_clip_start)
                    )
    
                    col.label(text="Rainbow arc angle: " + str(obj.pov.arc_angle))
    
                    col.label(
                        text="Rainbow falloff angle: " + str(obj.pov.falloff_angle)
                    )
    
                    col.prop(
                        obj.pov,
                        "unlock_parameters",
                        text="Edit exported parameters",
                        icon='UNLOCKED',
                    )
    
                    col.label(text="3D view proxy may get out of synch")
                    col.active = obj.pov.unlock_parameters
    
    
                    layout.operator(
                        "pov.cone_update", text="Update", icon="MESH_CONE"
                    )
    
                    # col.label(text="Parameters:")
    
                    col.prop(obj.data, "spot_size", text="Rainbow Projection Angle")
                    col.prop(obj.data, "spot_blend", text="Rainbow width")
    
                    col.prop(
                        obj.data,
                        "shadow_buffer_clip_start",
                        text="Visibility distance",
                    )
    
                    col.prop(obj.pov, "arc_angle")
                    col.prop(obj.pov, "falloff_angle")
    
    del properties_data_light
    
    ###############################################################################
    
    class WORLD_PT_POV_world(WorldButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov world buttons."""
    
        bl_label = "World"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        def draw(self, context):
            layout = self.layout
    
    
    
            row = layout.row(align=True)
    
            row.menu(
                WORLD_MT_POV_presets.__name__, text=WORLD_MT_POV_presets.bl_label
            )
    
            row.operator(WORLD_OT_POV_add_preset.bl_idname, text="", icon='ADD')
    
            row.operator(
                WORLD_OT_POV_add_preset.bl_idname, text="", icon='REMOVE'
            ).remove_active = True
    
            row.prop(world, "use_sky_paper")
            row.prop(world, "use_sky_blend")
            row.prop(world, "use_sky_real")
    
            row = layout.row()
            row.column().prop(world, "horizon_color")
            col = row.column()
            col.prop(world, "zenith_color")
            col.active = world.use_sky_blend
            row.column().prop(world, "ambient_color")
    
    
            # row = layout.row()
            # row.prop(world, "exposure") #Re-implement later as a light multiplier
            # row.prop(world, "color_range")
    
    
    class WORLD_PT_POV_mist(WorldButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov mist buttons."""
    
    
        bl_label = "Mist"
        bl_options = {'DEFAULT_CLOSED'}
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        def draw_header(self, context):
            world = context.world
    
            self.layout.prop(world.mist_settings, "use_mist", text="")
    
        def draw(self, context):
            layout = self.layout
    
            world = context.world
    
            layout.active = world.mist_settings.use_mist
    
            split = layout.split()
    
            col = split.column()
            col.prop(world.mist_settings, "intensity")
            col.prop(world.mist_settings, "start")
    
            col = split.column()
            col.prop(world.mist_settings, "depth")
            col.prop(world.mist_settings, "height")
    
            layout.prop(world.mist_settings, "falloff")
    
    class RENDER_PT_POV_export_settings(RenderButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov ini settingss buttons."""
    
    
        bl_label = "Start Options"
    
        bl_options = {'DEFAULT_CLOSED'}
    
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        def draw_header(self, context):
    
            scene = context.scene
            if scene.pov.tempfiles_enable:
    
                self.layout.prop(
                    scene.pov, "tempfiles_enable", text="", icon='AUTO'
                )
    
                self.layout.prop(
                    scene.pov, "tempfiles_enable", text="", icon='CONSOLE'
                )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        def draw(self, context):
            layout = self.layout
    
    
            scene = context.scene
    
            layout.active = scene.pov.max_trace_level != 0
    
            split = layout.split()
    
            col = split.column()
            col.label(text="Command line switches:")
    
            col.prop(scene.pov, "command_line_switches", text="")
    
            split = layout.split()
    
    
            layout.active = not scene.pov.tempfiles_enable
    
            # if not scene.pov.tempfiles_enable:
    
            split.prop(scene.pov, "deletefiles_enable", text="Delete files")
    
            split.prop(scene.pov, "pov_editor", text="POV Editor")
    
            col = layout.column()
            col.prop(scene.pov, "scene_name", text="Name")
            col.prop(scene.pov, "scene_path", text="Path to files")
    
            # col.prop(scene.pov, "scene_path", text="Path to POV-file")
            # col.prop(scene.pov, "renderimage_path", text="Path to image")
    
            split = layout.split()
            split.prop(scene.pov, "indentation_character", text="Indent")
            if scene.pov.indentation_character == 'SPACE':
                split.prop(scene.pov, "indentation_spaces", text="Spaces")
    
            row = layout.row()
            row.prop(scene.pov, "comments_enable", text="Comments")
            row.prop(scene.pov, "list_lf_enable", text="Line breaks in lists")
    
    class RENDER_PT_POV_render_settings(RenderButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov render settings buttons."""
    
    
        bl_label = "Global Settings"
    
        bl_options = {'DEFAULT_CLOSED'}
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
    
        def draw_header(self, context):
    
            scene = context.scene
            if scene.pov.global_settings_advanced:
    
                self.layout.prop(
                    scene.pov, "global_settings_advanced", text="", icon='SETTINGS'
                )
    
                self.layout.prop(
                    scene.pov,
                    "global_settings_advanced",
                    text="",
                    icon='PREFERENCES',
                )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        def draw(self, context):
            layout = self.layout
    
            scene = context.scene
    
            rd = context.scene.render
    
            # layout.active = (scene.pov.max_trace_level != 0)
    
            if sys.platform[:3] != "win":
    
                layout.prop(
                    scene.pov, "sdl_window_enable", text="POV-Ray SDL Window"
                )
    
    Thomas Dinges's avatar
    Thomas Dinges committed
            col = layout.column()
    
            col.label(text="Main Path Tracing:")
    
            col.prop(scene.pov, "max_trace_level", text="Ray Depth")
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            align = True
    
            layout.active = scene.pov.global_settings_advanced
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            # Deprecated (autodetected in pov3.8):
            # layout.prop(scene.pov, "charset")
    
            row = layout.row(align=align)
            row.prop(scene.pov, "adc_bailout")
            row = layout.row(align=align)
            row.prop(scene.pov, "ambient_light")
            row = layout.row(align=align)
            row.prop(scene.pov, "irid_wavelength")
            row = layout.row(align=align)
            row.prop(scene.pov, "max_intersections")
            row = layout.row(align=align)
            row.prop(scene.pov, "number_of_waves")
            row = layout.row(align=align)
            row.prop(scene.pov, "noise_generator")
    
            split = layout.split()
            split.label(text="Shading:")
            split = layout.split()
    
            row = split.row(align=align)
    
            row.prop(scene.pov, "use_shadows")
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            row.prop(scene.pov, "alpha_mode")
    
    
    class RENDER_PT_POV_photons(RenderButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov photons buttons."""
    
    
        bl_options = {'DEFAULT_CLOSED'}
    
        # self.layout.label(icon='SETTINGS')
    
        def draw_header(self, context):
            scene = context.scene
            if scene.pov.photon_enable:
    
                self.layout.prop(
                    scene.pov, "photon_enable", text="", icon='PMARKER_ACT'
                )
    
                self.layout.prop(
                    scene.pov, "photon_enable", text="", icon='PMARKER'
                )
    
    
        def draw(self, context):
            scene = context.scene
            layout = self.layout
    
            layout.active = scene.pov.photon_enable
            col = layout.column()
    
            # col.label(text="Global Photons:")
    
            col.prop(scene.pov, "photon_max_trace_level", text="Photon Depth")
    
            col = split.column()
            col.prop(scene.pov, "photon_spacing", text="Spacing")
            col.prop(scene.pov, "photon_gather_min")
    
            col = split.column()
            col.prop(scene.pov, "photon_adc_bailout", text="Photon ADC")
            col.prop(scene.pov, "photon_gather_max")
    
            box.label(text='Photon Map File:')
    
            row.prop(scene.pov, "photon_map_file_save_load", expand=True)
    
            if scene.pov.photon_map_file_save_load in {'save'}:
                box.prop(scene.pov, "photon_map_dir")
                box.prop(scene.pov, "photon_map_filename")
            if scene.pov.photon_map_file_save_load in {'load'}:
                box.prop(scene.pov, "photon_map_file")
    
    class RENDER_PT_POV_antialias(RenderButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov antialiasing buttons."""
    
    
        bl_label = "Anti-Aliasing"
    
        bl_options = {'DEFAULT_CLOSED'}
    
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        def draw_header(self, context):
    
            prefs = bpy.context.preferences.addons[__package__].preferences
    
            scene = context.scene
    
            if (
                prefs.branch_feature_set_povray != 'uberpov'
                and scene.pov.antialias_method == '2'
            ):
                self.layout.prop(
                    scene.pov, "antialias_enable", text="", icon='ERROR'
                )
    
            elif scene.pov.antialias_enable:
    
                self.layout.prop(
                    scene.pov, "antialias_enable", text="", icon='ANTIALIASED'
                )
    
                self.layout.prop(
                    scene.pov, "antialias_enable", text="", icon='ALIASED'
                )
    
    
        def draw(self, context):
    
            prefs = bpy.context.preferences.addons[__package__].preferences
    
            layout = self.layout
            scene = context.scene
    
    Thomas Dinges's avatar
    Thomas Dinges committed
            row = layout.row()
    
            row.prop(scene.pov, "antialias_method", text="")
    
            if (
                prefs.branch_feature_set_povray != 'uberpov'
                and scene.pov.antialias_method == '2'
            ):
    
                col = layout.column()
                col.alignment = 'CENTER'
                col.label(text="Stochastic Anti Aliasing is")
                col.label(text="Only Available with UberPOV")
                col.label(text="Feature Set in User Preferences.")
    
                col.label(text="Using Type 2 (recursive) instead")
    
                row.prop(scene.pov, "jitter_enable", text="Jitter")
    
                split = layout.split()
                col = split.column()
                col.prop(scene.pov, "antialias_depth", text="AA Depth")
                sub = split.column()
                sub.prop(scene.pov, "jitter_amount", text="Jitter Amount")
                if scene.pov.jitter_enable:
                    sub.enabled = True
                else:
                    sub.enabled = False
    
                row = layout.row()
                row.prop(scene.pov, "antialias_threshold", text="AA Threshold")
                row.prop(scene.pov, "antialias_gamma", text="AA Gamma")
    
                if prefs.branch_feature_set_povray == 'uberpov':
    
                    row.prop(
                        scene.pov, "antialias_confidence", text="AA Confidence"
                    )
    
                    if scene.pov.antialias_method == '2':
    
                        row.enabled = True
                    else:
                        row.enabled = False
    
    class RENDER_PT_POV_radiosity(RenderButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov radiosity buttons."""
    
    
        bl_label = "Diffuse Radiosity"
    
        bl_options = {'DEFAULT_CLOSED'}
    
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        def draw_header(self, context):
            scene = context.scene
    
            if scene.pov.radio_enable:
    
                self.layout.prop(
                    scene.pov,
                    "radio_enable",
                    text="",
                    icon='OUTLINER_OB_LIGHTPROBE',
                )
    
                self.layout.prop(
                    scene.pov, "radio_enable", text="", icon='LIGHTPROBE_CUBEMAP'
                )
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
        def draw(self, context):
            layout = self.layout
    
            scene = context.scene
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
            split = layout.split()
    
            col = split.column()
    
            col.prop(scene.pov, "radio_count", text="Rays")
            col.prop(scene.pov, "radio_recursion_limit", text="Recursions")
    
            split.prop(scene.pov, "radio_error_bound", text="Error Bound")
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
            layout.prop(scene.pov, "radio_display_advanced")
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                split = layout.split()
    
                col = split.column()
    
                col.prop(scene.pov, "radio_adc_bailout", slider=True)
    
                col.prop(scene.pov, "radio_minimum_reuse", text="Min Reuse")
    
                col.prop(scene.pov, "radio_gray_threshold", slider=True)
                col.prop(scene.pov, "radio_pretrace_start", slider=True)
    
                col.prop(scene.pov, "radio_low_error_factor", slider=True)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                col = split.column()
    
                col.prop(scene.pov, "radio_maximum_reuse", text="Max Reuse")
    
                col.prop(scene.pov, "radio_nearest_count")
                col.prop(scene.pov, "radio_pretrace_end", slider=True)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                col.label(text="Estimation Influence:")
    
                col.prop(scene.pov, "radio_always_sample")
    
                col.prop(scene.pov, "radio_media")
                col.prop(scene.pov, "radio_subsurface")
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    class POV_RADIOSITY_MT_presets(bpy.types.Menu):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov radiosity presets menu."""
    
    
        bl_label = "Radiosity Presets"
        preset_subdir = "pov/radiosity"
        preset_operator = "script.execute_preset"
        draw = bpy.types.Menu.draw_preset
    
    
    
    class RENDER_OT_POV_radiosity_add_preset(AddPresetBase, Operator):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov radiosity add presets button."""
    
    
        '''Add a Radiosity Preset'''
        bl_idname = "scene.radiosity_preset_add"
        bl_label = "Add Radiosity Preset"
        preset_menu = "POV_RADIOSITY_MT_presets"
    
        # variable used for all preset values
    
        preset_defines = ["scene = bpy.context.scene"]
    
    
        # properties to store in the preset
        preset_values = [
    
            "scene.pov.radio_display_advanced",
    
            "scene.pov.radio_adc_bailout",
            "scene.pov.radio_always_sample",
            "scene.pov.radio_brightness",
            "scene.pov.radio_count",
            "scene.pov.radio_error_bound",
            "scene.pov.radio_gray_threshold",
            "scene.pov.radio_low_error_factor",
            "scene.pov.radio_media",
            "scene.pov.radio_subsurface",
            "scene.pov.radio_minimum_reuse",
            "scene.pov.radio_maximum_reuse",
            "scene.pov.radio_nearest_count",
            "scene.pov.radio_normal",
            "scene.pov.radio_recursion_limit",
            "scene.pov.radio_pretrace_start",
    
            "scene.pov.radio_pretrace_end",
    
    
        # where to store the preset
        preset_subdir = "pov/radiosity"
    
    
    # Draw into an existing panel
    def rad_panel_func(self, context):
        layout = self.layout
    
        row = layout.row(align=True)
    
        row.menu(
            POV_RADIOSITY_MT_presets.__name__,
            text=POV_RADIOSITY_MT_presets.bl_label,
        )
        row.operator(
            RENDER_OT_POV_radiosity_add_preset.bl_idname, text="", icon='ADD'
        )
        row.operator(
            RENDER_OT_POV_radiosity_add_preset.bl_idname, text="", icon='REMOVE'
        ).remove_active = True
    
    
    class RENDER_PT_POV_media(WorldButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define a pov global atmospheric media buttons."""
    
    
        bl_label = "Atmosphere Media"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        def draw_header(self, context):
            scene = context.scene
    
    
            self.layout.prop(scene.pov, "media_enable", text="")
    
    
        def draw(self, context):
            layout = self.layout
    
            scene = context.scene
    
    
            col = layout.column()
            col.prop(scene.pov, "media_scattering_type", text="")
            col = layout.column()
            col.prop(scene.pov, "media_samples", text="Samples")
    
            split = layout.split()
    
            col = split.column(align=True)
            col.label(text="Scattering:")
            col.prop(scene.pov, "media_diffusion_scale")
            col.prop(scene.pov, "media_diffusion_color", text="")
            col = split.column(align=True)
            col.label(text="Absorption:")
    
            col.prop(scene.pov, "media_absorption_scale")
    
            col.prop(scene.pov, "media_absorption_color", text="")
            if scene.pov.media_scattering_type == '5':
                col = layout.column()
                col.prop(scene.pov, "media_eccentricity", text="Eccentricity")
    
    ##class RENDER_PT_povray_baking(RenderButtonsPanel, Panel):
    
    ##    bl_label = "Baking"
    ##    COMPAT_ENGINES = {'POVRAY_RENDER'}
    ##
    ##    def draw_header(self, context):
    ##        scene = context.scene
    ##
    
    ##        self.layout.prop(scene.pov, "baking_enable", text="")
    
    ##
    ##    def draw(self, context):
    ##        layout = self.layout
    ##
    ##        scene = context.scene
    ##        rd = scene.render
    ##
    
    class MODIFIERS_PT_POV_modifiers(ModifierButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov modifier buttons. (For booleans)"""
    
    
        bl_label = "POV-Ray"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
    
        # def draw_header(self, context):
        # scene = context.scene
        # self.layout.prop(scene.pov, "boolean_mod", text="")
    
    
        def draw(self, context):
            scene = context.scene
            layout = self.layout
            ob = context.object
            mod = ob.modifiers
            col = layout.column()
            # Find Boolean Modifiers for displaying CSG option
            onceCSG = 0
            for mod in ob.modifiers:
                if onceCSG == 0:
    
                        if mod.type == 'BOOLEAN':
                            col.prop(ob.pov, "boolean_mod")
                            onceCSG = 1
    
    
                        if ob.pov.boolean_mod == "POV":
    
                            split = layout.split()
                            col = layout.column()
                            # Inside Vector for CSG
                            col.prop(ob.pov, "inside_vector")
    
    class MATERIAL_MT_POV_sss_presets(bpy.types.Menu):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov sss preset menu."""
    
    
        bl_label = "SSS Presets"
        preset_subdir = "pov/material/sss"
        preset_operator = "script.execute_preset"
        draw = bpy.types.Menu.draw_preset
    
    
    class MATERIAL_OT_POV_sss_add_preset(AddPresetBase, Operator):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Add an SSS Preset"""
    
        bl_idname = "material.sss_preset_add"
        bl_label = "Add SSS Preset"
        preset_menu = "MATERIAL_MT_POV_sss_presets"
    
        # variable used for all preset values
    
        preset_defines = ["material = bpy.context.material"]
    
    
        # properties to store in the preset
        preset_values = [
            "material.pov_subsurface_scattering.radius",
            "material.pov_subsurface_scattering.color",
    
    
        # where to store the preset
        preset_subdir = "pov/material/sss"
    
    
    class MATERIAL_PT_POV_sss(MaterialButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov sss buttons panel."""
    
    
        bl_label = "Subsurface Scattering"
        bl_options = {'DEFAULT_CLOSED'}
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        @classmethod
        def poll(cls, context):
            mat = context.material
            engine = context.scene.render.engine
    
            return (
                check_material(mat)
                and (mat.pov.type in {'SURFACE', 'WIRE'})
                and (engine in cls.COMPAT_ENGINES)
            )
    
            mat = context.material  # FORMERLY : #active_node_mat(context.material)
    
            sss = mat.pov_subsurface_scattering
    
    
            self.layout.active = not mat.pov.use_shadeless
    
            self.layout.prop(sss, "use", text="")
    
        def draw(self, context):
            layout = self.layout
    
            mat = context.material  # FORMERLY : #active_node_mat(context.material)
    
            sss = mat.pov_subsurface_scattering
    
            layout.active = (sss.use) and (not mat.pov.use_shadeless)
    
            row = layout.row().split()
    
            sub = row.row(align=True).split(align=True, factor=0.75)
    
            sub.menu(
                MATERIAL_MT_POV_sss_presets.__name__,
                text=MATERIAL_MT_POV_sss_presets.bl_label,
            )
            sub.operator(
                MATERIAL_OT_POV_sss_add_preset.bl_idname, text="", icon='ADD'
            )
            sub.operator(
                MATERIAL_OT_POV_sss_add_preset.bl_idname, text="", icon='REMOVE'
            ).remove_active = True
    
    
            split = layout.split()
    
            col = split.column()
            col.prop(sss, "ior")
            col.prop(sss, "scale")
            col.prop(sss, "color", text="")
            col.prop(sss, "radius", text="RGB Radius", expand=True)
    
            col = split.column()
            sub = col.column(align=True)
            sub.label(text="Blend:")
            sub.prop(sss, "color_factor", text="Color")
            sub.prop(sss, "texture_factor", text="Texture")
            sub.label(text="Scattering Weight:")
            sub.prop(sss, "front")
            sub.prop(sss, "back")
            col.separator()
            col.prop(sss, "error_threshold", text="Error")
    
    class MATERIAL_PT_POV_activate_node(MaterialButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define an activate pov nodes button."""
    
    
        bl_label = "Activate Node Settings"
        bl_context = "material"
        bl_options = {'HIDE_HEADER'}
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
    
            mat = context.material
    
            ob = context.object
    
            return (
                mat
                and mat.pov.type == "SURFACE"
                and (engine in cls.COMPAT_ENGINES)
                and not (mat.pov.material_use_nodes or mat.use_nodes)
            )
    
        def draw(self, context):
            layout = self.layout
            # layout.operator("pov.material_use_nodes", icon='SOUND')#'NODETREE')
            # the above replaced with a context hook below:
    
            layout.operator(
                "WM_OT_context_toggle", text="Use POV-Ray Nodes", icon='NODETREE'
            ).data_path = "material.pov.material_use_nodes"
    
    
    class MATERIAL_PT_POV_active_node(MaterialButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to show pov active node properties buttons."""
    
    
        bl_label = "Active Node Settings"
        bl_context = "material"
        bl_options = {'HIDE_HEADER'}
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
    
            mat = context.material
    
            ob = context.object
    
            return (
                mat
                and mat.pov.type == "SURFACE"
                and (engine in cls.COMPAT_ENGINES)
                and mat.pov.material_use_nodes
            )
    
    
        def draw(self, context):
            layout = self.layout
            mat = context.material
            node_tree = mat.node_tree
            if node_tree:
                node = node_tree.nodes.active
                if mat.use_nodes:
                    if node:
    
                        layout.prop(mat.pov, "material_active_node")
                        if node.bl_idname == "PovrayMaterialNode":
    
                            layout.context_pointer_set("node", node)
                            if hasattr(node, "draw_buttons_ext"):
                                node.draw_buttons_ext(context, layout)
                            elif hasattr(node, "draw_buttons"):
                                node.draw_buttons(context, layout)
    
                            value_inputs = [
                                socket
                                for socket in node.inputs
                                if socket.enabled and not socket.is_linked
                            ]
    
                            if value_inputs:
                                layout.separator()
    
                                layout.label(text="Inputs:")
    
                                for socket in value_inputs:
                                    row = layout.row()
                                    socket.draw(context, row, node, socket.name)
                        else:
                            layout.context_pointer_set("node", node)
                            if hasattr(node, "draw_buttons_ext"):
                                node.draw_buttons_ext(context, layout)
                            elif hasattr(node, "draw_buttons"):
                                node.draw_buttons(context, layout)
    
                            value_inputs = [
                                socket
                                for socket in node.inputs
                                if socket.enabled and not socket.is_linked
                            ]
    
                            if value_inputs:
                                layout.separator()
    
                                layout.label(text="Inputs:")
    
                                for socket in value_inputs:
                                    row = layout.row()
                                    socket.draw(context, row, node, socket.name)
                    else:
    
                        layout.label(text="No active nodes!")
    
    class MATERIAL_PT_POV_specular(MaterialButtonsPanel, Panel):
        """Use this class to define standard material specularity (highlights) buttons."""
    
        bl_label = "Specular"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        @classmethod
        def poll(cls, context):
            mat = context.material
            engine = context.scene.render.engine
            return (
                check_material(mat)
                and (mat.pov.type in {'SURFACE', 'WIRE'})
                and (engine in cls.COMPAT_ENGINES)
            )
        def draw(self, context):
            layout = self.layout
    
            mat = context.material.pov
    
            layout.active = (not mat.use_shadeless)
    
            split = layout.split()
    
            col = split.column()
            col.prop(mat, "specular_color", text="")
            col.prop(mat, "specular_intensity", text="Intensity")
    
            col = split.column()
            col.prop(mat, "specular_shader", text="")
            col.prop(mat, "use_specular_ramp", text="Ramp")
    
            col = layout.column()
            if mat.specular_shader in {'COOKTORR', 'PHONG'}:
                col.prop(mat, "specular_hardness", text="Hardness")
            elif mat.specular_shader == 'BLINN':
                row = col.row()
                row.prop(mat, "specular_hardness", text="Hardness")
                row.prop(mat, "specular_ior", text="IOR")
            elif mat.specular_shader == 'WARDISO':
                col.prop(mat, "specular_slope", text="Slope")
            elif mat.specular_shader == 'TOON':
                row = col.row()
                row.prop(mat, "specular_toon_size", text="Size")
                row.prop(mat, "specular_toon_smooth", text="Smooth")
    
            if mat.use_specular_ramp:
                layout.separator()
                layout.template_color_ramp(mat, "specular_ramp", expand=True)
                layout.separator()
    
                row = layout.row()
                row.prop(mat, "specular_ramp_input", text="Input")
                row.prop(mat, "specular_ramp_blend", text="Blend")
    
                layout.prop(mat, "specular_ramp_factor", text="Factor")
    
    class MATERIAL_PT_POV_mirror(MaterialButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define standard material reflectivity (mirror) buttons."""
    
    
        bl_label = "Mirror"
        bl_options = {'DEFAULT_CLOSED'}
    
        bl_idname = "MATERIAL_PT_POV_raytrace_mirror"
    
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        @classmethod
        def poll(cls, context):
            mat = context.material
            engine = context.scene.render.engine
    
            return (
                check_material(mat)
                and (mat.pov.type in {'SURFACE', 'WIRE'})
                and (engine in cls.COMPAT_ENGINES)
            )
    
    
        def draw_header(self, context):
            mat = context.material
            raym = mat.pov_raytrace_mirror
    
            self.layout.prop(raym, "use", text="")
    
        def draw(self, context):
            layout = self.layout
    
    
            mat = (
                context.material
            )  # Formerly : #mat = active_node_mat(context.material)
    
            raym = mat.pov_raytrace_mirror
    
            layout.active = raym.use
    
            split = layout.split()
    
            col = split.column()
            col.prop(raym, "reflect_factor")
    
            col.prop(raym, "mirror_color", text="")
    
    
            col = split.column()
            col.prop(raym, "fresnel")
            sub = col.column()
    
            sub.active = raym.fresnel > 0.0
    
            sub.prop(raym, "fresnel_factor", text="Blend")
    
            split = layout.split()
    
            col = split.column()
            col.separator()
            col.prop(raym, "depth")
            col.prop(raym, "distance", text="Max Dist")
            col.separator()
    
            sub = col.split(factor=0.4)
    
            sub.active = raym.distance > 0.0
    
            sub.label(text="Fade To:")
            sub.prop(raym, "fade_to", text="")
    
            col = split.column()
            col.label(text="Gloss:")
            col.prop(raym, "gloss_factor", text="Amount")
            sub = col.column()
    
            sub.active = raym.gloss_factor < 1.0
    
            sub.prop(raym, "gloss_threshold", text="Threshold")
            sub.prop(raym, "gloss_samples", text="Samples")
            sub.prop(raym, "gloss_anisotropic", text="Anisotropic")
    
    class MATERIAL_PT_POV_transp(MaterialButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define pov material transparency (alpha) buttons."""
    
    
        bl_label = "Transparency"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        @classmethod
        def poll(cls, context):
            mat = context.material
            engine = context.scene.render.engine
    
            return (
                check_material(mat)
                and (mat.pov.type in {'SURFACE', 'WIRE'})
                and (engine in cls.COMPAT_ENGINES)
            )
    
    
        def draw_header(self, context):
            mat = context.material
    
            if simple_material(mat):
                self.layout.prop(mat.pov, "use_transparency", text="")
    
        def draw(self, context):
            layout = self.layout
    
            base_mat = context.material
    
            mat = context.material  # FORMERLY active_node_mat(context.material)
    
            rayt = mat.pov_raytrace_transparency
    
            if simple_material(base_mat):
                row = layout.row()
                row.active = mat.pov.use_transparency
                row.prop(mat.pov, "transparency_method", expand=True)
    
            split = layout.split()
            split.active = base_mat.pov.use_transparency
    
            col = split.column()
            col.prop(mat.pov, "alpha")
            row = col.row()
    
            row.active = (base_mat.pov.transparency_method != 'MASK') and (
                not mat.pov.use_shadeless
            )
    
            row.prop(mat.pov, "specular_alpha", text="Specular")
    
            col = split.column()
    
            col.active = not mat.pov.use_shadeless
    
            col.prop(rayt, "fresnel")
            sub = col.column()
    
            sub.active = rayt.fresnel > 0.0
    
            sub.prop(rayt, "fresnel_factor", text="Blend")
    
            if base_mat.pov.transparency_method == 'RAYTRACE':
                layout.separator()
                split = layout.split()
                split.active = base_mat.pov.use_transparency
    
                col = split.column()
                col.prop(rayt, "ior")
                col.prop(rayt, "filter")
                col.prop(rayt, "falloff")
                col.prop(rayt, "depth_max")
                col.prop(rayt, "depth")
    
                col = split.column()
                col.label(text="Gloss:")
                col.prop(rayt, "gloss_factor", text="Amount")
                sub = col.column()
                sub.active = rayt.gloss_factor < 1.0
                sub.prop(rayt, "gloss_threshold", text="Threshold")
                sub.prop(rayt, "gloss_samples", text="Samples")
    
    class MATERIAL_PT_POV_reflection(MaterialButtonsPanel, Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Use this class to define more pov specific reflectivity buttons."""
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        bl_parent_id = "MATERIAL_PT_POV_raytrace_mirror"
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
    
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
    
            mat = context.material
    
            ob = context.object
    
            return (
                mat
                and mat.pov.type == "SURFACE"
                and (engine in cls.COMPAT_ENGINES)
                and not (mat.pov.material_use_nodes or mat.use_nodes)
            )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        def draw(self, context):
            layout = self.layout
    
            mat = context.material
    
            col = layout.column()
            col.prop(mat.pov, "irid_enable")
            if mat.pov.irid_enable:
    
    Thomas Dinges's avatar
    Thomas Dinges committed
                col = layout.column()
    
                col.prop(mat.pov, "irid_amount", slider=True)
                col.prop(mat.pov, "irid_thickness", slider=True)
    
                col.prop(mat.pov, "irid_turbulence", slider=True)
    
            col2 = col.split().column()
    
            if not mat.pov_raytrace_mirror.use:
    
                col2.label(text="Please Check Mirror settings :")
    
            col2.active = mat.pov_raytrace_mirror.use
    
            col2.prop(mat.pov, "mirror_use_IOR")
            if mat.pov.mirror_use_IOR:
                col2.alignment = 'CENTER'
                col2.label(text="The current Raytrace ")
    
                col2.label(text="Transparency IOR is: " + str(mat.pov.ior))
    
    '''
    #group some native Blender (SSS) and POV (Fade)settings under such a parent panel?
    class MATERIAL_PT_POV_interior(MaterialButtonsPanel, Panel):
        bl_label = "POV-Ray Interior"
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        bl_idname = "material.pov_interior"
        #bl_parent_id = "material.absorption"