Skip to content
Snippets Groups Projects
ui.py 91.6 KiB
Newer Older
  • Learn to ignore specific revisions
  •     row.operator(AddPresetRadiosity.bl_idname, text="", icon='REMOVE').remove_active = True
    
    # classes = (
        # POV_RADIOSITY_MT_presets,
        # AddPresetRadiosity,
        # )
    
    class RENDER_PT_povray_media(WorldButtonsPanel, bpy.types.Panel):
    
        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, bpy.types.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_povray_modifiers(ModifierButtonsPanel, bpy.types.Panel):
        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 :
                        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):
        bl_label = "SSS Presets"
        preset_subdir = "pov/material/sss"
        preset_operator = "script.execute_preset"
        draw = bpy.types.Menu.draw_preset
    
    class AddPresetSSS(AddPresetBase, bpy.types.Operator):
        '''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, bpy.types.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)
    
        def draw_header(self, context):
            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", text=MATERIAL_MT_POV_sss_presets.bl_label)
            sub.operator("AddPresetSSS.bl_idname", text="", icon='ADD')
            sub.operator("AddPresetSSS.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_povray_activate_node(MaterialButtonsPanel, bpy.types.Panel):
        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_povray_active_node(MaterialButtonsPanel, bpy.types.Panel):
        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_mirror(MaterialButtonsPanel, bpy.types.Panel):
        bl_label = "Mirror"
        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)
    
        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(mat, "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_povray_reflection(MaterialButtonsPanel, bpy.types.Panel):
        bl_label = "POV-Ray Reflection"
    
    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)
    
            col.prop(mat.pov, "conserve_energy")
            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.raytrace_transparency.ior))
    
    class MATERIAL_PT_povray_fade_color(MaterialButtonsPanel, bpy.types.Panel):
    
        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_header(self, context):
            mat = context.material
    
    
            self.layout.prop(mat.pov, "interior_fade_color", text="")
    
        def draw(self, context):
            layout = self.layout
            mat = context.material
    
            # layout.active = mat.pov.interior_fade_color
            if mat.pov.interior_fade_color != (0.0, 0.0, 0.0):
                layout.label(text="Raytrace transparency")
                layout.label(text="depth max Limit needs")
                layout.label(text="to be non zero to fade")
    
    
    
    class MATERIAL_PT_povray_caustics(MaterialButtonsPanel, bpy.types.Panel):
        bl_label = "Caustics"
        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_header(self, context):
            mat = context.material
    
            if mat.pov.caustics_enable:
                self.layout.prop(mat.pov, "caustics_enable", text="", icon="PMARKER_SEL" )
            else:
                self.layout.prop(mat.pov, "caustics_enable", text="", icon="PMARKER" )
    
        def draw(self, context):
    
            layout = self.layout
    
            mat = context.material
    
                col.prop(mat.pov, "refraction_caustics")
                if mat.pov.refraction_caustics:
    
                    col.prop(mat.pov, "refraction_type", text="")
    
                    if mat.pov.refraction_type == "1":
                        col.prop(mat.pov, "fake_caustics_power", slider=True)
                    elif mat.pov.refraction_type == "2":
                        col.prop(mat.pov, "photons_dispersion", slider=True)
                        col.prop(mat.pov, "photons_dispersion_samples", slider=True)
    
                if not mat.pov.refraction_caustics and not mat.pov.photons_reflection:
    
    Thomas Dinges's avatar
    Thomas Dinges committed
                    col = layout.column()
                    col.alignment = 'CENTER'
                    col.label(text="Caustics override is on, ")
                    col.label(text="but you didn't chose any !")
    
    class MATERIAL_PT_povray_replacement_text(MaterialButtonsPanel, bpy.types.Panel):
        bl_label = "Custom POV Code"
    
        def draw(self, context):
            layout = self.layout
    
            mat = context.material
    
    
    Thomas Dinges's avatar
    Thomas Dinges committed
            col = layout.column()
    
            col.prop(mat.pov, "replacement_text", text="")
    
    class TEXTURE_PT_povray_type(TextureButtonsPanel, bpy.types.Panel):
        bl_label = "POV-ray Textures"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        bl_options = {'HIDE_HEADER'}
    
        def draw(self, context):
            layout = self.layout
    
            tex = context.texture
    
    
            split = layout.split(factor=0.2)
    
            split.label(text="POV:")
            split.prop(tex.pov, "tex_pattern_type", text="")
    
    class TEXTURE_PT_povray_preview(TextureButtonsPanel, bpy.types.Panel):
        bl_label = "Preview"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        bl_options = {'HIDE_HEADER'}
    
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
            if not hasattr(context, "texture_slot"):
                return False
            tex=context.texture
            mat=context.material
            return (tex and (tex.pov.tex_pattern_type != 'emulator') and (engine in cls.COMPAT_ENGINES))
    
        def draw(self, context):
            tex = context.texture
            slot = getattr(context, "texture_slot", None)
            idblock = context_tex_datablock(context)
            layout = self.layout
            # if idblock:
                # layout.template_preview(tex, parent=idblock, slot=slot)
            if tex.pov.tex_pattern_type != 'emulator':
                layout.operator("tex.preview_update")
            else:
                layout.template_preview(tex, slot=slot)
    
    
    class TEXTURE_PT_povray_parameters(TextureButtonsPanel, bpy.types.Panel):
        bl_label = "POV-ray Pattern Options"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        def draw(self, context):
            mat = context.material
            layout = self.layout
            tex = context.texture
            align=True
            if tex is not None and tex.pov.tex_pattern_type != 'emulator':
                if tex.pov.tex_pattern_type == 'agate':
                    layout.prop(tex.pov, "modifier_turbulence", text="Agate Turbulence")
                if tex.pov.tex_pattern_type in {'spiral1', 'spiral2'}:
                    layout.prop(tex.pov, "modifier_numbers", text="Number of arms")
                if tex.pov.tex_pattern_type == 'tiling':
                    layout.prop(tex.pov, "modifier_numbers", text="Pattern number")
                if tex.pov.tex_pattern_type == 'magnet':
                    layout.prop(tex.pov, "magnet_style", text="Magnet style")
                if tex.pov.tex_pattern_type == 'quilted':
                    row = layout.row(align=align)
                    row.prop(tex.pov, "modifier_control0", text="Control0")
                    row.prop(tex.pov, "modifier_control1", text="Control1")
                if tex.pov.tex_pattern_type == 'brick':
                    col = layout.column(align=align)
                    row = col.row()
                    row.prop(tex.pov, "brick_size_x", text="Brick size X")
                    row.prop(tex.pov, "brick_size_y", text="Brick size Y")
                    row=col.row()
                    row.prop(tex.pov, "brick_size_z", text="Brick size Z")
                    row.prop(tex.pov, "brick_mortar", text="Brick mortar")
                if tex.pov.tex_pattern_type in {'julia','mandel','magnet'}:
                    col = layout.column(align=align)
                    if tex.pov.tex_pattern_type == 'julia':
                        row = col.row()
                        row.prop(tex.pov, "julia_complex_1", text="Complex 1")
                        row.prop(tex.pov, "julia_complex_2", text="Complex 2")
                    if tex.pov.tex_pattern_type == 'magnet' and tex.pov.magnet_style == 'julia':
                        row = col.row()
                        row.prop(tex.pov, "julia_complex_1", text="Complex 1")
                        row.prop(tex.pov, "julia_complex_2", text="Complex 2")
                    row=col.row()
    
                    if tex.pov.tex_pattern_type in {'julia','mandel'}:
    
                        row.prop(tex.pov, "f_exponent", text="Exponent")
    
                    if tex.pov.tex_pattern_type == 'magnet':
    
                        row.prop(tex.pov, "magnet_type", text="Type")
                    row.prop(tex.pov, "f_iter", text="Iterations")
                    row=col.row()
                    row.prop(tex.pov, "f_ior", text="Interior")
                    row.prop(tex.pov, "f_ior_fac", text="Factor I")
                    row=col.row()
                    row.prop(tex.pov, "f_eor", text="Exterior")
                    row.prop(tex.pov, "f_eor_fac", text="Factor E")
    
                if tex.pov.tex_pattern_type == 'gradient':
    
                    layout.label(text="Gradient orientation:")
                    column_flow = layout.column_flow(columns=3, align=True)
    
                    column_flow.prop(tex.pov, "grad_orient_x", text="X")
    
                    column_flow.prop(tex.pov, "grad_orient_y", text="Y")
                    column_flow.prop(tex.pov, "grad_orient_z", text="Z")
                if tex.pov.tex_pattern_type == 'pavement':
                    layout.prop(tex.pov, "pave_sides", text="Pavement:number of sides")
                    col = layout.column(align=align)
                    column_flow = col.column_flow(columns=3, align=True)
    
                    column_flow.prop(tex.pov, "pave_tiles", text="Tiles")
    
                    if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 6:
                        column_flow.prop(tex.pov, "pave_pat_35", text="Pattern")
                    if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 5:
                        column_flow.prop(tex.pov, "pave_pat_22", text="Pattern")
                    if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 5:
                        column_flow.prop(tex.pov, "pave_pat_12", text="Pattern")
                    if tex.pov.pave_sides == '3' and tex.pov.pave_tiles == 6:
                        column_flow.prop(tex.pov, "pave_pat_12", text="Pattern")
                    if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 4:
                        column_flow.prop(tex.pov, "pave_pat_7", text="Pattern")
                    if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 4:
                        column_flow.prop(tex.pov, "pave_pat_5", text="Pattern")
                    if tex.pov.pave_sides == '3' and tex.pov.pave_tiles == 5:
                        column_flow.prop(tex.pov, "pave_pat_4", text="Pattern")
                    if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 3:
                        column_flow.prop(tex.pov, "pave_pat_3", text="Pattern")
                    if tex.pov.pave_sides == '3' and tex.pov.pave_tiles == 4:
                        column_flow.prop(tex.pov, "pave_pat_3", text="Pattern")
                    if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 3:
                        column_flow.prop(tex.pov, "pave_pat_2", text="Pattern")
                    if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 6:
                        column_flow.label(text="!!! 5 tiles!")
                    column_flow.prop(tex.pov, "pave_form", text="Form")
                if tex.pov.tex_pattern_type == 'function':
    
                    layout.prop(tex.pov, "func_list", text="Functions")
    
                if tex.pov.tex_pattern_type == 'function' and tex.pov.func_list != "NONE":
                    func = None
                    if tex.pov.func_list in {"f_noise3d", "f_ph", "f_r", "f_th"}:
                        func = 0
                    if tex.pov.func_list in {"f_comma","f_crossed_trough","f_cubic_saddle",
                                             "f_cushion","f_devils_curve","f_enneper","f_glob",
                                             "f_heart","f_hex_x","f_hex_y","f_hunt_surface",
                                             "f_klein_bottle","f_kummer_surface_v1",
                                             "f_lemniscate_of_gerono","f_mitre","f_nodal_cubic",
                                             "f_noise_generator","f_odd","f_paraboloid","f_pillow",
                                             "f_piriform","f_quantum","f_quartic_paraboloid",
                                             "f_quartic_saddle","f_sphere","f_steiners_roman",
                                             "f_torus_gumdrop","f_umbrella"}:
                        func = 1
    
                    if tex.pov.func_list in {"f_bicorn","f_bifolia","f_boy_surface","f_superellipsoid",
                                             "f_torus"}:
    
                        func = 2
                    if tex.pov.func_list in {"f_ellipsoid","f_folium_surface","f_hyperbolic_torus",
                                             "f_kampyle_of_eudoxus","f_parabolic_torus",
                                             "f_quartic_cylinder","f_torus2"}:
                        func = 3
                    if tex.pov.func_list in {"f_blob2","f_cross_ellipsoids","f_flange_cover",
    
                                             "f_isect_ellipsoids","f_kummer_surface_v2",
                                             "f_ovals_of_cassini","f_rounded_box","f_spikes_2d",
                                             "f_strophoid"}:
    
                    if tex.pov.func_list in {"f_algbr_cyl1","f_algbr_cyl2","f_algbr_cyl3",
                                             "f_algbr_cyl4","f_blob","f_mesh1","f_poly4","f_spikes"}:
    
                    if tex.pov.func_list in {"f_devils_curve_2d","f_dupin_cyclid",
                                             "f_folium_surface_2d","f_hetero_mf",
                                             "f_kampyle_of_eudoxus_2d","f_lemniscate_of_gerono_2d",
                                             "f_polytubes","f_ridge","f_ridged_mf","f_spiral",
                                             "f_witch_of_agnesi"}:
    
                        func = 6
                    if tex.pov.func_list in {"f_helix1","f_helix2","f_piriform_2d","f_strophoid_2d"}:
                        func = 7
                    if tex.pov.func_list == "f_helical_torus":
                        func = 8
                    column_flow = layout.column_flow(columns=3, align=True)
    
                    column_flow.label(text="X")
    
                    column_flow.prop(tex.pov, "func_plus_x", text="")
                    column_flow.prop(tex.pov, "func_x", text="Value")
                    column_flow = layout.column_flow(columns=3, align=True)
    
                    column_flow.label(text="Y")
    
                    column_flow.prop(tex.pov, "func_plus_y", text="")
                    column_flow.prop(tex.pov, "func_y", text="Value")
                    column_flow = layout.column_flow(columns=3, align=True)
    
                    column_flow.label(text="Z")
    
                    column_flow.prop(tex.pov, "func_plus_z", text="")
                    column_flow.prop(tex.pov, "func_z", text="Value")
                    row=layout.row(align=align)
                    if func > 0:
                        row.prop(tex.pov, "func_P0", text="P0")
                    if func > 1:
                        row.prop(tex.pov, "func_P1", text="P1")
                    row=layout.row(align=align)
                    if func > 2:
                        row.prop(tex.pov, "func_P2", text="P2")
                    if func > 3:
                        row.prop(tex.pov, "func_P3", text="P3")
                    row=layout.row(align=align)
                    if func > 4:
                        row.prop(tex.pov, "func_P4", text="P4")
                    if func > 5:
                        row.prop(tex.pov, "func_P5", text="P5")
                    row=layout.row(align=align)
                    if func > 6:
                        row.prop(tex.pov, "func_P6", text="P6")
                    if func > 7:
                        row.prop(tex.pov, "func_P7", text="P7")
                        row=layout.row(align=align)
                        row.prop(tex.pov, "func_P8", text="P8")
                        row.prop(tex.pov, "func_P9", text="P9")
            ###################################################End Patterns############################
    
    
                layout.prop(tex.pov, "warp_types", text="Warp types") #warp
                if tex.pov.warp_types == "TOROIDAL":
                    layout.prop(tex.pov, "warp_tor_major_radius", text="Major radius")
                if tex.pov.warp_types not in {"CUBIC","NONE"}:
                    layout.prop(tex.pov, "warp_orientation", text="Warp orientation")
                col = layout.column(align=align)
    
                row = col.row()
                row.prop(tex.pov, "warp_dist_exp", text="Distance exponent")
    
                row = col.row()
                row.prop(tex.pov, "modifier_frequency", text="Frequency")
                row.prop(tex.pov, "modifier_phase", text="Phase")
    
                row=layout.row()
    
                row.label(text="Offset:")
                row.label(text="Scale:")
                row.label(text="Rotate:")
    
                col=layout.column(align=align)
    
                row=col.row()
                row.prop(tex.pov, "tex_mov_x", text="X")
                row.prop(tex.pov, "tex_scale_x", text="X")
                row.prop(tex.pov, "tex_rot_x", text="X")
                row=col.row()
                row.prop(tex.pov, "tex_mov_y", text="Y")
                row.prop(tex.pov, "tex_scale_y", text="Y")
                row.prop(tex.pov, "tex_rot_y", text="Y")
                row=col.row()
                row.prop(tex.pov, "tex_mov_z", text="Z")
                row.prop(tex.pov, "tex_scale_z", text="Z")
                row.prop(tex.pov, "tex_rot_z", text="Z")
                row=layout.row()
    
                row.label(text="Turbulence:")
    
                col=layout.column(align=align)
    
                row=col.row()
                row.prop(tex.pov, "warp_turbulence_x", text="X")
                row.prop(tex.pov, "modifier_octaves", text="Octaves")
                row=col.row()
                row.prop(tex.pov, "warp_turbulence_y", text="Y")
                row.prop(tex.pov, "modifier_lambda", text="Lambda")
                row=col.row()
                row.prop(tex.pov, "warp_turbulence_z", text="Z")
                row.prop(tex.pov, "modifier_omega", text="Omega")
    
    class TEXTURE_PT_povray_tex_gamma(TextureButtonsPanel, bpy.types.Panel):
        bl_label = "Image Gamma"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        def draw_header(self, context):
            tex = context.texture
    
    
            self.layout.prop(tex.pov, "tex_gamma_enable", text="", icon='SEQ_LUMA_WAVEFORM')
    
    
        def draw(self, context):
            layout = self.layout
    
            tex = context.texture
    
    
            layout.active = tex.pov.tex_gamma_enable
            layout.prop(tex.pov, "tex_gamma_value", text="Gamma Value")
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    
    #commented out below UI for texture only custom code inside exported material:
    # class TEXTURE_PT_povray_replacement_text(TextureButtonsPanel, bpy.types.Panel):
        # bl_label = "Custom POV Code"
        # COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        # def draw(self, context):
            # layout = self.layout
    
            # col = layout.column()
            # col.label(text="Replace properties with:")
            # col.prop(tex.pov, "replacement_text", text="")
    
    class OBJECT_PT_povray_obj_parameters(ObjectButtonsPanel, bpy.types.Panel):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        bl_label = "POV-Ray"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
    
        @classmethod
        def poll(cls, context):
    
            engine = context.scene.render.engine
            return (engine in cls.COMPAT_ENGINES)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
        def draw(self, context):
            layout = self.layout
    
            obj = context.object
    
    
            split = layout.split()
    
            col = split.column(align=True)
    
    
    Thomas Dinges's avatar
    Thomas Dinges committed
            col.label(text="Radiosity:")
    
            col.prop(obj.pov, "importance_value", text="Importance")
    
    Thomas Dinges's avatar
    Thomas Dinges committed
            col.label(text="Photons:")
    
            col.prop(obj.pov, "collect_photons", text="Receive Photon Caustics")
    
            if obj.pov.collect_photons:
                col.prop(obj.pov, "spacing_multiplier", text="Photons Spacing Multiplier")
    
            col = split.column()
            col.prop(obj.pov,"hollow")
            col.prop(obj.pov,"double_illuminate")
    
    
            if obj.type == 'META' or obj.pov.curveshape == 'lathe':
            #if obj.pov.curveshape == 'sor'
                col.prop(obj.pov,"sturm")
            col.prop(obj.pov,"no_shadow")
            col.prop(obj.pov,"no_image")
            col.prop(obj.pov,"no_reflection")
            col.prop(obj.pov,"no_radiosity")
            col.prop(obj.pov,"inverse")
            col.prop(obj.pov,"hierarchy")
            # col.prop(obj.pov,"boundorclip",text="Bound / Clip")
            # if obj.pov.boundorclip != "none":
                # col.prop_search(obj.pov,"boundorclipob",context.blend_data,"objects",text="Object")
                # text = "Clipped by"
                # if obj.pov.boundorclip == "clipped_by":
                    # text = "Bounded by"
                # col.prop(obj.pov,"addboundorclip",text=text)
    
    class OBJECT_PT_povray_obj_sphere(PovDataButtonsPanel, bpy.types.Panel):
        bl_label = "POV-Ray Sphere"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        #bl_options = {'HIDE_HEADER'}
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
            obj = context.object
    
            return (obj and obj.pov.object_as == 'SPHERE' and (engine in cls.COMPAT_ENGINES))
    
        def draw(self, context):
            layout = self.layout
    
            obj = context.object
    
            col = layout.column()
    
            if obj.pov.object_as == 'SPHERE':
                if obj.pov.unlock_parameters == False:
    
                    col.prop(obj.pov, "unlock_parameters", text="Exported parameters below", icon='LOCKED')
    
                    col.label(text="Sphere radius: " + str(obj.pov.sphere_radius))
    
                else:
    
                    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.sphere_update", text="Update",icon="SOLID")
    
    
                    #col.label(text="Parameters:")
                    col.prop(obj.pov, "sphere_radius", text="Radius of Sphere")
    
    
    
    class OBJECT_PT_povray_obj_cylinder(PovDataButtonsPanel, bpy.types.Panel):
        bl_label = "POV-Ray Cylinder"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        #bl_options = {'HIDE_HEADER'}
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
            obj = context.object
    
            return (obj and obj.pov.object_as == 'CYLINDER' and (engine in cls.COMPAT_ENGINES))
    
        def draw(self, context):
            layout = self.layout
    
            obj = context.object
    
            col = layout.column()
    
            if obj.pov.object_as == 'CYLINDER':
                if obj.pov.unlock_parameters == False:
    
                    col.prop(obj.pov, "unlock_parameters", text="Exported parameters below", icon='LOCKED')
    
                    col.label(text="Cylinder radius: " + str(obj.pov.cylinder_radius))
                    col.label(text="Cylinder cap location: " + str(obj.pov.cylinder_location_cap))
    
                else:
    
                    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.cylinder_update", text="Update",icon="MESH_CYLINDER")
    
    
                    #col.label(text="Parameters:")
                    col.prop(obj.pov, "cylinder_radius")
                    col.prop(obj.pov, "cylinder_location_cap")
    
    
    class OBJECT_PT_povray_obj_cone(PovDataButtonsPanel, bpy.types.Panel):
        bl_label = "POV-Ray Cone"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        #bl_options = {'HIDE_HEADER'}
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
            obj = context.object
    
            return (obj and obj.pov.object_as == 'CONE' and (engine in cls.COMPAT_ENGINES))
    
        def draw(self, context):
            layout = self.layout
    
            obj = context.object
    
            col = layout.column()
    
            if obj.pov.object_as == 'CONE':
                if obj.pov.unlock_parameters == False:
    
                    col.prop(obj.pov, "unlock_parameters", text="Exported parameters below", icon='LOCKED')
    
                    col.label(text="Cone base radius: " + str(obj.pov.cone_base_radius))
                    col.label(text="Cone cap radius: " + str(obj.pov.cone_cap_radius))
                    col.label(text="Cone proxy segments: " + str(obj.pov.cone_segments))
                    col.label(text="Cone height: " + str(obj.pov.cone_height))
                else:
    
                    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.pov, "cone_base_radius", text="Radius of Cone Base")
                    col.prop(obj.pov, "cone_cap_radius", text="Radius of Cone Cap")
                    col.prop(obj.pov, "cone_segments", text="Segmentation of Cone proxy")
                    col.prop(obj.pov, "cone_height", text="Height of the cone")
    
    class OBJECT_PT_povray_obj_superellipsoid(PovDataButtonsPanel, bpy.types.Panel):
        bl_label = "POV-Ray Superquadric ellipsoid"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        #bl_options = {'HIDE_HEADER'}
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
            obj = context.object
    
            return (obj and obj.pov.object_as == 'SUPERELLIPSOID' and (engine in cls.COMPAT_ENGINES))
    
        def draw(self, context):
            layout = self.layout
    
            obj = context.object
    
            col = layout.column()
    
            if obj.pov.object_as == 'SUPERELLIPSOID':
                if obj.pov.unlock_parameters == False:
    
                    col.prop(obj.pov, "unlock_parameters", text="Exported parameters below", icon='LOCKED')
    
                    col.label(text="Radial segmentation: " + str(obj.pov.se_u))
                    col.label(text="Lateral segmentation: " + str(obj.pov.se_v))
                    col.label(text="Ring shape: " + str(obj.pov.se_n1))
                    col.label(text="Cross-section shape: " + str(obj.pov.se_n2))
                    col.label(text="Fill up and down: " + str(obj.pov.se_edit))
                else:
    
                    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.superellipsoid_update", text="Update",icon="MOD_SUBSURF")
    
    
                    #col.label(text="Parameters:")
                    col.prop(obj.pov, "se_u")
                    col.prop(obj.pov, "se_v")
                    col.prop(obj.pov, "se_n1")
                    col.prop(obj.pov, "se_n2")
                    col.prop(obj.pov, "se_edit")
    
    class OBJECT_PT_povray_obj_torus(PovDataButtonsPanel, bpy.types.Panel):
        bl_label = "POV-Ray Torus"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        #bl_options = {'HIDE_HEADER'}
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
            obj = context.object
    
            return (obj and obj.pov.object_as == 'TORUS' and (engine in cls.COMPAT_ENGINES))
    
        def draw(self, context):
            layout = self.layout
    
            obj = context.object
    
            col = layout.column()
    
            if obj.pov.object_as == 'TORUS':
                if obj.pov.unlock_parameters == False:
    
                    col.prop(obj.pov, "unlock_parameters", text="Exported parameters below", icon='LOCKED')
    
                    col.label(text="Torus major radius: " + str(obj.pov.torus_major_radius))
                    col.label(text="Torus minor radius: " + str(obj.pov.torus_minor_radius))
                    col.label(text="Torus major segments: " + str(obj.pov.torus_major_segments))
                    col.label(text="Torus minor segments: " + str(obj.pov.torus_minor_segments))
                else:
    
                    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.torus_update", text="Update",icon="MESH_TORUS")
    
    
                    #col.label(text="Parameters:")
                    col.prop(obj.pov, "torus_major_radius")
                    col.prop(obj.pov, "torus_minor_radius")
                    col.prop(obj.pov, "torus_major_segments")
                    col.prop(obj.pov, "torus_minor_segments")
    
    class OBJECT_PT_povray_obj_supertorus(PovDataButtonsPanel, bpy.types.Panel):
        bl_label = "POV-Ray SuperTorus"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        #bl_options = {'HIDE_HEADER'}
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
            obj = context.object
    
            return (obj and obj.pov.object_as == 'SUPERTORUS' and (engine in cls.COMPAT_ENGINES))
    
        def draw(self, context):
            layout = self.layout
    
            obj = context.object
    
            col = layout.column()
    
            if obj.pov.object_as == 'SUPERTORUS':
                if obj.pov.unlock_parameters == False:
    
                    col.prop(obj.pov, "unlock_parameters", text="Exported parameters below", icon='LOCKED')
    
                    col.label(text="SuperTorus major radius: " + str(obj.pov.st_major_radius))
                    col.label(text="SuperTorus minor radius: " + str(obj.pov.st_minor_radius))
                    col.label(text="SuperTorus major segments: " + str(obj.pov.st_u))
                    col.label(text="SuperTorus minor segments: " + str(obj.pov.st_v))
    
                    col.label(text="SuperTorus Ring Manipulator: " + str(obj.pov.st_ring))
                    col.label(text="SuperTorus Cross Manipulator: " + str(obj.pov.st_cross))
                    col.label(text="SuperTorus Internal And External radii: " + str(obj.pov.st_ie))
    
                    col.label(text="SuperTorus accuracy: " + str(ob.pov.st_accuracy))
                    col.label(text="SuperTorus max gradient: " + str(ob.pov.st_max_gradient))
    
                    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.supertorus_update", text="Update",icon="MESH_TORUS")
    
    
                    #col.label(text="Parameters:")
                    col.prop(obj.pov, "st_major_radius")
                    col.prop(obj.pov, "st_minor_radius")
                    col.prop(obj.pov, "st_u")
                    col.prop(obj.pov, "st_v")
                    col.prop(obj.pov, "st_ring")
                    col.prop(obj.pov, "st_cross")
                    col.prop(obj.pov, "st_ie")
                    #col.prop(obj.pov, "st_edit") #?
                    col.prop(obj.pov, "st_accuracy")
                    col.prop(obj.pov, "st_max_gradient")
    
    class OBJECT_PT_povray_obj_parametric(PovDataButtonsPanel, bpy.types.Panel):
        bl_label = "POV-Ray Parametric surface"
        COMPAT_ENGINES = {'POVRAY_RENDER'}
        #bl_options = {'HIDE_HEADER'}
        @classmethod
        def poll(cls, context):
            engine = context.scene.render.engine
            obj = context.object
    
            return (obj and obj.pov.object_as == 'PARAMETRIC' and (engine in cls.COMPAT_ENGINES))
    
        def draw(self, context):
            layout = self.layout
    
            obj = context.object
    
            col = layout.column()
    
            if obj.pov.object_as == 'PARAMETRIC':
                if obj.pov.unlock_parameters == False: