Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-07-30 12:10:10 +0400
committerCampbell Barton <ideasman42@gmail.com>2009-07-30 12:10:10 +0400
commitade8f5197a1971839253bb8d30eac676d5868e1c (patch)
tree19ad6f0f1ea2f5f6bcc627b4436f2a03b4cfe096 /release
parent61bd567071c6db82532cf2c2e5598dc500937881 (diff)
Engine specific panel's
- All of this is in python and easy to change. - each panel class has a set() of compatible engines. - this set is checked for the poll function - external engines can add themselves to this panels compatible engines eg. buttons_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER') I tried doing this by subclassing each panel and replacing only the poll function to reference 'POVRAY_RENDER' but it became fairly complicated and meant registering many of the same panels under different names. Added mist support to povray.
Diffstat (limited to 'release')
-rw-r--r--release/io/engine_render_pov.py55
-rw-r--r--release/ui/buttons_material.py38
-rw-r--r--release/ui/buttons_scene.py18
-rw-r--r--release/ui/buttons_world.py15
-rw-r--r--release/ui/space_console.py1
5 files changed, 101 insertions, 26 deletions
diff --git a/release/io/engine_render_pov.py b/release/io/engine_render_pov.py
index 186118246b8..c89d4390c77 100644
--- a/release/io/engine_render_pov.py
+++ b/release/io/engine_render_pov.py
@@ -64,7 +64,7 @@ def write_pov(filename, scene=None, info_callback = None):
file.write('light_source {\n')
file.write('\t< 0,0,0 >\n')
- file.write('\tcolor red %.6f green %.6f blue %.6f\n' % color)
+ file.write('\tcolor rgb<%.3g, %.3g, %.3g>\n' % color)
if lamp.type == 'POINT': # Point Lamp
pass
@@ -310,7 +310,7 @@ def write_pov(filename, scene=None, info_callback = None):
float_col = col[0], col[1], col[2], 1-material.alpha, materialString
#print material.apl
- file.write(',\n\t\ttexture { pigment {rgbf<%.6f, %.6f, %.6f, %.6f>}%s}' % float_col)
+ file.write(',\n\t\ttexture { pigment {rgbf<%.3g, %.3g, %.3g, %.3g>}%s}' % float_col)
index[0] = idx
idx+=1
@@ -412,6 +412,22 @@ def write_pov(filename, scene=None, info_callback = None):
bpy.data.remove_mesh(me)
+ def exportWorld(world):
+ if not world:
+ return
+
+ mist = world.mist
+
+ if mist.enabled:
+ file.write('\tfog {\n')
+ file.write('\t\tdistance %.6f\n' % mist.depth)
+ file.write('\t\tcolor rgbt<%.3g, %.3g, %.3g, %.3g>\n' % (tuple(world.horizon_color) + (1-mist.intensity,)))
+ #file.write('\t\tfog_offset %.6f\n' % mist.start)
+ #file.write('\t\tfog_alt 5\n')
+ #file.write('\t\tturbulence 0.2\n')
+ #file.write('\t\tturb_depth 0.3\n')
+ file.write('\t\tfog_type 1\n')
+ file.write('\t}\n')
exportCamera()
#exportMaterials()
@@ -419,6 +435,7 @@ def write_pov(filename, scene=None, info_callback = None):
lamps = [l for l in sel if l.type == 'LAMP']
exportLamps(lamps)
exportMeshs(sel)
+ exportWorld(scene.world)
file.close()
@@ -462,7 +479,8 @@ def write_pov_ini(filename_ini, filename_pov, filename_image):
file.close()
-class PovrayRenderEngine(bpy.types.RenderEngine):
+class PovrayRender(bpy.types.RenderEngine):
+ __idname__ = 'POVRAY_RENDER'
__label__ = "Povray"
DELAY = 0.02
def _export(self, scene):
@@ -471,6 +489,11 @@ class PovrayRenderEngine(bpy.types.RenderEngine):
self.temp_file_in = tempfile.mktemp(suffix='.pov')
self.temp_file_out = tempfile.mktemp(suffix='.tga')
self.temp_file_ini = tempfile.mktemp(suffix='.ini')
+ '''
+ self.temp_file_in = '/test.pov'
+ self.temp_file_out = '/test.tga'
+ self.temp_file_ini = '/test.ini'
+ '''
def info_callback(txt):
self.update_stats("", "POVRAY: " + txt)
@@ -580,4 +603,28 @@ class PovrayRenderEngine(bpy.types.RenderEngine):
self._cleanup()
-bpy.types.register(PovrayRenderEngine)
+bpy.types.register(PovrayRender)
+
+# Use some of the existing buttons.
+import buttons_scene
+buttons_scene.SCENE_PT_render.COMPAT_ENGINES.add('POVRAY_RENDER')
+buttons_scene.SCENE_PT_dimensions.COMPAT_ENGINES.add('POVRAY_RENDER')
+buttons_scene.SCENE_PT_antialiasing.COMPAT_ENGINES.add('POVRAY_RENDER')
+buttons_scene.SCENE_PT_output.COMPAT_ENGINES.add('POVRAY_RENDER')
+del buttons_scene
+
+# Use only a subset of the world panels
+import buttons_world
+buttons_world.WORLD_PT_preview.COMPAT_ENGINES.add('POVRAY_RENDER')
+buttons_world.WORLD_PT_context_world.COMPAT_ENGINES.add('POVRAY_RENDER')
+buttons_world.WORLD_PT_world.COMPAT_ENGINES.add('POVRAY_RENDER')
+buttons_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER')
+del buttons_world
+
+# Example of wrapping every class 'as is'
+import buttons_material
+for member in dir(buttons_material):
+ subclass = getattr(buttons_material, member)
+ try: subclass.COMPAT_ENGINES.add('POVRAY_RENDER')
+ except: pass
+del buttons_material
diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py
index 66eca1a14b8..26a5294f218 100644
--- a/release/ui/buttons_material.py
+++ b/release/ui/buttons_material.py
@@ -5,13 +5,15 @@ class MaterialButtonsPanel(bpy.types.Panel):
__space_type__ = "BUTTONS_WINDOW"
__region_type__ = "WINDOW"
__context__ = "material"
+ # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
def poll(self, context):
- return (context.material != None)
+ return (context.material) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
class MATERIAL_PT_preview(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_preview"
__label__ = "Preview"
+ COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
def draw(self, context):
layout = self.layout
@@ -22,9 +24,13 @@ class MATERIAL_PT_preview(MaterialButtonsPanel):
class MATERIAL_PT_context_material(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_context_material"
__show_header__ = False
+ COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
def poll(self, context):
- return (context.object)
+ # An exception, dont call the parent poll func because
+ # this manages materials for all engine types
+
+ return (context.object) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -66,6 +72,7 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel):
class MATERIAL_PT_material(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_material"
__label__ = "Shading"
+ COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
def draw(self, context):
layout = self.layout
@@ -100,6 +107,7 @@ class MATERIAL_PT_strand(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_strand"
__label__ = "Strand"
__default_closed__ = True
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw(self, context):
layout = self.layout
@@ -132,6 +140,7 @@ class MATERIAL_PT_strand(MaterialButtonsPanel):
class MATERIAL_PT_options(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_options"
__label__ = "Options"
+ COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
def draw(self, context):
layout = self.layout
@@ -165,6 +174,7 @@ class MATERIAL_PT_options(MaterialButtonsPanel):
class MATERIAL_PT_shadows(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_shadows"
__label__ = "Shadows"
+ COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
def draw(self, context):
layout = self.layout
@@ -190,10 +200,10 @@ class MATERIAL_PT_shadows(MaterialButtonsPanel):
class MATERIAL_PT_diffuse(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_diffuse"
__label__ = "Diffuse"
+ COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
def poll(self, context):
- mat = context.material
- return (mat and mat.type != 'HALO')
+ return (context.material.type != 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -234,10 +244,10 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel):
class MATERIAL_PT_specular(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_specular"
__label__ = "Specular"
+ COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
def poll(self, context):
- mat = context.material
- return (mat and mat.type != 'HALO')
+ return (context.material.type != 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -278,10 +288,10 @@ class MATERIAL_PT_sss(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_sss"
__label__ = "Subsurface Scattering"
__default_closed__ = True
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def poll(self, context):
- mat = context.material
- return (mat and (mat.type == 'SURFACE' or mat.type == 'WIRE'))
+ return (context.material.type in ('SURFACE', 'WIRE')) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
def draw_header(self, context):
layout = self.layout
@@ -317,10 +327,10 @@ class MATERIAL_PT_raymir(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_raymir"
__label__ = "Ray Mirror"
__default_closed__ = True
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def poll(self, context):
- mat = context.material
- return (mat and (mat.type == 'SURFACE' or mat.type == 'WIRE'))
+ return (context.material.type in 'SURFACE', 'WIRE') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
def draw_header(self, context):
layout = self.layout
@@ -361,10 +371,10 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_raytransp"
__label__= "Ray Transparency"
__default_closed__ = True
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def poll(self, context):
- mat = context.material
- return (mat and (mat.type == 'SURFACE' or mat.type == 'WIRE'))
+ return (context.material.type in 'SURFACE', 'WIRE') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
def draw_header(self, context):
layout = self.layout
@@ -405,10 +415,10 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel):
class MATERIAL_PT_halo(MaterialButtonsPanel):
__idname__= "MATERIAL_PT_halo"
__label__= "Halo"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def poll(self, context):
- mat = context.material
- return (mat and mat.type == 'HALO')
+ return (context.material.type == 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py
index 8b6bcb98e06..e952f19796a 100644
--- a/release/ui/buttons_scene.py
+++ b/release/ui/buttons_scene.py
@@ -5,14 +5,15 @@ class RenderButtonsPanel(bpy.types.Panel):
__space_type__ = "BUTTONS_WINDOW"
__region_type__ = "WINDOW"
__context__ = "scene"
-
+ # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
+
def poll(self, context):
rd = context.scene.render_data
- return (not rd.use_game_engine)
+ return (rd.use_game_engine==False) and (rd.engine in self.COMPAT_ENGINES)
class SCENE_PT_render(RenderButtonsPanel):
__label__ = "Render"
-
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw(self, context):
layout = self.layout
rd = context.scene.render_data
@@ -26,7 +27,8 @@ class SCENE_PT_render(RenderButtonsPanel):
class SCENE_PT_layers(RenderButtonsPanel):
__label__ = "Layers"
__default_closed__ = True
-
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
+
def draw(self, context):
layout = self.layout
scene = context.scene
@@ -111,6 +113,7 @@ class SCENE_PT_layers(RenderButtonsPanel):
class SCENE_PT_shading(RenderButtonsPanel):
__label__ = "Shading"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw(self, context):
layout = self.layout
@@ -132,6 +135,7 @@ class SCENE_PT_shading(RenderButtonsPanel):
class SCENE_PT_performance(RenderButtonsPanel):
__label__ = "Performance"
__default_closed__ = True
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw(self, context):
layout = self.layout
@@ -174,6 +178,7 @@ class SCENE_PT_performance(RenderButtonsPanel):
class SCENE_PT_post_processing(RenderButtonsPanel):
__label__ = "Post Processing"
__default_closed__ = True
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw(self, context):
layout = self.layout
@@ -201,6 +206,7 @@ class SCENE_PT_post_processing(RenderButtonsPanel):
class SCENE_PT_output(RenderButtonsPanel):
__label__ = "Output"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw(self, context):
layout = self.layout
@@ -263,6 +269,7 @@ class SCENE_PT_output(RenderButtonsPanel):
class SCENE_PT_encoding(RenderButtonsPanel):
__label__ = "Encoding"
__default_closed__ = True
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def poll(self, context):
rd = context.scene.render_data
@@ -309,6 +316,7 @@ class SCENE_PT_encoding(RenderButtonsPanel):
class SCENE_PT_antialiasing(RenderButtonsPanel):
__label__ = "Anti-Aliasing"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
layout = self.layout
@@ -334,6 +342,7 @@ class SCENE_PT_antialiasing(RenderButtonsPanel):
class SCENE_PT_dimensions(RenderButtonsPanel):
__label__ = "Dimensions"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw(self, context):
layout = self.layout
@@ -373,6 +382,7 @@ class SCENE_PT_dimensions(RenderButtonsPanel):
class SCENE_PT_stamp(RenderButtonsPanel):
__label__ = "Stamp"
__default_closed__ = True
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
rd = context.scene.render_data
diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py
index 67cf5cc2e89..1a51bf7676d 100644
--- a/release/ui/buttons_world.py
+++ b/release/ui/buttons_world.py
@@ -5,14 +5,16 @@ class WorldButtonsPanel(bpy.types.Panel):
__space_type__ = "BUTTONS_WINDOW"
__region_type__ = "WINDOW"
__context__ = "world"
-
+ # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
+
def poll(self, context):
rd = context.scene.render_data
- return (context.world != None) and (not rd.use_game_engine)
+ return (context.world != None) and (not rd.use_game_engine) and (rd.engine in self.COMPAT_ENGINES)
class WORLD_PT_preview(WorldButtonsPanel):
__label__ = "Preview"
-
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
+
def draw(self, context):
layout = self.layout
world = context.world
@@ -21,10 +23,11 @@ class WORLD_PT_preview(WorldButtonsPanel):
class WORLD_PT_context_world(WorldButtonsPanel):
__show_header__ = False
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def poll(self, context):
rd = context.scene.render_data
- return (context.scene != None) and (not rd.use_game_engine)
+ return (not rd.use_game_engine) and (rd.engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -42,6 +45,7 @@ class WORLD_PT_context_world(WorldButtonsPanel):
class WORLD_PT_world(WorldButtonsPanel):
__label__ = "World"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw(self, context):
layout = self.layout
@@ -64,6 +68,7 @@ class WORLD_PT_world(WorldButtonsPanel):
class WORLD_PT_mist(WorldButtonsPanel):
__label__ = "Mist"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
layout = self.layout
@@ -87,6 +92,7 @@ class WORLD_PT_mist(WorldButtonsPanel):
class WORLD_PT_stars(WorldButtonsPanel):
__label__ = "Stars"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
layout = self.layout
@@ -108,6 +114,7 @@ class WORLD_PT_stars(WorldButtonsPanel):
class WORLD_PT_ambient_occlusion(WorldButtonsPanel):
__label__ = "Ambient Occlusion"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
layout = self.layout
diff --git a/release/ui/space_console.py b/release/ui/space_console.py
index a5662fa3db3..8814553e55f 100644
--- a/release/ui/space_console.py
+++ b/release/ui/space_console.py
@@ -50,6 +50,7 @@ class CONSOLE_MT_console(bpy.types.Menu):
layout.column()
layout.itemO("console.clear")
layout.itemO("console.copy")
+ layout.itemO("console.paste")
class CONSOLE_MT_report(bpy.types.Menu):
__space_type__ = "CONSOLE"