Skip to content
Snippets Groups Projects
__init__.py 176 KiB
Newer Older
  • Learn to ignore specific revisions
  •     pave_sides: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement sides",
            description="",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ('3', "3", ""),
                ('4', "4", ""),
                ('6', "6", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default='3'
        )
    
        pave_pat_2: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement pattern 2",
            description="maximum: 2",
            min=1, max=2, default=2
        )
    
        pave_pat_3: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement pattern 3",
            description="maximum: 3",
            min=1, max=3, default=3
        )
    
        pave_pat_4: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement pattern 4",
            description="maximum: 4",
            min=1, max=4, default=4
        )
    
        pave_pat_5: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement pattern 5",
            description="maximum: 5",
            min=1, max=5, default=5
        )
    
        pave_pat_7: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement pattern 7",
            description="maximum: 7",
            min=1, max=7, default=7
        )
    
        pave_pat_12: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement pattern 12",
            description="maximum: 12",
            min=1, max=12, default=12
        )
    
        pave_pat_22: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement pattern 22",
            description="maximum: 22",
            min=1, max=22, default=22
        )
    
        pave_pat_35: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement pattern 35",
            description="maximum: 35",
            min=1, max=35, default=35,
        )
    
        pave_tiles: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement tiles",
            description="If sides = 6, maximum tiles 5!!!",
            min=1, max=6, default=1
        )
    
        pave_form: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pavement form",
            description="",
            min=0, max=4, default=0
        )
    
        #########FUNCTIONS#############################################################################
        #########FUNCTIONS#############################################################################
    
        func_list: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Functions",
            description="Select the function for create pattern",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ('NONE', "None", "No indentation"),
                ("f_algbr_cyl1","Algbr cyl1",""), ("f_algbr_cyl2","Algbr cyl2",""),
                ("f_algbr_cyl3","Algbr cyl3",""), ("f_algbr_cyl4","Algbr cyl4",""),
                ("f_bicorn","Bicorn",""), ("f_bifolia","Bifolia",""),
                ("f_blob","Blob",""), ("f_blob2","Blob2",""),
                ("f_boy_surface","Boy surface",""), ("f_comma","Comma",""),
                ("f_cross_ellipsoids","Cross ellipsoids",""),
                ("f_crossed_trough","Crossed trough",""), ("f_cubic_saddle","Cubic saddle",""),
                ("f_cushion","Cushion",""), ("f_devils_curve","Devils curve",""),
                ("f_devils_curve_2d","Devils curve 2d",""),
                ("f_dupin_cyclid","Dupin cyclid",""), ("f_ellipsoid","Ellipsoid",""),
                ("f_enneper","Enneper",""), ("f_flange_cover","Flange cover",""),
                ("f_folium_surface","Folium surface",""),
                ("f_folium_surface_2d","Folium surface 2d",""), ("f_glob","Glob",""),
                ("f_heart","Heart",""), ("f_helical_torus","Helical torus",""),
                ("f_helix1","Helix1",""), ("f_helix2","Helix2",""), ("f_hex_x","Hex x",""),
                ("f_hex_y","Hex y",""), ("f_hetero_mf","Hetero mf",""),
                ("f_hunt_surface","Hunt surface",""),
                ("f_hyperbolic_torus","Hyperbolic torus",""),
                ("f_isect_ellipsoids","Isect ellipsoids",""),
                ("f_kampyle_of_eudoxus","Kampyle of eudoxus",""),
                ("f_kampyle_of_eudoxus_2d","Kampyle of eudoxus 2d",""),
                ("f_klein_bottle","Klein bottle",""),
                ("f_kummer_surface_v1","Kummer surface v1",""),
                ("f_kummer_surface_v2","Kummer surface v2",""),
                ("f_lemniscate_of_gerono","Lemniscate of gerono",""),
                ("f_lemniscate_of_gerono_2d","Lemniscate of gerono 2d",""),
                ("f_mesh1","Mesh1",""), ("f_mitre","Mitre",""),
                ("f_nodal_cubic","Nodal cubic",""), ("f_noise3d","Noise3d",""),
                ("f_noise_generator","Noise generator",""), ("f_odd","Odd",""),
                ("f_ovals_of_cassini","Ovals of cassini",""), ("f_paraboloid","Paraboloid",""),
                ("f_parabolic_torus","Parabolic torus",""), ("f_ph","Ph",""),
                ("f_pillow","Pillow",""), ("f_piriform","Piriform",""),
                ("f_piriform_2d","Piriform 2d",""), ("f_poly4","Poly4",""),
                ("f_polytubes","Polytubes",""), ("f_quantum","Quantum",""),
                ("f_quartic_paraboloid","Quartic paraboloid",""),
                ("f_quartic_saddle","Quartic saddle",""),
                ("f_quartic_cylinder","Quartic cylinder",""), ("f_r","R",""),
                ("f_ridge","Ridge",""), ("f_ridged_mf","Ridged mf",""),
                ("f_rounded_box","Rounded box",""), ("f_sphere","Sphere",""),
                ("f_spikes","Spikes",""), ("f_spikes_2d","Spikes 2d",""),
                ("f_spiral","Spiral",""), ("f_steiners_roman","Steiners roman",""),
                ("f_strophoid","Strophoid",""), ("f_strophoid_2d","Strophoid 2d",""),
                ("f_superellipsoid","Superellipsoid",""), ("f_th","Th",""),
                ("f_torus","Torus",""), ("f_torus2","Torus2",""),
                ("f_torus_gumdrop","Torus gumdrop",""), ("f_umbrella","Umbrella",""),
                ("f_witch_of_agnesi","Witch of agnesi",""),
                ("f_witch_of_agnesi_2d","Witch of agnesi 2d","")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
            default='NONE',
        )
    
        func_x: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="FX",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_plus_x: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Func plus x",
            description="",
            items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
            default='NONE',
        )
    
        func_y: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="FY",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_plus_y: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Func plus y",
            description="",
            items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
            default='NONE',
        )
    
        func_z: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="FZ",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_plus_z: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Func plus z",
            description="",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ('NONE', "None", ""),
                ('increase', "*", ""),
                ('plus', "+", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default='NONE',
        )
    
        func_P0: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P0",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_P1: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P1",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_P2: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P2",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_P3: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P3",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_P4: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P4",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_P5: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P5",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_P6: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P6",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_P7: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P7",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_P8: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P8",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
        func_P9: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="P9",
            description="",
            min=0.0, max=25.0, default=1.0
        )
    
    
        #########################################
    
        tex_rot_x: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Rotate X",
            description="",
            min=-180.0, max=180.0, default=0.0
        )
    
        tex_rot_y: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Rotate Y",
            description="",
            min=-180.0, max=180.0, default=0.0
        )
    
        tex_rot_z: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Rotate Z",
            description="",
            min=-180.0, max=180.0, default=0.0
        )
    
        tex_mov_x: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Move X",
            description="",
            min=-100000.0, max=100000.0, default=0.0
        )
    
        tex_mov_y: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Move Y",
            description="",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=-100000.0,
            max=100000.0,
            default=0.0,
    
        tex_mov_z: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Move Z",
            description="",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=-100000.0,
            max=100000.0,
            default=0.0,
    
        tex_scale_x: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Scale X",
            description="",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=0.0,
            max=10000.0,
            default=1.0,
    
        tex_scale_y: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Scale Y",
            description="",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=0.0,
            max=10000.0,
            default=1.0,
    
        tex_scale_z: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Scale Z",
            description="",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=0.0,
            max=10000.0,
            default=1.0,
    
    ###############################################################################
    # Object POV properties.
    ###############################################################################
    
    class RenderPovSettingsObject(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare object and primitives level properties controllable in UI and translated to POV."""
    
    
        # Pov inside_vector used for CSG
    
        inside_vector: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="CSG Inside Vector",
            description="Direction to shoot CSG inside test rays at",
            precision=4,
            step=0.01,
            min=0,
            soft_max=1,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default=(0.001, 0.001, 0.5),
            options={'ANIMATABLE'},
            subtype='XYZ'
        )
    
        importance_value: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Radiosity Importance",
            description="Priority value relative to other objects for sampling radiosity rays. "
            "Increase to get more radiosity rays at comparatively small yet "
            "bright objects",
            min=0.01, max=1.00, default=0.50
        )
    
        collect_photons: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Receive Photon Caustics",
            description="Enable object to collect photons from other objects caustics. Turn "
            "off for objects that don't really need to receive caustics (e.g. objects"
            " that generate caustics often don't need to show any on themselves)",
            default=True,
        )
    
        spacing_multiplier: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Photons Spacing Multiplier",
            description="Multiplier value relative to global spacing of photons. "
            "Decrease by half to get 4x more photons at surface of "
            "this object (or 8x media photons than specified in the globals",
            min=0.01, max=1.00, default=1.00)
    
        ##################################CustomPOV Code############################
    
        replacement_text: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Declared name:",
            description="Type the declared name in custom POV code or an external .inc "
            "it points at. Any POV shape expected e.g: isosurface {}",
            default="",
        )
    
        #############POV specific object properties.############################
    
        object_as: StringProperty(maxlen=1024)
    
        imported_loc: FloatVectorProperty(
    
            name="Imported Pov location",
    
            precision=6,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default=(0.0, 0.0, 0.0),
        )
    
        imported_loc_cap: FloatVectorProperty(
    
            precision=6,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default=(0.0, 0.0, 2.0),
        )
    
        unlock_parameters: BoolProperty(name="Lock",default = False)
    
        # not in UI yet but used for sor (lathe) / prism... pov primitives
    
        curveshape: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Mesh Write As",
            items=(("blobgrid", "Blob Grid", ""),
                   ("grid", "Grid", ""),
                   ("mesh", "Mesh", "")),
            default="mesh",
        )
    
        object_ior: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="IOR", description="IOR",
            min=1.0, max=10.0,default=1.0
        )
    
        # shape_as_light = StringProperty(name="Light",maxlen=1024)
    
        # 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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            """Update POV cylinder primitive parameters not only at creation but anytime they are changed in UI."""
    
            if bpy.ops.pov.cylinder_update.poll():
                bpy.ops.pov.cylinder_update()
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
        cylinder_radius: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Cylinder R",min=0.00, max=10.0, default=0.04, update=prop_update_cylinder)
    
        cylinder_location_cap: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
            precision=6,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default=(0.0, 0.0, 0.0)
        )
    
        imported_cyl_loc_cap: FloatVectorProperty(
    
            precision=6,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default=(0.0, 0.0, 2.0)
        )
    
        def prop_update_sphere(self, context):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
            """Update POV sphere primitive parameters not only at creation but anytime they are changed in UI."""
    
    
            bpy.ops.pov.sphere_update()
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
        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):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
            """Update POV cone primitive parameters not only at creation but anytime they are changed in UI."""
    
    
        cone_base_radius: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name = "Segments",
            description = "Radial segmentation of proxy mesh",
            default = 16, min = 3, max = 265, update=prop_update_cone
        )
    
        cone_height: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            """Update POV parametric surface primitive parameters not only at creation but anytime they are changed in UI."""
    
            bpy.ops.pov.parametric_update()
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            maxlen=1024,
            default = "cos(v)*(1+cos(u))*sin(v/8)",
            update=prop_update_parametric
        )
    
    
        y_eq: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            maxlen=1024,
            default = "sin(u)*sin(v/8)+cos(v/8)*1.5",
            update=prop_update_parametric
        )
    
    
        z_eq: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            maxlen=1024,
            default = "sin(v)*(1+cos(u))*sin(v/8)",
            update=prop_update_parametric
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        ###########Torus
    
    
        def prop_update_torus(self, context):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            """Update POV torus primitive parameters not only at creation but anytime they are changed in UI."""
    
            bpy.ops.pov.torus_update()
    
        torus_major_segments: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name = "Segments",
            description = "Radial segmentation of proxy mesh",
            default = 48, min = 3, max = 720, update=prop_update_torus
        )
    
    
        torus_minor_segments: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name = "Segments",
            description = "Cross-section segmentation of proxy mesh",
            default = 12, min = 3, max = 720, update=prop_update_torus
        )
    
    
        torus_major_radius: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Major radius",
            description="Major radius",
            min=0.00, max=100.00, default=1.0, update=prop_update_torus
        )
    
    
        torus_minor_radius: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Minor radius",
            description="Minor radius",
            min=0.00, max=100.00, default=0.25, update=prop_update_torus
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        ###########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
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        ###########HeightFields
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        quality: IntProperty(
            name = "Quality",
            description = "",
            default = 100, min = 1, max = 100
        )
    
        hf_filename: StringProperty(maxlen = 1024)
    
        hf_gamma: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Gamma",
            description="Gamma",
            min=0.0001, max=20.0, default=1.0
        )
    
        hf_premultiplied: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Premultiplied",
            description="Premultiplied",
            default=True,
        )
    
        hf_smooth: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Smooth",
            description="Smooth",
            default=False,
        )
    
        hf_water: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Water Level",
            description="Wather Level",
            min=0.00, max=1.00, default=0.0,
        )
    
        hf_hierarchy: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Hierarchy",
            description="Height field hierarchy",
            default=True,
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        ##############Superellipsoid
    
        def prop_update_superellipsoid(self, context):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            """Update POV superellipsoid primitive parameters not only at creation but anytime they are changed in UI."""
    
            bpy.ops.pov.superellipsoid_update()
    
    
        se_param1: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Parameter 1",
            description="",
            min=0.00, max=10.0, default=0.04
        )
    
        se_param2: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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", "")],
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Fill up and down",
            description="",
            default='TRIANGLES',
            update=prop_update_superellipsoid
        )
    
        #############Used for loft and Superellipsoid, etc.
    
        curveshape: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Povray Shape Type",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ("birail", "Birail", ""),
                ("cairo", "Cairo", ""),
                ("lathe", "Lathe", ""),
                ("loft", "Loft", ""),
                ("prism", "Prism", ""),
                ("sphere_sweep", "Sphere Sweep", ""),
                ("sor", "Surface of Revolution", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="sphere_sweep",
        )
    
    #############Supertorus
        def prop_update_supertorus(self, context):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
            """Update POV supertorus primitive parameters not only at creation but anytime they are changed in UI."""
    
    
            bpy.ops.pov.supertorus_update()
    
        st_major_radius: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Major radius",
            description="Major radius",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=0.00,
            max=100.00,
            default=1.0,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            update=prop_update_supertorus
        )
    
        st_minor_radius: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Minor radius",
            description="Minor radius",
            min=0.00, max=100.00, default=0.25,
            update=prop_update_supertorus
        )
    
        st_ring: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Ring",
            description="Ring manipulator",
            min=0.0001, max=100.00, default=1.00,
            update=prop_update_supertorus
        )
    
        st_cross: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Cross",
            description="Cross manipulator",
            min=0.0001, max=100.00, default=1.00,
            update=prop_update_supertorus
        )
    
        st_accuracy: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Accuracy",
            description="Supertorus accuracy",
            min=0.00001, max=1.00, default=0.001
        )
    
        st_max_gradient: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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
        )
    
    ###############################################################################
    # Modifiers POV properties.
    ###############################################################################
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    # class RenderPovSettingsModifier(PropertyGroup):
    
        boolean_mod: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Operation",
            description="Choose the type of calculation for Boolean modifier",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ("BMESH", "Use the BMesh Boolean Solver", ""),
                ("CARVE", "Use the Carve Boolean Solver", ""),
                ("POV", "Use POV Constructive Solid Geometry", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="BMESH",
        )
    
        #################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):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare camera properties controllable in UI and translated to POV."""
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
        # DOF Toggle
    
        dof_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Depth Of Field",
            description="Enable POV Depth Of Field ",
            default=False,
        )
    
        dof_aperture: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Aperture",
            description="Similar to a real camera's aperture effect over focal blur (though not "
            "in physical units and independent of focal length). "
            "Increase to get more blur",
            min=0.01, max=1.00, default=0.50
        )
    
        dof_samples_min: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Samples Min",
            description="Minimum number of rays to use for each pixel",
            min=1, max=128, default=3
        )
    
        dof_samples_max: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Samples Max",
            description="Maximum number of rays to use for each pixel",
            min=1, max=128, default=9
        )
    
        dof_variance: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Variance",
            description="Minimum threshold (fractional value) for adaptive DOF sampling (up "
            "increases quality and render time). The value for the variance should "