[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [1287] contrib/py/scripts/addons/ render_clay.py: == Clay Render ==

Fabio Russo ruesp83 at libero.it
Fri Dec 17 23:57:12 CET 2010


Revision: 1287
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-extensions&revision=1287
Author:   ruesp83
Date:     2010-12-17 23:57:12 +0100 (Fri, 17 Dec 2010)

Log Message:
-----------
== Clay Render ==
* Version 1
* Management of Clay Material
* Choice of a different material as Clay (Panel Options: http://www.pasteall.org/pic/7565)

Modified Paths:
--------------
    contrib/py/scripts/addons/render_clay.py

Modified: contrib/py/scripts/addons/render_clay.py
===================================================================
--- contrib/py/scripts/addons/render_clay.py	2010-12-17 17:17:19 UTC (rev 1286)
+++ contrib/py/scripts/addons/render_clay.py	2010-12-17 22:57:12 UTC (rev 1287)
@@ -21,7 +21,7 @@
 bl_addon_info = {
     "name": "Clay Render",
     "author": "Fabio Russo <ruesp83 at libero.it>",
-    "version": (0, 8),
+    "version": (1, 0),
     "blender": (2, 5, 5),
     "api": 33568,
     "location": "Render > Clay Render",
@@ -51,6 +51,32 @@
     id.specular_intensity = 0.115
 
 
+def Alternative_Clay(self, msg):
+    Find = False
+    AM = None
+    i = 0
+    for mat in bpy.data.materials:
+        if (mat.Mat_Clay) and (not Find):
+            Find = True
+            AM = mat
+            i += 1
+
+        else:
+            if (mat.Mat_Clay):
+                i += 1
+
+    if msg == True:
+        if (i == 1):
+            self.report({'INFO'}, "The material \"" + AM.name + "\" is set "\
+                "as Clay!")
+        else:
+            if (i > 1):
+                self.report({'WARNING'}, "Two or more materials are set as "\
+                    "Clay. \"" + AM.name + "\" will be used!")
+
+    return AM
+
+
 def Get_Mat():
     Mat = bpy.data.materials["Clay_Render"]
     return Mat
@@ -64,55 +90,126 @@
         return False
 
 
+class ClayPinned(bpy.types.Operator):
+    bl_idname = "render.clay_pinned"
+    bl_label = "Clay Pinned"
+    bl_description = "Clay Material Stores"
+
+    def execute(self, context):
+        if bpy.types.Scene.Clay_Pinned:
+            bpy.types.Scene.Clay_Pinned = False
+        else:
+            if bpy.types.Scene.Clay:
+                if bpy.data.materials[0].users == 0:
+                    bpy.data.materials.remove(Get_Mat())
+                    bpy.types.Scene.Clay_Pinned = True
+
+            else:
+                bpy.types.Scene.Clay_Pinned = True
+
+        return {'FINISHED'}
+
+
 class CheckClay(bpy.types.Operator):
     bl_idname = "render.clay"
     bl_label = "Clay Render"
+    bl_description = "Use Clay Render"
 
     def execute(self, context):
         if bpy.types.Scene.Clay:
-            if not Exist_Mat():
-                Create_Mat()
-            context.scene.render.layers.active.material_override = Get_Mat()
+            #Clay Attivato
+            ac = Alternative_Clay(self, True)
+            if ac is None:
+                if not Exist_Mat():
+                    Create_Mat()
+                rl = context.scene.render.layers
+                rl.active.material_override = Get_Mat()
+
+            else:
+                context.scene.render.layers.active.material_override = ac
+
             bpy.types.Scene.Clay = False
+
         else:
             context.scene.render.layers.active.material_override = None
+            if bpy.types.Scene.Clay_Pinned:
+                if bpy.data.materials[0].users == 0:
+                    bpy.data.materials.remove(Get_Mat())
             bpy.types.Scene.Clay = True
+
         return {'FINISHED'}
 
 
-def draw_clay(self, context):
+def draw_clay_render(self, context):
     ok_clay = not bpy.types.Scene.Clay
+    pin = not bpy.types.Scene.Clay_Pinned
 
-    rnd = context.scene.render
-    rnl = rnd.layers.active
+    rnl = context.scene.render.layers.active
     split = self.layout.split()
     col = split.column()
 
-    col.operator(CheckClay.bl_idname, emboss=False, icon='CHECKBOX_HLT' \
-    if ok_clay else 'CHECKBOX_DEHLT')
+    col.operator(CheckClay.bl_idname, emboss=False, icon='CHECKBOX_HLT'\
+        if ok_clay else 'CHECKBOX_DEHLT')
     col = split.column()
-    if Exist_Mat():
-        im = Get_Mat()
-        col.prop(im, "diffuse_color", text="")
+    if Alternative_Clay(self, False) is None:
+        if Exist_Mat():
+            if (bpy.data.materials[0].users == 0) or (ok_clay):
+                row = col.row(align=True)
+                im = Get_Mat()
+                row.prop(im, "diffuse_color", text="")
+                row.operator(ClayPinned.bl_idname, text="", icon='PINNED'\
+                    if pin else 'UNPINNED')
+
+                if ok_clay:
+                    row.active = True
+
+                else:
+                    row.active = False
+
+            else:
+                col.label('Clay Material applied to an object')
+
+    else:
+        col.label('Custom Material Clay')
+
     self.layout.separator()
 
 
+def draw_clay_options(self, context):
+    cm = context.material
+    layout = self.layout
+    layout.prop(cm, "Mat_Clay", text="Clay")
+
+
 def register():
     bpy.types.Scene.Clay = BoolProperty(
     name='Clay Render',
     description='Use Clay Render',
     default=False)
-    bpy.types.RENDER_PT_render.prepend(draw_clay)
 
+    bpy.types.Scene.Clay_Pinned = BoolProperty(
+    name='Clay Pinned',
+    description='Clay Material Stores',
+    default=False)
 
+    bpy.types.Material.Mat_Clay = bpy.props.BoolProperty(
+        name='Use as Clay',
+        description='Use as Clay',
+        default=False)
+
+    bpy.types.RENDER_PT_render.prepend(draw_clay_render)
+    bpy.types.MATERIAL_PT_options.append(draw_clay_options)
+
+
 def unregister():
-    rnd = bpy.context.scene.render
-    rnl = rnd.layers.active
-    rnl.material_override = None
-    if Exist_Mat():
+    bpy.context.scene.render.layers.active.material_override = None
+    if (Exist_Mat()) and (bpy.data.materials[0].users == 0):
         bpy.data.materials.remove(Get_Mat())
     del bpy.types.Scene.Clay
-    bpy.types.RENDER_PT_render.remove(draw_clay)
+    del bpy.types.Scene.Clay_Pinned
+    del bpy.types.Material.Mat_Clay
+    bpy.types.RENDER_PT_render.remove(draw_clay_render)
+    bpy.types.MATERIAL_PT_options.remove(draw_clay_options)
 
 
 if __name__ == "__main__":




More information about the Bf-extensions-cvs mailing list