Skip to content
Snippets Groups Projects
__init__.py 61.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • 
        unlock_parameters = BoolProperty(name="Lock",default = False)
        
        curveshape = EnumProperty(
                name="Povray Shape Type",
                items=(("birail", "Birail", ""),
                       ("cairo", "Cairo", ""),
                       ("lathe", "Lathe", ""),
                       ("loft", "Loft", ""),
                       ("prism", "Prism", ""),
                       ("sphere_sweep", "Sphere Sweep", "")),
                default="sphere_sweep")
                
        mesh_write_as = EnumProperty(
                name="Mesh Write As",
                items=(("blobgrid", "Blob Grid", ""),
                       ("grid", "Grid", ""),
                       ("mesh", "Mesh", "")),
                default="mesh")
        # shape_as_light = StringProperty(name="Light",maxlen=1024)
    
        # object_ior = FloatProperty(
                # name="IOR", description="IOR",
                # min=1.0, max=10.0,default=1.0)
        # fake_caustics_power = FloatProperty(
                # name="Power", description="Fake caustics power",
                # min=0.0, max=10.0,default=0.0)
        # target = BoolProperty(name="Target",description="",default=False)
        # target_value = FloatProperty(
                # name="Value", description="",
                # min=0.0, max=1.0,default=1.0)
        # refraction = BoolProperty(name="Refraction",description="",default=False)
        # dispersion = BoolProperty(name="Dispersion",description="",default=False)
        # dispersion_value = FloatProperty(
                # name="Dispersion", description="Good values are 1.01 to 1.1. ",
                # min=1.0, max=1.2,default=1.01)
        # dispersion_samples = IntProperty(name="Samples",min=2, max=100,default=7)
        # reflection = BoolProperty(name="Reflection",description="",default=False)
        # pass_through = BoolProperty(name="Pass through",description="",default=False)
        no_shadow = BoolProperty(name="No Shadow",default=False)
        
        no_image = BoolProperty(name="No Image",default=False)
        
        no_reflection = BoolProperty(name="No Reflection",default=False)
        
        no_radiosity = BoolProperty(name="No Radiosity",default=False)
        
        inverse = BoolProperty(name="Inverse",default=False)
        
        sturm = BoolProperty(name="Sturm",default=False)
        
        double_illuminate = BoolProperty(name="Double Illuminate",default=False)
        
        hierarchy = BoolProperty(name="Hierarchy",default=False)
        
        hollow = BoolProperty(name="Hollow",default=False)
        
        boundorclip = EnumProperty(
                name="Boundorclip",
                items=(("none", "None", ""),
                       ("bounded_by", "Bounded_by", ""),
                       ("clipped_by", "Clipped_by", "")),
                default="none")
        boundorclipob = StringProperty(maxlen=1024)
        
        addboundorclip = BoolProperty(description="",default=False)
        
        blob_threshold = FloatProperty(name="Threshold",min=0.00, max=10.0, default=0.6)
    
        blob_strength = FloatProperty(name="Strength",min=-10.00, max=10.0, default=1.00)
        
        res_u = IntProperty(name="U",min=100, max=1000, default=500)
        
        res_v = IntProperty(name="V",min=100, max=1000, default=500)
        
        contained_by = EnumProperty(
                name="Contained by",
                items=(("box", "Box", ""),
                       ("sphere", "Sphere", "")),
                default="box")
                
        container_scale = FloatProperty(name="Container Scale",min=0.0, max=10.0, default=1.00)
        
        threshold = FloatProperty(name="Threshold",min=0.0, max=10.0, default=0.00)
        
        accuracy = FloatProperty(name="Accuracy",min=0.0001, max=0.1, default=0.001)
        
        max_gradient = FloatProperty(name="Max Gradient",min=0.0, max=100.0, default=5.0)
        
        all_intersections = BoolProperty(name="All Intersections",default=False)
        
        max_trace = IntProperty(name="Max Trace",min=1, max=100,default=1)
    
    
    
        def prop_update_cylinder(self, context):
            if bpy.ops.pov.cylinder_update.poll():
                bpy.ops.pov.cylinder_update()
        cylinder_radius = FloatProperty(name="Cylinder R",min=0.00, max=10.0, default=0.04, update=prop_update_cylinder)
        cylinder_location_cap = FloatVectorProperty(
                name="Cylinder Cap Location", subtype='TRANSLATION',
                description="The position of the 'other' end of the cylinder (relative to object location)",
                default=(0.0, 0.0, 2.0), update=prop_update_cylinder,
        )
    
        imported_cyl_loc = FloatVectorProperty(
            name="Imported Pov location",
            precision=6, 
            default=(0.0, 0.0, 0.0))
            
        imported_cyl_loc_cap = FloatVectorProperty(
            name="Imported Pov location",
            precision=6, 
            default=(0.0, 0.0, 2.0))
    
    
        def prop_update_sphere(self, context):
            bpy.ops.pov.sphere_update()
    
        sphere_radius = FloatProperty(name="Sphere radius",min=0.00, max=10.0, default=0.5, update=prop_update_sphere)
    
    
    
        def prop_update_cone(self, context):
            bpy.ops.pov.cone_update()
    
        cone_base_radius = FloatProperty(
            name = "Base radius", description = "The first radius of the cone",
            default = 1.0, min = 0.01, max = 100.0, update=prop_update_cone)
        cone_cap_radius = FloatProperty(
            name = "Cap radius", description = "The second radius of the cone",
            default = 0.3, min = 0.0, max = 100.0, update=prop_update_cone)
            
        cone_segments = IntProperty(
            name = "Segments", description = "Radial segmentation of proxy mesh",
            default = 16, min = 3, max = 265, update=prop_update_cone)
    
        cone_height = FloatProperty(
            name = "Height", description = "Height of the cone",
            default = 2.0, min = 0.01, max = 100.0, update=prop_update_cone)
    
        cone_base_z = FloatProperty()
        cone_cap_z = FloatProperty()    
    
    ###########Parametric
        def prop_update_parametric(self, context):
            bpy.ops.pov.parametric_update()
        
        u_min = FloatProperty(name = "U Min",
                        description = "",
                        default = 0.0, update=prop_update_parametric)
        v_min = FloatProperty(name = "V Min",
                        description = "",
                        default = 0.0, update=prop_update_parametric)
        u_max = FloatProperty(name = "U Max",
                        description = "",
                        default = 6.28, update=prop_update_parametric)
        v_max = FloatProperty(name = "V Max",
                        description = "",
                        default = 12.57, update=prop_update_parametric)
        x_eq = StringProperty(
                        maxlen=1024, default = "cos(v)*(1+cos(u))*sin(v/8)", update=prop_update_parametric)
        y_eq = StringProperty(
                        maxlen=1024, default = "sin(u)*sin(v/8)+cos(v/8)*1.5", update=prop_update_parametric)
        z_eq = StringProperty(
                        maxlen=1024, default = "sin(v)*(1+cos(u))*sin(v/8)", update=prop_update_parametric)
    
    ###########Torus
    
        def prop_update_torus(self, context):
            bpy.ops.pov.torus_update()
            
        torus_major_segments = IntProperty(
                        name = "Segments", description = "Radial segmentation of proxy mesh",
                        default = 48, min = 3, max = 720, update=prop_update_torus)
        torus_minor_segments = IntProperty(
                        name = "Segments", description = "Cross-section segmentation of proxy mesh",
                        default = 12, min = 3, max = 720, update=prop_update_torus)
        torus_major_radius = FloatProperty(
                        name="Major radius",
                        description="Major radius",
                        min=0.00, max=100.00, default=1.0, update=prop_update_torus)
        torus_minor_radius = FloatProperty(
                        name="Minor radius",
                        description="Minor radius",
                        min=0.00, max=100.00, default=0.25, update=prop_update_torus)
    
    
    ###########Rainbow
        arc_angle = FloatProperty(name = "Arc angle",
                          description = "The angle of the raynbow arc in degrees",
                          default = 360, min = 0.01, max = 360.0)
        falloff_angle = FloatProperty(name = "Falloff angle",
                          description = "The angle after which rainbow dissolves into background",
                          default = 360, min = 0.0, max = 360)
    
    ###########HeightFields 
    
        quality = IntProperty(name = "Quality",
                          description = "",
                          default = 100, min = 1, max = 100)
                    
        hf_filename = StringProperty(maxlen = 1024)
        
        hf_gamma = FloatProperty(
                name="Gamma",
                description="Gamma",
                min=0.0001, max=20.0, default=1.0)
    
        hf_premultiplied = BoolProperty(
                name="Premultiplied",
                description="Premultiplied",
                default=True)
    
        hf_smooth = BoolProperty(
                name="Smooth",
                description="Smooth",
                default=False)
    
        hf_water = FloatProperty(
                name="Water Level",
                description="Wather Level",
                min=0.00, max=1.00, default=0.0)
    
        hf_hierarchy = BoolProperty(
                name="Hierarchy",
                description="Height field hierarchy",
                default=True)
     
    ##############Superellipsoid
        def prop_update_superellipsoid(self, context):
            bpy.ops.pov.superellipsoid_update()
    
        se_param1 = FloatProperty(
                name="Parameter 1",
                description="",
                min=0.00, max=10.0, default=0.04)
    
        se_param2 = FloatProperty(
                name="Parameter 2",
                description="",
                min=0.00, max=10.0, default=0.04)
                
        se_u = IntProperty(name = "U-segments",
                        description = "radial segmentation",
                        default = 20, min = 4, max = 265,
                        update=prop_update_superellipsoid)
        se_v = IntProperty(name = "V-segments",
                        description = "lateral segmentation",
                        default = 20, min = 4, max = 265,
                        update=prop_update_superellipsoid)
        se_n1 = FloatProperty(name = "Ring manipulator",
                        description = "Manipulates the shape of the Ring",
                        default = 1.0, min = 0.01, max = 100.0,
                        update=prop_update_superellipsoid)
        se_n2 = FloatProperty(name = "Cross manipulator",
                        description = "Manipulates the shape of the cross-section",
                        default = 1.0, min = 0.01, max = 100.0,
                        update=prop_update_superellipsoid)
        se_edit = EnumProperty(items=[("NOTHING", "Nothing", ""),
                                    ("NGONS", "N-Gons", ""),
                                    ("TRIANGLES", "Triangles", "")],
                        name="Fill up and down",
                        description="",
                        default='TRIANGLES',
                        update=prop_update_superellipsoid)
    #############Used for loft and Superellipsoid, etc.
        curveshape = EnumProperty(
                name="Povray Shape Type",
                items=(("birail", "Birail", ""),
                       ("cairo", "Cairo", ""),
                       ("lathe", "Lathe", ""),
                       ("loft", "Loft", ""),
                       ("prism", "Prism", ""),
                       ("sphere_sweep", "Sphere Sweep", ""),
                       ("sor", "Surface of Revolution", "")),
                default="sphere_sweep")
                
    #############Supertorus
        def prop_update_supertorus(self, context):
            bpy.ops.pov.supertorus_update()
            
        st_major_radius = FloatProperty(
                name="Major radius",
                description="Major radius",
                min=0.00, max=100.00, default=1.0,
                update=prop_update_supertorus)
    
        st_minor_radius = FloatProperty(
                name="Minor radius",
                description="Minor radius",
                min=0.00, max=100.00, default=0.25,
                update=prop_update_supertorus)
    
        st_ring = FloatProperty(
                name="Ring",
                description="Ring manipulator",
                min=0.0001, max=100.00, default=1.00,
                update=prop_update_supertorus)
    
        st_cross = FloatProperty(
                name="Cross",
                description="Cross manipulator",
                min=0.0001, max=100.00, default=1.00,
                update=prop_update_supertorus)
    
        st_accuracy = FloatProperty(
                name="Accuracy",
                description="Supertorus accuracy",
                min=0.00001, max=1.00, default=0.001)
    
        st_max_gradient = FloatProperty(
                name="Gradient",
                description="Max gradient",
                min=0.0001, max=100.00, default=10.00,
                update=prop_update_supertorus)
                
        st_R = FloatProperty(name = "big radius",
                          description = "The radius inside the tube",
                          default = 1.0, min = 0.01, max = 100.0,
                          update=prop_update_supertorus)
        st_r = FloatProperty(name = "small radius",
                          description = "The radius of the tube",
                          default = 0.3, min = 0.01, max = 100.0,
                          update=prop_update_supertorus)
        st_u = IntProperty(name = "U-segments",
                        description = "radial segmentation",
                        default = 16, min = 3, max = 265,
                        update=prop_update_supertorus)
        st_v = IntProperty(name = "V-segments",
                        description = "lateral segmentation",
                        default = 8, min = 3, max = 265,
                        update=prop_update_supertorus)
        st_n1 = FloatProperty(name = "Ring manipulator",
                          description = "Manipulates the shape of the Ring",
                          default = 1.0, min = 0.01, max = 100.0,
                          update=prop_update_supertorus)
        st_n2 = FloatProperty(name = "Cross manipulator",
                          description = "Manipulates the shape of the cross-section",
                          default = 1.0, min = 0.01, max = 100.0,
                          update=prop_update_supertorus)
        st_ie = BoolProperty(name = "Use Int.+Ext. radii",
                          description = "Use internal and external radii",
                          default = False,
                          update=prop_update_supertorus)
        st_edit = BoolProperty(name="",
                            description="",
                            default=False,
                            options={'HIDDEN'},
                            update=prop_update_supertorus)
    
    ########################Loft
        loft_n = IntProperty(name = "Segments",
                        description = "Vertical segments",
                        default = 16, min = 3, max = 720)
        loft_rings_bottom = IntProperty(name = "Bottom",
                        description = "Bottom rings",
                        default = 5, min = 2, max = 100)
        loft_rings_side = IntProperty(name = "Side",
                        description = "Side rings",
                        default = 10, min = 2, max = 100)
        loft_thick = FloatProperty(name = "Thickness",
                          description = "Manipulates the shape of the Ring",
                          default = 0.3, min = 0.01, max = 1.0)
        loft_r = FloatProperty(name = "Radius",
                          description = "Radius",
                          default = 1, min = 0.01, max = 10)
        loft_height = FloatProperty(name = "Height",
                          description = "Manipulates the shape of the Ring",
                          default = 2, min = 0.01, max = 10.0)       
    
    ###################Prism                     
        prism_n = IntProperty(name = "Sides",
                        description = "Number of sides",
                        default = 5, min = 3, max = 720)
        prism_r = FloatProperty(name = "Radius",
                        description = "Radius",
                        default = 1.0)
    
    ##################Isosurface
        iso_function_text = StringProperty(name="Function Text",maxlen=1024)#,update=iso_props_update_callback)
        
    ##################PolygonToCircle
        polytocircle_resolution = IntProperty(name = "Resolution",
                        description = "",
                        default = 3, min = 0, max = 256)
        polytocircle_ngon = IntProperty(name = "NGon",
                        description = "",
                        min = 3, max = 64,default = 5)
        polytocircle_ngonR = FloatProperty(name = "NGon Radius",
                        description = "",
                        default = 0.3)
        polytocircle_circleR = FloatProperty(name = "Circle Radius",
                        description = "",
                        default = 1.0)
    
    #################Avogadro
        # filename_ext = ".png"
        
        # filter_glob = StringProperty(
                # default="*.exr;*.gif;*.hdr;*.iff;*.jpeg;*.jpg;*.pgm;*.png;*.pot;*.ppm;*.sys;*.tga;*.tiff;*.EXR;*.GIF;*.HDR;*.IFF;*.JPEG;*.JPG;*.PGM;*.PNG;*.POT;*.PPM;*.SYS;*.TGA;*.TIFF",
                # options={'HIDDEN'},
                # )
                        
    
    ###############################################################################
    # Camera POV properties.
    ###############################################################################
    
    class RenderPovSettingsCamera(PropertyGroup):
    
        dof_enable = BoolProperty(
                name="Depth Of Field", description="EnablePOV-Ray Depth Of Field ",
    
                name="Aperture",
    
                description="Similar to a real camera's aperture effect over focal blur (though not "
                            "in physical units and independant of focal length). "
    
                min=0.01, max=1.00, default=0.50)
    
        dof_samples_min = IntProperty(
                name="Samples Min", description="Minimum number of rays to use for each pixel",
    
        dof_samples_max = IntProperty(
                name="Samples Max", description="Maximum number of rays to use for each pixel",
    
                name="Variance",
    
                description="Minimum threshold (fractional value) for adaptive DOF sampling (up "
                            "increases quality and render time). The value for the variance should "
    
                            "be in the range of the smallest displayable color difference",
    
                min=1, max=100000, soft_max=10000, default=8192)
    
                name="Confidence",
    
                description="Probability to reach the real color value. Larger confidence values "
    
                            "will lead to more samples, slower traces and better images",
    
                min=0.01, max=0.99, default=0.20)
    
        ##################################CustomPOV Code############################
    
        replacement_text = StringProperty(
                name="Texts in blend file",
    
                description="Type the declared name in custom POV code or an external .inc "
    
    ###############################################################################
    # Text POV properties.
    ###############################################################################
    
    class RenderPovSettingsText(PropertyGroup):
    
                name="Custom Code",
                description="Add this text at the top of the exported POV-Ray file",
                default=False)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    ###############################################################################
    # Povray Preferences.
    ###############################################################################
    class PovrayPreferences(AddonPreferences):
        bl_idname = __name__
    
    
        branch_feature_set_povray = EnumProperty(
                    name="Feature Set",
    
                    description="Choose between official (POV-Ray) or (UberPOV) "
                                "development branch features to write in the pov file",
                    items= (('povray', 'Official POV-Ray', '','PLUGIN', 0),
                            ('uberpov', 'Unofficial UberPOV', '', 'PLUGIN', 1)),
    
        filepath_povray = StringProperty(
    
                    description="Path to renderer executable",
                    subtype='FILE_PATH',
                    )
        def draw(self, context):
            layout = self.layout
    
            layout.prop(self, "branch_feature_set_povray")
    
            layout.prop(self, "filepath_povray")
    
    
    def register():
        bpy.utils.register_module(__name__)
    
        bpy.types.INFO_MT_add.prepend(ui.menu_func_add)
        bpy.types.INFO_MT_file_import.append(ui.menu_func_import)
        #used for parametric objects:
        addon_utils.enable("add_mesh_extra_objects", default_set=False, persistent=True)
        
    
        #bpy.types.TEXTURE_PT_context_texture.prepend(TEXTURE_PT_povray_type)
    
        bpy.types.Scene.pov = PointerProperty(type=RenderPovSettingsScene)
        bpy.types.Material.pov = PointerProperty(type=RenderPovSettingsMaterial)
        bpy.types.Texture.pov = PointerProperty(type=RenderPovSettingsTexture)
        bpy.types.Object.pov = PointerProperty(type=RenderPovSettingsObject)
        bpy.types.Camera.pov = PointerProperty(type=RenderPovSettingsCamera)
        bpy.types.Text.pov = PointerProperty(type=RenderPovSettingsText)
    
        #bpy.types.TEXTURE_PT_context_texture.remove(TEXTURE_PT_povray_type)
    
        del bpy.types.Scene.pov
        del bpy.types.Material.pov
        del bpy.types.Texture.pov
        del bpy.types.Object.pov
        del bpy.types.Camera.pov
        del bpy.types.Text.pov
    
        
        addon_utils.disable("add_mesh_extra_objects", default_set=False)
        bpy.types.INFO_MT_file_import.remove(ui.menu_func_import)
        bpy.types.INFO_MT_add.remove(ui.menu_func_add)
        bpy.utils.unregister_module(__name__)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    if __name__ == "__main__":
        register()