*added: first implementation of procedural textures
*fixed:packed textures *fixed:library objects
This commit is contained in:
parent
d030a694ef
commit
07d031412a
|
@ -20,19 +20,17 @@
|
|||
|
||||
bl_info = {
|
||||
"name": "POV-Ray 3.7",
|
||||
"author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, "
|
||||
"Constantin Rahn, Bastien Montagne",
|
||||
"author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, Constantin Rahn, Bastien Montagne",
|
||||
"version": (0, 0, 9),
|
||||
"blender": (2, 57, 0),
|
||||
"location": "Render > Engine > POV-Ray 3.7",
|
||||
"description": "Basic POV-Ray 3.7 integration for blender",
|
||||
"warning": "both POV-Ray 3.7 and this script are beta",
|
||||
"warning": "this script is RC",
|
||||
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
|
||||
"Scripts/Render/POV-Ray",
|
||||
"Scripts/Render/POV-Ray",
|
||||
"tracker_url": "https://developer.blender.org/T23145",
|
||||
"category": "Render"}
|
||||
|
||||
|
||||
if "bpy" in locals():
|
||||
import imp
|
||||
imp.reload(ui)
|
||||
|
@ -43,6 +41,7 @@ else:
|
|||
import bpy
|
||||
from bpy.types import (AddonPreferences,
|
||||
PropertyGroup,
|
||||
Operator,
|
||||
)
|
||||
from bpy.props import (StringProperty,
|
||||
BoolProperty,
|
||||
|
@ -56,7 +55,8 @@ else:
|
|||
from . import render
|
||||
from . import update_files
|
||||
|
||||
|
||||
def string_strip_hyphen(name):
|
||||
return name.replace("-", "")
|
||||
|
||||
###############################################################################
|
||||
# Scene POV properties.
|
||||
|
@ -67,6 +67,10 @@ class RenderPovSettingsScene(PropertyGroup):
|
|||
name="Enable Tempfiles",
|
||||
description="Enable the OS-Tempfiles. Otherwise set the path where to save the files",
|
||||
default=True)
|
||||
pov_editor = BoolProperty(
|
||||
name="POV-Ray editor",
|
||||
description="Don't Close POV-Ray editor after rendering (Overriden by /EXIT command)",
|
||||
default=False)
|
||||
deletefiles_enable = BoolProperty(
|
||||
name="Delete files",
|
||||
description="Delete files after rendering. Doesn't work with the image",
|
||||
|
@ -419,7 +423,452 @@ class RenderPovSettingsTexture(PropertyGroup):
|
|||
# "it points at. pigment {} expected",
|
||||
# default="")
|
||||
|
||||
|
||||
|
||||
tex_pattern_type = EnumProperty(
|
||||
name="Texture_Type",
|
||||
description="Choose between Blender or POV-Ray 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)),
|
||||
default='emulator',
|
||||
)
|
||||
|
||||
magnet_style = EnumProperty(
|
||||
name="Magnet style",
|
||||
description="magnet or julia",
|
||||
items=(('mandel', "Mandelbrot", ""),('julia', "Julia", "")),
|
||||
default='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")),
|
||||
default='NONE')
|
||||
|
||||
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(
|
||||
name="Phase",
|
||||
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(
|
||||
name="Frequency",
|
||||
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","")),
|
||||
|
||||
default='NONE')
|
||||
|
||||
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(
|
||||
name="P9",
|
||||
description="",
|
||||
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.
|
||||
###############################################################################
|
||||
|
@ -530,10 +979,12 @@ class PovrayPreferences(AddonPreferences):
|
|||
layout = self.layout
|
||||
layout.prop(self, "filepath_povray")
|
||||
|
||||
|
||||
|
||||
|
||||
def register():
|
||||
bpy.utils.register_module(__name__)
|
||||
|
||||
#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)
|
||||
|
@ -544,7 +995,7 @@ def register():
|
|||
|
||||
def unregister():
|
||||
bpy.utils.unregister_module(__name__)
|
||||
|
||||
#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
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -57,6 +57,7 @@ for member in dir(properties_data_mesh):
|
|||
del properties_data_mesh
|
||||
|
||||
from bl_ui import properties_texture
|
||||
from bl_ui.properties_texture import context_tex_datablock
|
||||
for member in dir(properties_texture):
|
||||
subclass = getattr(properties_texture, member)
|
||||
try:
|
||||
|
@ -65,6 +66,7 @@ for member in dir(properties_texture):
|
|||
pass
|
||||
del properties_texture
|
||||
|
||||
|
||||
from bl_ui import properties_data_camera
|
||||
for member in dir(properties_data_camera):
|
||||
subclass = getattr(properties_data_camera, member)
|
||||
|
@ -130,6 +132,14 @@ class TextureButtonsPanel():
|
|||
rd = context.scene.render
|
||||
return tex and (rd.use_game_engine is False) and (rd.engine in cls.COMPAT_ENGINES)
|
||||
|
||||
# class TextureTypePanel(TextureButtonsPanel):
|
||||
|
||||
# @classmethod
|
||||
# def poll(cls, context):
|
||||
# tex = context.texture
|
||||
# engine = context.scene.render.engine
|
||||
# return tex and ((tex.type == cls.tex_type and not tex.use_nodes) and (engine in cls.COMPAT_ENGINES))
|
||||
|
||||
|
||||
class ObjectButtonsPanel():
|
||||
bl_space_type = 'PROPERTIES'
|
||||
|
@ -156,11 +166,22 @@ class CameraDataButtonsPanel():
|
|||
rd = context.scene.render
|
||||
return cam and (rd.use_game_engine is False) and (rd.engine in cls.COMPAT_ENGINES)
|
||||
|
||||
class WorldButtonsPanel():
|
||||
bl_space_type = 'PROPERTIES'
|
||||
bl_region_type = 'WINDOW'
|
||||
bl_context = "world"
|
||||
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
wld = context.world
|
||||
rd = context.scene.render
|
||||
return wld and (rd.use_game_engine is False) and (rd.engine in cls.COMPAT_ENGINES)
|
||||
|
||||
class TextButtonsPanel():
|
||||
bl_space_type = 'TEXT_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_label = "P.O.V-Ray"
|
||||
bl_label = "POV-Ray"
|
||||
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
|
||||
|
||||
@classmethod
|
||||
|
@ -174,6 +195,8 @@ class RENDER_PT_povray_export_settings(RenderButtonsPanel, bpy.types.Panel):
|
|||
bl_label = "Export Settings"
|
||||
COMPAT_ENGINES = {'POVRAY_RENDER'}
|
||||
|
||||
def draw_header(self, context):
|
||||
self.layout.label(icon='CONSOLE')
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
|
@ -187,6 +210,7 @@ class RENDER_PT_povray_export_settings(RenderButtonsPanel, bpy.types.Panel):
|
|||
col.prop(scene.pov, "command_line_switches", text="")
|
||||
split = layout.split()
|
||||
split.prop(scene.pov, "tempfiles_enable", text="OS Tempfiles")
|
||||
split.prop(scene.pov, "pov_editor", text="POV Editor")
|
||||
if not scene.pov.tempfiles_enable:
|
||||
split.prop(scene.pov, "deletefiles_enable", text="Delete files")
|
||||
|
||||
|
@ -209,13 +233,15 @@ class RENDER_PT_povray_export_settings(RenderButtonsPanel, bpy.types.Panel):
|
|||
|
||||
class RENDER_PT_povray_render_settings(RenderButtonsPanel, bpy.types.Panel):
|
||||
bl_label = "Render Settings"
|
||||
bl_icon = 'SETTINGS'
|
||||
COMPAT_ENGINES = {'POVRAY_RENDER'}
|
||||
|
||||
def draw_header(self, context):
|
||||
self.layout.label(icon='SETTINGS')
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
scene = context.scene
|
||||
|
||||
layout.active = (scene.pov.max_trace_level != 0)
|
||||
|
||||
col = layout.column()
|
||||
|
@ -243,8 +269,10 @@ class RENDER_PT_povray_antialias(RenderButtonsPanel, bpy.types.Panel):
|
|||
|
||||
def draw_header(self, context):
|
||||
scene = context.scene
|
||||
|
||||
self.layout.prop(scene.pov, "antialias_enable", text="")
|
||||
if scene.pov.antialias_enable:
|
||||
self.layout.prop(scene.pov, "antialias_enable", text="", icon='ANTIALIASED')
|
||||
else:
|
||||
self.layout.prop(scene.pov, "antialias_enable", text="", icon='ALIASED')
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
@ -275,11 +303,12 @@ class RENDER_PT_povray_antialias(RenderButtonsPanel, bpy.types.Panel):
|
|||
class RENDER_PT_povray_radiosity(RenderButtonsPanel, bpy.types.Panel):
|
||||
bl_label = "Radiosity"
|
||||
COMPAT_ENGINES = {'POVRAY_RENDER'}
|
||||
|
||||
def draw_header(self, context):
|
||||
scene = context.scene
|
||||
|
||||
self.layout.prop(scene.pov, "radio_enable", text="")
|
||||
if scene.pov.radio_enable:
|
||||
self.layout.prop(scene.pov, "radio_enable", text="", icon='RADIO')
|
||||
else:
|
||||
self.layout.prop(scene.pov, "radio_enable", text="", icon='RADIOBUT_OFF')
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
@ -323,7 +352,7 @@ class RENDER_PT_povray_radiosity(RenderButtonsPanel, bpy.types.Panel):
|
|||
split.prop(scene.pov, "radio_always_sample")
|
||||
|
||||
|
||||
class RENDER_PT_povray_media(RenderButtonsPanel, bpy.types.Panel):
|
||||
class RENDER_PT_povray_media(WorldButtonsPanel, bpy.types.Panel):
|
||||
bl_label = "Atmosphere Media"
|
||||
COMPAT_ENGINES = {'POVRAY_RENDER'}
|
||||
|
||||
|
@ -500,7 +529,251 @@ class MATERIAL_PT_povray_replacement_text(MaterialButtonsPanel, bpy.types.Panel)
|
|||
col.label(text="Replace properties with:")
|
||||
col.prop(mat.pov, "replacement_text", text="")
|
||||
|
||||
class TEXTURE_PT_povray_type(TextureButtonsPanel, bpy.types.Panel):
|
||||
bl_label = "POV-ray Textures"
|
||||
COMPAT_ENGINES = {'POVRAY_RENDER'}
|
||||
bl_options = {'HIDE_HEADER'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
tex = context.texture
|
||||
|
||||
split = layout.split(percentage=0.2)
|
||||
split.label(text="POV:")
|
||||
split.prop(tex.pov, "tex_pattern_type", text="")
|
||||
|
||||
class TEXTURE_PT_povray_preview(TextureButtonsPanel, bpy.types.Panel):
|
||||
bl_label = "Preview"
|
||||
COMPAT_ENGINES = {'POVRAY_RENDER'}
|
||||
bl_options = {'HIDE_HEADER'}
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
engine = context.scene.render.engine
|
||||
if not hasattr(context, "texture_slot"):
|
||||
return False
|
||||
tex=context.texture
|
||||
mat=context.material
|
||||
return (tex and (tex.pov.tex_pattern_type != 'emulator') and (engine in cls.COMPAT_ENGINES))
|
||||
|
||||
def draw(self, context):
|
||||
tex = context.texture
|
||||
slot = getattr(context, "texture_slot", None)
|
||||
idblock = context_tex_datablock(context)
|
||||
layout = self.layout
|
||||
# if idblock:
|
||||
# layout.template_preview(tex, parent=idblock, slot=slot)
|
||||
if tex.pov.tex_pattern_type != 'emulator':
|
||||
layout.operator("tex.preview_update")
|
||||
else:
|
||||
layout.template_preview(tex, slot=slot)
|
||||
|
||||
|
||||
class TEXTURE_PT_povray_parameters(TextureButtonsPanel, bpy.types.Panel):
|
||||
bl_label = "POV-ray Pattern Options"
|
||||
COMPAT_ENGINES = {'POVRAY_RENDER'}
|
||||
def draw(self, context):
|
||||
mat = context.material
|
||||
layout = self.layout
|
||||
tex = context.texture
|
||||
align=True
|
||||
if tex is not None and tex.pov.tex_pattern_type != 'emulator':
|
||||
if tex.pov.tex_pattern_type == 'agate':
|
||||
layout.prop(tex.pov, "modifier_turbulence", text="Agate Turbulence")
|
||||
if tex.pov.tex_pattern_type in {'spiral1', 'spiral2'}:
|
||||
layout.prop(tex.pov, "modifier_numbers", text="Number of arms")
|
||||
if tex.pov.tex_pattern_type == 'tiling':
|
||||
layout.prop(tex.pov, "modifier_numbers", text="Pattern number")
|
||||
if tex.pov.tex_pattern_type == 'magnet':
|
||||
layout.prop(tex.pov, "magnet_style", text="Magnet style")
|
||||
if tex.pov.tex_pattern_type == 'quilted':
|
||||
row = layout.row(align=align)
|
||||
row.prop(tex.pov, "modifier_control0", text="Control0")
|
||||
row.prop(tex.pov, "modifier_control1", text="Control1")
|
||||
if tex.pov.tex_pattern_type == 'brick':
|
||||
col = layout.column(align=align)
|
||||
row = col.row()
|
||||
row.prop(tex.pov, "brick_size_x", text="Brick size X")
|
||||
row.prop(tex.pov, "brick_size_y", text="Brick size Y")
|
||||
row=col.row()
|
||||
row.prop(tex.pov, "brick_size_z", text="Brick size Z")
|
||||
row.prop(tex.pov, "brick_mortar", text="Brick mortar")
|
||||
if tex.pov.tex_pattern_type in {'julia','mandel','magnet'}:
|
||||
col = layout.column(align=align)
|
||||
if tex.pov.tex_pattern_type == 'julia':
|
||||
row = col.row()
|
||||
row.prop(tex.pov, "julia_complex_1", text="Complex 1")
|
||||
row.prop(tex.pov, "julia_complex_2", text="Complex 2")
|
||||
if tex.pov.tex_pattern_type == 'magnet' and tex.pov.magnet_style == 'julia':
|
||||
row = col.row()
|
||||
row.prop(tex.pov, "julia_complex_1", text="Complex 1")
|
||||
row.prop(tex.pov, "julia_complex_2", text="Complex 2")
|
||||
row=col.row()
|
||||
if tex.pov.tex_pattern_type in {'julia','mandel'}:
|
||||
row.prop(tex.pov, "f_exponent", text="Exponent")
|
||||
if tex.pov.tex_pattern_type == 'magnet':
|
||||
row.prop(tex.pov, "magnet_type", text="Type")
|
||||
row.prop(tex.pov, "f_iter", text="Iterations")
|
||||
row=col.row()
|
||||
row.prop(tex.pov, "f_ior", text="Interior")
|
||||
row.prop(tex.pov, "f_ior_fac", text="Factor I")
|
||||
row=col.row()
|
||||
row.prop(tex.pov, "f_eor", text="Exterior")
|
||||
row.prop(tex.pov, "f_eor_fac", text="Factor E")
|
||||
if tex.pov.tex_pattern_type == 'gradient':
|
||||
layout.label(text="Gradient orientation:")
|
||||
column_flow = layout.column_flow(columns=3, align=True)
|
||||
column_flow.prop(tex.pov, "grad_orient_x", text="X")
|
||||
column_flow.prop(tex.pov, "grad_orient_y", text="Y")
|
||||
column_flow.prop(tex.pov, "grad_orient_z", text="Z")
|
||||
if tex.pov.tex_pattern_type == 'pavement':
|
||||
layout.prop(tex.pov, "pave_sides", text="Pavement:number of sides")
|
||||
col = layout.column(align=align)
|
||||
column_flow = col.column_flow(columns=3, align=True)
|
||||
column_flow.prop(tex.pov, "pave_tiles", text="Tiles")
|
||||
if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 6:
|
||||
column_flow.prop(tex.pov, "pave_pat_35", text="Pattern")
|
||||
if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 5:
|
||||
column_flow.prop(tex.pov, "pave_pat_22", text="Pattern")
|
||||
if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 5:
|
||||
column_flow.prop(tex.pov, "pave_pat_12", text="Pattern")
|
||||
if tex.pov.pave_sides == '3' and tex.pov.pave_tiles == 6:
|
||||
column_flow.prop(tex.pov, "pave_pat_12", text="Pattern")
|
||||
if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 4:
|
||||
column_flow.prop(tex.pov, "pave_pat_7", text="Pattern")
|
||||
if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 4:
|
||||
column_flow.prop(tex.pov, "pave_pat_5", text="Pattern")
|
||||
if tex.pov.pave_sides == '3' and tex.pov.pave_tiles == 5:
|
||||
column_flow.prop(tex.pov, "pave_pat_4", text="Pattern")
|
||||
if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 3:
|
||||
column_flow.prop(tex.pov, "pave_pat_3", text="Pattern")
|
||||
if tex.pov.pave_sides == '3' and tex.pov.pave_tiles == 4:
|
||||
column_flow.prop(tex.pov, "pave_pat_3", text="Pattern")
|
||||
if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 3:
|
||||
column_flow.prop(tex.pov, "pave_pat_2", text="Pattern")
|
||||
if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 6:
|
||||
column_flow.label(text="!!! 5 tiles!")
|
||||
column_flow.prop(tex.pov, "pave_form", text="Form")
|
||||
if tex.pov.tex_pattern_type == 'function':
|
||||
layout.prop(tex.pov, "func_list", text="Functions")
|
||||
if tex.pov.tex_pattern_type == 'function' and tex.pov.func_list != "NONE":
|
||||
func = None
|
||||
if tex.pov.func_list in {"f_noise3d", "f_ph", "f_r", "f_th"}:
|
||||
func = 0
|
||||
if tex.pov.func_list in {"f_comma","f_crossed_trough","f_cubic_saddle",
|
||||
"f_cushion","f_devils_curve","f_enneper","f_glob",
|
||||
"f_heart","f_hex_x","f_hex_y","f_hunt_surface",
|
||||
"f_klein_bottle","f_kummer_surface_v1",
|
||||
"f_lemniscate_of_gerono","f_mitre","f_nodal_cubic",
|
||||
"f_noise_generator","f_odd","f_paraboloid","f_pillow",
|
||||
"f_piriform","f_quantum","f_quartic_paraboloid",
|
||||
"f_quartic_saddle","f_sphere","f_steiners_roman",
|
||||
"f_torus_gumdrop","f_umbrella"}:
|
||||
func = 1
|
||||
if tex.pov.func_list in {"f_bicorn","f_bifolia","f_boy_surface","f_superellipsoid","f_torus"}:
|
||||
func = 2
|
||||
if tex.pov.func_list in {"f_ellipsoid","f_folium_surface","f_hyperbolic_torus",
|
||||
"f_kampyle_of_eudoxus","f_parabolic_torus",
|
||||
"f_quartic_cylinder","f_torus2"}:
|
||||
func = 3
|
||||
if tex.pov.func_list in {"f_blob2","f_cross_ellipsoids","f_flange_cover",
|
||||
"f_isect_ellipsoids","f_kummer_surface_v2","f_ovals_of_cassini",
|
||||
"f_rounded_box","f_spikes_2d","f_strophoid"}:
|
||||
func = 4
|
||||
if tex.pov.func_list in {"f_algbr_cyl1","f_algbr_cyl2","f_algbr_cyl3","f_algbr_cyl4",
|
||||
"f_blob","f_mesh1","f_poly4","f_spikes"}:
|
||||
func = 5
|
||||
if tex.pov.func_list in {"f_devils_curve_2d","f_dupin_cyclid","f_folium_surface_2d",
|
||||
"f_hetero_mf","f_kampyle_of_eudoxus_2d","f_lemniscate_of_gerono_2d",
|
||||
"f_polytubes","f_ridge","f_ridged_mf","f_spiral","f_witch_of_agnesi"}:
|
||||
func = 6
|
||||
if tex.pov.func_list in {"f_helix1","f_helix2","f_piriform_2d","f_strophoid_2d"}:
|
||||
func = 7
|
||||
if tex.pov.func_list == "f_helical_torus":
|
||||
func = 8
|
||||
column_flow = layout.column_flow(columns=3, align=True)
|
||||
column_flow.label(text="X")
|
||||
column_flow.prop(tex.pov, "func_plus_x", text="")
|
||||
column_flow.prop(tex.pov, "func_x", text="Value")
|
||||
column_flow = layout.column_flow(columns=3, align=True)
|
||||
column_flow.label(text="Y")
|
||||
column_flow.prop(tex.pov, "func_plus_y", text="")
|
||||
column_flow.prop(tex.pov, "func_y", text="Value")
|
||||
column_flow = layout.column_flow(columns=3, align=True)
|
||||
column_flow.label(text="Z")
|
||||
column_flow.prop(tex.pov, "func_plus_z", text="")
|
||||
column_flow.prop(tex.pov, "func_z", text="Value")
|
||||
row=layout.row(align=align)
|
||||
if func > 0:
|
||||
row.prop(tex.pov, "func_P0", text="P0")
|
||||
if func > 1:
|
||||
row.prop(tex.pov, "func_P1", text="P1")
|
||||
row=layout.row(align=align)
|
||||
if func > 2:
|
||||
row.prop(tex.pov, "func_P2", text="P2")
|
||||
if func > 3:
|
||||
row.prop(tex.pov, "func_P3", text="P3")
|
||||
row=layout.row(align=align)
|
||||
if func > 4:
|
||||
row.prop(tex.pov, "func_P4", text="P4")
|
||||
if func > 5:
|
||||
row.prop(tex.pov, "func_P5", text="P5")
|
||||
row=layout.row(align=align)
|
||||
if func > 6:
|
||||
row.prop(tex.pov, "func_P6", text="P6")
|
||||
if func > 7:
|
||||
row.prop(tex.pov, "func_P7", text="P7")
|
||||
row=layout.row(align=align)
|
||||
row.prop(tex.pov, "func_P8", text="P8")
|
||||
row.prop(tex.pov, "func_P9", text="P9")
|
||||
###################################################End Patterns############################
|
||||
|
||||
|
||||
layout.prop(tex.pov, "warp_types", text="Warp types") #warp
|
||||
if tex.pov.warp_types == "TOROIDAL":
|
||||
layout.prop(tex.pov, "warp_tor_major_radius", text="Major radius")
|
||||
if tex.pov.warp_types not in {"CUBIC","NONE"}:
|
||||
layout.prop(tex.pov, "warp_orientation", text="Warp orientation")
|
||||
col = layout.column(align=align)
|
||||
row = col.row()
|
||||
row.prop(tex.pov, "warp_dist_exp", text="Distance exponent")
|
||||
row = col.row()
|
||||
row.prop(tex.pov, "modifier_frequency", text="Frequency")
|
||||
row.prop(tex.pov, "modifier_phase", text="Phase")
|
||||
|
||||
row=layout.row()
|
||||
|
||||
row.label(text="Offset:")
|
||||
row.label(text="Scale:")
|
||||
row.label(text="Rotate:")
|
||||
col=layout.column(align=align)
|
||||
row=col.row()
|
||||
row.prop(tex.pov, "tex_mov_x", text="X")
|
||||
row.prop(tex.pov, "tex_scale_x", text="X")
|
||||
row.prop(tex.pov, "tex_rot_x", text="X")
|
||||
row=col.row()
|
||||
row.prop(tex.pov, "tex_mov_y", text="Y")
|
||||
row.prop(tex.pov, "tex_scale_y", text="Y")
|
||||
row.prop(tex.pov, "tex_rot_y", text="Y")
|
||||
row=col.row()
|
||||
row.prop(tex.pov, "tex_mov_z", text="Z")
|
||||
row.prop(tex.pov, "tex_scale_z", text="Z")
|
||||
row.prop(tex.pov, "tex_rot_z", text="Z")
|
||||
row=layout.row()
|
||||
|
||||
row.label(text="Turbulence:")
|
||||
col=layout.column(align=align)
|
||||
row=col.row()
|
||||
row.prop(tex.pov, "warp_turbulence_x", text="X")
|
||||
row.prop(tex.pov, "modifier_octaves", text="Octaves")
|
||||
row=col.row()
|
||||
row.prop(tex.pov, "warp_turbulence_y", text="Y")
|
||||
row.prop(tex.pov, "modifier_lambda", text="Lambda")
|
||||
row=col.row()
|
||||
row.prop(tex.pov, "warp_turbulence_z", text="Z")
|
||||
row.prop(tex.pov, "modifier_omega", text="Omega")
|
||||
|
||||
class TEXTURE_PT_povray_tex_gamma(TextureButtonsPanel, bpy.types.Panel):
|
||||
bl_label = "Image Gamma"
|
||||
COMPAT_ENGINES = {'POVRAY_RENDER'}
|
||||
|
@ -508,7 +781,7 @@ class TEXTURE_PT_povray_tex_gamma(TextureButtonsPanel, bpy.types.Panel):
|
|||
def draw_header(self, context):
|
||||
tex = context.texture
|
||||
|
||||
self.layout.prop(tex.pov, "tex_gamma_enable", text="")
|
||||
self.layout.prop(tex.pov, "tex_gamma_enable", text="", icon='SEQ_LUMA_WAVEFORM')
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
|
Loading…
Reference in New Issue