Skip to content
Snippets Groups Projects
__init__.py 182 KiB
Newer Older
  • Learn to ignore specific revisions
  •             layout.prop(self,'height',text='')
                layout.prop(self,'slope',text='')
        def draw_color(self, context, node):
            return (0, 0, 0, 1)
    
    class PovraySocketMap(bpy.types.NodeSocket):
        bl_idname = 'PovraySocketMap'
        bl_label = 'Povray Socket'
    
        default_value: bpy.props.StringProperty()
    
        def draw(self, context, layout, node, text):
            layout.label(text)
        def draw_color(self, context, node):
            return (0.2, 0, 0.2, 1)
    
    class PovrayShaderNodeCategory(NodeCategory):
        @classmethod
        def poll(cls, context):
            return context.space_data.tree_type == 'ObjectNodeTree'
    
    class PovrayTextureNodeCategory(NodeCategory):
        @classmethod
        def poll(cls, context):
            return context.space_data.tree_type == 'TextureNodeTree'
    
    class PovraySceneNodeCategory(NodeCategory):
        @classmethod
        def poll(cls, context):
            return context.space_data.tree_type == 'CompositorNodeTree'
    
    node_categories = [
    
        PovrayShaderNodeCategory("SHADEROUTPUT", "Output", items=[
            NodeItem("PovrayOutputNode"),
            ]),
    
        PovrayShaderNodeCategory("SIMPLE", "Simple texture", items=[
            NodeItem("PovrayTextureNode"),
            ]),
    
        PovrayShaderNodeCategory("MAPS", "Maps", items=[
            NodeItem("PovrayBumpMapNode"),
            NodeItem("PovrayColorImageNode"),
            NodeItem("ShaderNormalMapNode"),
            NodeItem("PovraySlopeNode"),
            NodeItem("ShaderTextureMapNode"),
            NodeItem("ShaderNodeValToRGB"),
            ]),
    
        PovrayShaderNodeCategory("OTHER", "Other patterns", items=[
            NodeItem("PovrayImagePatternNode"),
            NodeItem("ShaderPatternNode"),
            ]),
    
        PovrayShaderNodeCategory("COLOR", "Color", items=[
            NodeItem("PovrayPigmentNode"),
            ]),
    
        PovrayShaderNodeCategory("TRANSFORM", "Transform", items=[
            NodeItem("PovrayMappingNode"),
            NodeItem("PovrayMultiplyNode"),
            NodeItem("PovrayModifierNode"),
            NodeItem("PovrayTransformNode"),
            NodeItem("PovrayValueNode"),
            ]),
    
        PovrayShaderNodeCategory("FINISH", "Finish", items=[
            NodeItem("PovrayFinishNode"),
            NodeItem("PovrayDiffuseNode"),
            NodeItem("PovraySpecularNode"),
            NodeItem("PovrayPhongNode"),
            NodeItem("PovrayAmbientNode"),
            NodeItem("PovrayMirrorNode"),
            NodeItem("PovrayIridescenceNode"),
            NodeItem("PovraySubsurfaceNode"),
    
    
        PovrayShaderNodeCategory("CYCLES", "Cycles", items=[
            NodeItem("ShaderNodeAddShader"),
            NodeItem("ShaderNodeAmbientOcclusion"),
            NodeItem("ShaderNodeAttribute"),
            NodeItem("ShaderNodeBackground"),
            NodeItem("ShaderNodeBlackbody"),
            NodeItem("ShaderNodeBrightContrast"),
            NodeItem("ShaderNodeBsdfAnisotropic"),
            NodeItem("ShaderNodeBsdfDiffuse"),
            NodeItem("ShaderNodeBsdfGlass"),
            NodeItem("ShaderNodeBsdfGlossy"),
            NodeItem("ShaderNodeBsdfHair"),
            NodeItem("ShaderNodeBsdfRefraction"),
            NodeItem("ShaderNodeBsdfToon"),
            NodeItem("ShaderNodeBsdfTranslucent"),
            NodeItem("ShaderNodeBsdfTransparent"),
            NodeItem("ShaderNodeBsdfVelvet"),
            NodeItem("ShaderNodeBump"),
            NodeItem("ShaderNodeCameraData"),
            NodeItem("ShaderNodeCombineHSV"),
            NodeItem("ShaderNodeCombineRGB"),
            NodeItem("ShaderNodeCombineXYZ"),
            NodeItem("ShaderNodeEmission"),
            NodeItem("ShaderNodeExtendedMaterial"),
            NodeItem("ShaderNodeFresnel"),
            NodeItem("ShaderNodeGamma"),
            NodeItem("ShaderNodeGeometry"),
            NodeItem("ShaderNodeGroup"),
            NodeItem("ShaderNodeHairInfo"),
            NodeItem("ShaderNodeHoldout"),
            NodeItem("ShaderNodeHueSaturation"),
            NodeItem("ShaderNodeInvert"),
            NodeItem("ShaderNodeLampData"),
            NodeItem("ShaderNodeLayerWeight"),
            NodeItem("ShaderNodeLightFalloff"),
            NodeItem("ShaderNodeLightPath"),
            NodeItem("ShaderNodeMapping"),
            NodeItem("ShaderNodeMaterial"),
            NodeItem("ShaderNodeMath"),
            NodeItem("ShaderNodeMixRGB"),
            NodeItem("ShaderNodeMixShader"),
            NodeItem("ShaderNodeNewGeometry"),
            NodeItem("ShaderNodeNormal"),
            NodeItem("ShaderNodeNormalMap"),
            NodeItem("ShaderNodeObjectInfo"),
            NodeItem("ShaderNodeOutput"),
            NodeItem("ShaderNodeOutputLamp"),
            NodeItem("ShaderNodeOutputLineStyle"),
            NodeItem("ShaderNodeOutputMaterial"),
            NodeItem("ShaderNodeOutputWorld"),
            NodeItem("ShaderNodeParticleInfo"),
            NodeItem("ShaderNodeRGB"),
            NodeItem("ShaderNodeRGBCurve"),
            NodeItem("ShaderNodeRGBToBW"),
            NodeItem("ShaderNodeScript"),
            NodeItem("ShaderNodeSeparateHSV"),
            NodeItem("ShaderNodeSeparateRGB"),
            NodeItem("ShaderNodeSeparateXYZ"),
            NodeItem("ShaderNodeSqueeze"),
            NodeItem("ShaderNodeSubsurfaceScattering"),
            NodeItem("ShaderNodeTangent"),
            NodeItem("ShaderNodeTexBrick"),
            NodeItem("ShaderNodeTexChecker"),
            NodeItem("ShaderNodeTexCoord"),
            NodeItem("ShaderNodeTexEnvironment"),
            NodeItem("ShaderNodeTexGradient"),
            NodeItem("ShaderNodeTexImage"),
            NodeItem("ShaderNodeTexMagic"),
            NodeItem("ShaderNodeTexMusgrave"),
            NodeItem("ShaderNodeTexNoise"),
            NodeItem("ShaderNodeTexPointDensity"),
            NodeItem("ShaderNodeTexSky"),
            NodeItem("ShaderNodeTexVoronoi"),
            NodeItem("ShaderNodeTexWave"),
            NodeItem("ShaderNodeTexture"),
            NodeItem("ShaderNodeUVAlongStroke"),
            NodeItem("ShaderNodeUVMap"),
            NodeItem("ShaderNodeValToRGB"),
            NodeItem("ShaderNodeValue"),
            NodeItem("ShaderNodeVectorCurve"),
            NodeItem("ShaderNodeVectorMath"),
            NodeItem("ShaderNodeVectorTransform"),
            NodeItem("ShaderNodeVolumeAbsorption"),
            NodeItem("ShaderNodeVolumeScatter"),
            NodeItem("ShaderNodeWavelength"),
            NodeItem("ShaderNodeWireframe"),
            ]),
    
        PovrayTextureNodeCategory("TEXTUREOUTPUT", "Output", items=[
            NodeItem("TextureNodeValToRGB"),
            NodeItem("TextureOutputNode"),
            ]),
    
        PovraySceneNodeCategory("ISOSURFACE", "Isosurface", items=[
            NodeItem("IsoPropsNode"),
            ]),
    
        PovraySceneNodeCategory("FOG", "Fog", items=[
            NodeItem("PovrayFogNode"),
    
            ]),
        ]
    ############### end nodes
    
    ###############################################################################
    # Texture POV properties.
    ###############################################################################
    
    class RenderPovSettingsTexture(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare texture level properties controllable in UI and translated to POV."""
        
    
        #former Space properties from  removed Blender Internal
        active_texture_index: IntProperty(
                name = "Index for texture_slots",
                default = 0)    
        use_limited_texture_context: BoolProperty(
                name="",
                description="Use the limited version of texture user (for ‘old shading’ mode)",
                default=True)
        texture_context: EnumProperty(
                name="Texture context",
                description="Type of texture data to display and edit",
                items=(('MATERIAL', "", "Show material textures", "MATERIAL",0), #"Show material textures"
                       ('WORLD', "", "Show world textures", "WORLD",1), #"Show world textures"
                       ('LAMP', "", "Show lamp textures", "LIGHT",2), #"Show lamp textures"
                       ('PARTICLES', "", "Show particles textures", "PARTICLES",3), #"Show particles textures"
                       ('LINESTYLE', "", "Show linestyle textures", "LINE_DATA",4), #"Show linestyle textures"
                       ('OTHER', "", "Show other data textures", "TEXTURE_DATA",5)), #"Show other data textures"
                default = 'MATERIAL')
     
    
        #Custom texture gamma
    
        tex_gamma_enable: BoolProperty(
    
                name="Enable custom texture gamma",
    
                description="Notify some custom gamma for which texture has been precorrected "
                            "without the file format carrying it and only if it differs from your "
    
        tex_gamma_value: FloatProperty(
    
                name="Custom texture gamma",
                description="value for which the file was issued e.g. a Raw photo is gamma 1.0",
                min=0.45, max=5.00, soft_min=1.00, soft_max=2.50, default=1.00)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    
        ##################################CustomPOV Code############################
    
        #commented out below if we wanted custom pov code in texture only, inside exported material:
        #replacement_text = StringProperty(
        #        name="Declared name:",
        #        description="Type the declared name in custom POV code or an external .inc "
        #                    "it points at. pigment {} expected",
        #        default="")
    
        tex_pattern_type: EnumProperty(
    
                description="Choose between Blender or POV parameters to specify texture",
    
                items= (('agate', 'Agate', '','PLUGIN', 0),
                       ('aoi', 'Aoi', '', 'PLUGIN', 1),
                       ('average', 'Average', '', 'PLUGIN', 2),
                       ('boxed', 'Boxed', '', 'PLUGIN', 3),
                       ('bozo', 'Bozo', '', 'PLUGIN', 4),
                       ('bumps', 'Bumps', '', 'PLUGIN', 5),
                       ('cells', 'Cells', '', 'PLUGIN', 6),
                       ('crackle', 'Crackle', '', 'PLUGIN', 7),
                       ('cubic', 'Cubic', '', 'PLUGIN', 8),
    
                       ('cylindrical', 'Cylindrical', '', 'PLUGIN', 9),
    
                       ('density_file', 'Density', '(.df3)', 'PLUGIN', 10),
                       ('dents', 'Dents', '', 'PLUGIN', 11),
                       ('fractal', 'Fractal', '', 'PLUGIN', 12),
                       ('function', 'Function', '', 'PLUGIN', 13),
    
                       ('gradient', 'Gradient', '', 'PLUGIN', 14),
                       ('granite', 'Granite', '', 'PLUGIN', 15),
    
                       ('image_pattern', 'Image pattern', '', 'PLUGIN', 16),
                       ('leopard', 'Leopard', '', 'PLUGIN', 17),
    
                       ('marble', 'Marble', '', 'PLUGIN', 18),
                       ('onion', 'Onion', '', 'PLUGIN', 19),
    
                       ('pigment_pattern', 'pigment pattern', '', 'PLUGIN', 20),
    
                       ('planar', 'Planar', '', 'PLUGIN', 21),
                       ('quilted', 'Quilted', '', 'PLUGIN', 22),
                       ('radial', 'Radial', '', 'PLUGIN', 23),
                       ('ripples', 'Ripples', '', 'PLUGIN', 24),
    
                       ('slope', 'Slope', '', 'PLUGIN', 25),
    
                       ('spherical', 'Spherical', '', 'PLUGIN', 26),
                       ('spiral1', 'Spiral1', '', 'PLUGIN', 27),
                       ('spiral2', 'Spiral2', '', 'PLUGIN', 28),
                       ('spotted', 'Spotted', '', 'PLUGIN', 29),
                       ('waves', 'Waves', '', 'PLUGIN', 30),
                       ('wood', 'Wood', '', 'PLUGIN', 31),
                       ('wrinkles', 'Wrinkles', '', 'PLUGIN', 32),
                       ('brick', "Brick", "", 'PLUGIN', 33),
                       ('checker', "Checker", "", 'PLUGIN', 34),
                       ('hexagon', "Hexagon", "", 'PLUGIN', 35),
                       ('object', "Mesh", "", 'PLUGIN', 36),
                       ('emulator', "Internal Emulator", "", 'PLUG', 37)),
    
        magnet_style: EnumProperty(
    
                name="Magnet style",
                description="magnet or julia",
    
                items=(('mandel', "Mandelbrot", ""),('julia', "Julia", "")),
    
        magnet_type: IntProperty(
    
                name="Magnet_type",
                description="1 or 2",
                min=1, max=2, default=2)
    
    
        warp_types: EnumProperty(
    
                name="Warp Types",
                description="Select the type of warp",
    
                items=(('PLANAR', "Planar", ""), ('CUBIC', "Cubic", ""),
                       ('SPHERICAL', "Spherical", ""), ('TOROIDAL', "Toroidal", ""),
                       ('CYLINDRICAL', "Cylindrical", ""), ('NONE', "None", "No indentation")),
    
        warp_orientation: EnumProperty(
    
                name="Warp Orientation",
                description="Select the orientation of warp",
                items=(('x', "X", ""), ('y', "Y", ""), ('z', "Z", "")),
                default='y')
    
        wave_type: EnumProperty(
    
                name="Waves type",
                description="Select the type of waves",
    
                items=(('ramp', "Ramp", ""), ('sine', "Sine", ""), ('scallop', "Scallop", ""),
                       ('cubic', "Cubic", ""), ('poly', "Poly", ""), ('triangle', 'Triangle', "")),
    
                default='ramp')
    
        gen_noise: IntProperty(
    
                name="Noise Generators",
                description="Noise Generators",
    
                min=1, max=3, default=1)
    
        warp_dist_exp: FloatProperty(
    
                name="Distance exponent",
                description="Distance exponent",
                min=0.0, max=100.0, default=1.0)
    
        warp_tor_major_radius: FloatProperty(
    
                name="Major radius",
                description="Torus is distance from major radius",
    
                min=0.0, max=5.0, default=1.0)
    
        warp_turbulence_x: FloatProperty(
    
                name="Turbulence X",
                description="Turbulence X",
                min=0.0, max=5.0, default=0.0)
    
        warp_turbulence_y: FloatProperty(
    
                name="Turbulence Y",
                description="Turbulence Y",
    
                min=0.0, max=5.0, default=0.0)
    
        warp_turbulence_z: FloatProperty(
    
                name="Turbulence Z",
                description="Turbulence Z",
                min=0.0, max=5.0, default=0.0)
    
        modifier_octaves: IntProperty(
    
                name="Turbulence octaves",
                description="Turbulence octaves",
    
                min=1, max=10, default=1)
    
        modifier_lambda: FloatProperty(
    
                name="Turbulence lambda",
                description="Turbulence lambda",
                min=0.0, max=5.0, default=1.00)
    
        modifier_omega: FloatProperty(
    
                name="Turbulence omega",
                description="Turbulence omega",
    
                min=0.0, max=10.0, default=1.00)
    
        modifier_phase: FloatProperty(
    
                description="The phase value causes the map entries to be shifted so that the map "
                            "starts and ends at a different place",
    
                min=0.0, max=2.0, default=0.0)
    
        modifier_frequency: FloatProperty(
    
                description="The frequency keyword adjusts the number of times that a color map "
                            "repeats over one cycle of a pattern",
    
                min=0.0, max=25.0, default=2.0)
    
        modifier_turbulence: FloatProperty(
    
                name="Turbulence",
                description="Turbulence",
    
                min=0.0, max=5.0, default=2.0)
    
    
        modifier_numbers: IntProperty(
    
                name="Numbers",
                description="Numbers",
    
                min=1, max=27, default=2)
    
        modifier_control0: IntProperty(
    
                name="Control0",
                description="Control0",
                min=0, max=100, default=1)
    
        modifier_control1: IntProperty(
    
                name="Control1",
                description="Control1",
                min=0, max=100, default=1)
    
    
        brick_size_x: FloatProperty(
    
                name="Brick size x",
                description="",
    
                min=0.0000, max=1.0000, default=0.2500)
    
        brick_size_y: FloatProperty(
    
                name="Brick size y",
                description="",
                min=0.0000, max=1.0000, default=0.0525)
    
        brick_size_z: FloatProperty(
    
                name="Brick size z",
                description="",
    
                min=0.0000, max=1.0000, default=0.1250)
    
        brick_mortar: FloatProperty(
    
                name="Mortar",
                description="Mortar",
                min=0.000, max=1.500, default=0.01)
    
    
        julia_complex_1: FloatProperty(
    
                name="Julia Complex 1",
                description="",
                min=0.000, max=1.500, default=0.360)
    
    
        julia_complex_2: FloatProperty(
    
                name="Julia Complex 2",
                description="",
                min=0.000, max=1.500, default=0.250)
    
    
        f_iter: IntProperty(
    
                name="Fractal Iteration",
                description="",
                min=0, max=100, default=20)
    
    
        f_exponent: IntProperty(
    
                name="Fractal Exponent",
                description="",
                min=2, max=33, default=2)
    
    
        f_ior: IntProperty(
    
                name="Fractal Interior",
                description="",
                min=1, max=6, default=1)
    
    
        f_ior_fac: FloatProperty(
    
                name="Fractal Interior Factor",
                description="",
                min=0.0, max=10.0, default=1.0)
    
    
        f_eor: IntProperty(
    
                name="Fractal Exterior",
                description="",
                min=1, max=8, default=1)
    
    
        f_eor_fac: FloatProperty(
    
                name="Fractal Exterior Factor",
                description="",
                min=0.0, max=10.0, default=1.0)
    
    
        grad_orient_x: IntProperty(
    
                name="Gradient orientation X",
                description="",
                min=0, max=1, default=0)
    
    
        grad_orient_y: IntProperty(
    
                name="Gradient orientation Y",
                description="",
                min=0, max=1, default=1)
    
    
        grad_orient_z: IntProperty(
    
                name="Gradient orientation Z",
                description="",
                min=0, max=1, default=0)
    
    
        pave_sides: EnumProperty(
    
                name="Pavement sides",
                description="",
                items=(('3', "3", ""), ('4', "4", ""), ('6', "6", "")),
                default='3')
    
    
        pave_pat_2: IntProperty(
    
                name="Pavement pattern 2",
                description="maximum: 2",
                min=1, max=2, default=2)
    
    
        pave_pat_3: IntProperty(
    
                name="Pavement pattern 3",
                description="maximum: 3",
                min=1, max=3, default=3)
    
    
        pave_pat_4: IntProperty(
    
                name="Pavement pattern 4",
                description="maximum: 4",
                min=1, max=4, default=4)
    
    
        pave_pat_5: IntProperty(
    
                name="Pavement pattern 5",
                description="maximum: 5",
                min=1, max=5, default=5)
    
    
        pave_pat_7: IntProperty(
    
                name="Pavement pattern 7",
                description="maximum: 7",
                min=1, max=7, default=7)
    
    
        pave_pat_12: IntProperty(
    
                name="Pavement pattern 12",
                description="maximum: 12",
                min=1, max=12, default=12)
    
    
        pave_pat_22: IntProperty(
    
                name="Pavement pattern 22",
                description="maximum: 22",
                min=1, max=22, default=22)
    
    
        pave_pat_35: IntProperty(
    
                name="Pavement pattern 35",
                description="maximum: 35",
                min=1, max=35, default=35)
    
        pave_tiles: IntProperty(
    
                name="Pavement tiles",
                description="If sides = 6, maximum tiles 5!!!",
                min=1, max=6, default=1)
    
    
        pave_form: IntProperty(
    
                name="Pavement form",
                description="",
    
                min=0, max=4, default=0)
    
    
        #########FUNCTIONS#############################################################################
        #########FUNCTIONS#############################################################################
    
        func_list: EnumProperty(
    
                name="Functions",
                description="Select the function for create pattern",
                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","")),
    
        func_x: FloatProperty(
    
                name="FX",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_plus_x: EnumProperty(
    
                name="Func plus x",
                description="",
                items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
                default='NONE')
    
    
        func_y: FloatProperty(
    
                name="FY",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_plus_y: EnumProperty(
    
                name="Func plus y",
                description="",
                items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
                default='NONE')
    
    
        func_z: FloatProperty(
    
                name="FZ",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_plus_z: EnumProperty(
    
                name="Func plus z",
                description="",
                items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
                default='NONE')
    
    
        func_P0: FloatProperty(
    
                name="P0",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_P1: FloatProperty(
    
                name="P1",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_P2: FloatProperty(
    
                name="P2",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_P3: FloatProperty(
    
                name="P3",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_P4: FloatProperty(
    
                name="P4",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_P5: FloatProperty(
    
                name="P5",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_P6: FloatProperty(
    
                name="P6",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_P7: FloatProperty(
    
                name="P7",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_P8: FloatProperty(
    
                name="P8",
                description="",
                min=0.0, max=25.0, default=1.0)
    
    
        func_P9: FloatProperty(
    
                min=0.0, max=25.0, default=1.0)
    
    
        #########################################
    
        tex_rot_x: FloatProperty(
    
                name="Rotate X",
                description="",
    
                min=-180.0, max=180.0, default=0.0)
    
        tex_rot_y: FloatProperty(
    
                name="Rotate Y",
                description="",
    
                min=-180.0, max=180.0, default=0.0)
    
        tex_rot_z: FloatProperty(
    
                name="Rotate Z",
                description="",
    
                min=-180.0, max=180.0, default=0.0)
    
    
        tex_mov_x: FloatProperty(
    
                name="Move X",
                description="",
    
                min=-100000.0, max=100000.0, default=0.0)
    
        tex_mov_y: FloatProperty(
    
                name="Move Y",
                description="",
    
                min=-100000.0, max=100000.0, default=0.0)
    
        tex_mov_z: FloatProperty(
    
                name="Move Z",
                description="",
    
                min=-100000.0, max=100000.0, default=0.0)
    
        tex_scale_x: FloatProperty(
    
                name="Scale X",
                description="",
    
                min=0.0, max=10000.0, default=1.0)
    
        tex_scale_y: FloatProperty(
    
                name="Scale Y",
                description="",
    
                min=0.0, max=10000.0, default=1.0)
    
        tex_scale_z: FloatProperty(
    
                name="Scale Z",
                description="",
    
                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(
    
                name="CSG Inside Vector", description="Direction to shoot CSG inside test rays at",
                precision=4, step=0.01, min=0, soft_max=1,
                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 "
    
        collect_photons: BoolProperty(
    
                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(
    
                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(
    
                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,
    
            default=(0.0, 0.0, 0.0))
    
        imported_loc_cap: FloatVectorProperty(
    
            precision=6,
    
        unlock_parameters: BoolProperty(name="Lock",default = False)
    
        # not in UI yet but used for sor (lathe) / prism... pov primitives
    
        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")
    
    
        object_ior: FloatProperty(
    
                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(
    
                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)
    
    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(
                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)",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=(0.0, 0.0, 2.0), update=prop_update_cylinder)
    
        imported_cyl_loc: FloatVectorProperty(
    
            precision=6,
    
        imported_cyl_loc_cap: FloatVectorProperty(
    
            precision=6,
    
        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(
    
            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):
    
    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()
    
        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):
    
    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(
    
                        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):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            """Update POV superellipsoid primitive parameters not only at creation but anytime they are changed in UI."""