diff options
Diffstat (limited to 'render_povray/ui.py')
-rw-r--r-- | render_povray/ui.py | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/render_povray/ui.py b/render_povray/ui.py new file mode 100644 index 00000000..d1c0b769 --- /dev/null +++ b/render_povray/ui.py @@ -0,0 +1,307 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +import bpy + +# Use some of the existing buttons. +import properties_render +properties_render.RENDER_PT_render.COMPAT_ENGINES.add('POVRAY_RENDER') +properties_render.RENDER_PT_dimensions.COMPAT_ENGINES.add('POVRAY_RENDER') +properties_render.RENDER_PT_antialiasing.COMPAT_ENGINES.add('POVRAY_RENDER') +properties_render.RENDER_PT_shading.COMPAT_ENGINES.add('POVRAY_RENDER') +properties_render.RENDER_PT_output.COMPAT_ENGINES.add('POVRAY_RENDER') +del properties_render + +# Use only a subset of the world panels +import properties_world +properties_world.WORLD_PT_preview.COMPAT_ENGINES.add('POVRAY_RENDER') +properties_world.WORLD_PT_context_world.COMPAT_ENGINES.add('POVRAY_RENDER') +properties_world.WORLD_PT_world.COMPAT_ENGINES.add('POVRAY_RENDER') +properties_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER') +del properties_world + +# Example of wrapping every class 'as is' +import properties_material +for member in dir(properties_material): + subclass = getattr(properties_material, member) + try: + subclass.COMPAT_ENGINES.add('POVRAY_RENDER') + except: + pass +del properties_material + +import properties_data_mesh +for member in dir(properties_data_mesh): + subclass = getattr(properties_data_mesh, member) + try: + subclass.COMPAT_ENGINES.add('POVRAY_RENDER') + except: + pass +del properties_data_mesh + +import properties_texture +for member in dir(properties_texture): + subclass = getattr(properties_texture, member) + try: + subclass.COMPAT_ENGINES.add('POVRAY_RENDER') + except: + pass +del properties_texture + +import properties_data_camera +for member in dir(properties_data_camera): + subclass = getattr(properties_data_camera, member) + try: + subclass.COMPAT_ENGINES.add('POVRAY_RENDER') + except: + pass +del properties_data_camera + +import properties_data_lamp +for member in dir(properties_data_lamp): + subclass = getattr(properties_data_lamp, member) + try: + subclass.COMPAT_ENGINES.add('POVRAY_RENDER') + except: + pass +del properties_data_lamp + + + +class RenderButtonsPanel(): + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "render" + # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here + + @classmethod + def poll(cls, context): + rd = context.scene.render + return (rd.use_game_engine == False) and (rd.engine in cls.COMPAT_ENGINES) + +class MaterialButtonsPanel(): + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "material" + # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here + + @classmethod + def poll(cls, context): + mat = context.material + rd = context.scene.render + return mat and (rd.use_game_engine == False) and (rd.engine in cls.COMPAT_ENGINES) + +########################################MR###################################### +class MATERIAL_PT_povray_mirrorIOR(MaterialButtonsPanel, bpy.types.Panel): + bl_label = "IOR Mirror" + COMPAT_ENGINES = {'POVRAY_RENDER'} + + def draw_header(self, context): + scene = context.material + + self.layout.prop(scene, "pov_mirror_use_IOR", text="") + + def draw(self, context): + layout = self.layout + + mat = context.material + layout.active = mat.pov_mirror_use_IOR + + if mat.pov_mirror_use_IOR: + split = layout.split() + col = split.column() + row = col.row() + row.alignment = 'CENTER' + row.label(text="The current Raytrace ") + row = col.row() + row.alignment = 'CENTER' + row.label(text="Transparency IOR is: "+str(mat.raytrace_transparency.ior)) + + +class MATERIAL_PT_povray_metallic(MaterialButtonsPanel, bpy.types.Panel): + bl_label = "metallic Mirror" + COMPAT_ENGINES = {'POVRAY_RENDER'} + + def draw_header(self, context): + scene = context.material + + self.layout.prop(scene, "pov_mirror_metallic", text="") + + def draw(self, context): + layout = self.layout + + mat = context.material + layout.active = mat.pov_mirror_metallic + +class MATERIAL_PT_povray_conserve_energy(MaterialButtonsPanel, bpy.types.Panel): + bl_label = "conserve energy" + COMPAT_ENGINES = {'POVRAY_RENDER'} + + def draw_header(self, context): + mat = context.material + + self.layout.prop(mat, "pov_conserve_energy", text="") + + def draw(self, context): + layout = self.layout + + mat = context.material + layout.active = mat.pov_conserve_energy + +class MATERIAL_PT_povray_iridescence(MaterialButtonsPanel, bpy.types.Panel): + bl_label = "iridescence" + COMPAT_ENGINES = {'POVRAY_RENDER'} + + def draw_header(self, context): + mat = context.material + + self.layout.prop(mat, "pov_irid_enable", text="") + + def draw(self, context): + layout = self.layout + + mat = context.material + layout.active = mat.pov_irid_enable + + if mat.pov_irid_enable: + split = layout.split() + + col = split.column() + col.prop(mat, "pov_irid_amount", slider=True) + col.prop(mat, "pov_irid_thickness", slider=True) + col.prop(mat, "pov_irid_turbulence", slider=True) + + +class MATERIAL_PT_povray_caustics(MaterialButtonsPanel, bpy.types.Panel): + bl_label = "Caustics" + COMPAT_ENGINES = {'POVRAY_RENDER'} + + + def draw_header(self, context): + mat = context.material + + self.layout.prop(mat, "pov_caustics_enable", text="") + + def draw(self, context): + + layout = self.layout + + mat = context.material + layout.active = mat.pov_caustics_enable + Radio = 1 + if mat.pov_caustics_enable: + split = layout.split() + + col = split.column() + col.prop(mat, "pov_refraction_type") +## if mat.pov_refraction_type=="0": +## mat.pov_fake_caustics = False +## mat.pov_photons_refraction = False +## mat.pov_photons_reflection = True + if mat.pov_refraction_type=="1": +## mat.pov_fake_caustics = True +## mat.pov_photons_refraction = False + col.prop(mat, "pov_fake_caustics_power", slider=True) + elif mat.pov_refraction_type=="2": +## mat.pov_fake_caustics = False +## mat.pov_photons_refraction = True + col.prop(mat, "pov_photons_dispersion", slider=True) + col.prop(mat, "pov_photons_reflection") + + + +## col.prop(mat, "pov_fake_caustics") +## if mat.pov_fake_caustics: +## col.prop(mat, "pov_fake_caustics_power", slider=True) +## mat.pov_photons_refraction=0 +## else: +## col.prop(mat, "pov_photons_refraction") +## if mat.pov_photons_refraction: +## col.prop(mat, "pov_photons_dispersion", slider=True) +## Radio = 0 +## mat.pov_fake_caustics=Radio +## col.prop(mat, "pov_photons_reflection") +####TODO : MAKE THIS A real RADIO BUTTON (using EnumProperty?) +######################################EndMR##################################### + +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="") + + def draw(self, context): + layout = self.layout + + scene = context.scene + rd = scene.render + + layout.active = scene.pov_radio_enable + + split = layout.split() + + col = split.column() + col.prop(scene, "pov_radio_count", text="Rays") + col.prop(scene, "pov_radio_recursion_limit", text="Recursions") + col = split.column() + col.prop(scene, "pov_radio_error_bound", text="Error") + + layout.prop(scene, "pov_radio_display_advanced") + + if scene.pov_radio_display_advanced: + split = layout.split() + + col = split.column() + col.prop(scene, "pov_radio_adc_bailout", slider=True) + col.prop(scene, "pov_radio_gray_threshold", slider=True) + col.prop(scene, "pov_radio_low_error_factor", slider=True) + + col = split.column() + col.prop(scene, "pov_radio_brightness") + col.prop(scene, "pov_radio_minimum_reuse", text="Min Reuse") + col.prop(scene, "pov_radio_nearest_count") + + split = layout.split() + + col = split.column() + col.label(text="Estimation Influence:") + col.prop(scene, "pov_radio_media") + col.prop(scene, "pov_radio_normal") + + col = split.column() + col.prop(scene, "pov_radio_always_sample") + +class RENDER_PT_povray_baking(RenderButtonsPanel, bpy.types.Panel): + bl_label = "Baking" + COMPAT_ENGINES = {'POVRAY_RENDER'} + + def draw_header(self, context): + scene = context.scene + + self.layout.prop(scene, "pov_baking_enable", text="") + + def draw(self, context): + layout = self.layout + + scene = context.scene + rd = scene.render + + layout.active = scene.pov_baking_enable |