[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2039] trunk/py/scripts/addons/rigify: Rig layers can now be organized into rows by the user, for nicer layout.

Nathan Vegdahl cessen at cessen.com
Sun Jun 19 21:53:01 CEST 2011


Revision: 2039
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2039
Author:   cessen
Date:     2011-06-19 19:53:01 +0000 (Sun, 19 Jun 2011)
Log Message:
-----------
Rig layers can now be organized into rows by the user, for nicer layout.

Modified Paths:
--------------
    trunk/py/scripts/addons/rigify/__init__.py
    trunk/py/scripts/addons/rigify/generate.py
    trunk/py/scripts/addons/rigify/metarigs/human.py
    trunk/py/scripts/addons/rigify/rig_ui_template.py
    trunk/py/scripts/addons/rigify/ui.py

Modified: trunk/py/scripts/addons/rigify/__init__.py
===================================================================
--- trunk/py/scripts/addons/rigify/__init__.py	2011-06-19 13:05:35 UTC (rev 2038)
+++ trunk/py/scripts/addons/rigify/__init__.py	2011-06-19 19:53:01 UTC (rev 2039)
@@ -115,35 +115,9 @@
     name = bpy.props.StringProperty()
 
 
-class RigifyArmatureProps(bpy.types.PropertyGroup):
-    layer_name_01 = bpy.props.StringProperty(name="Layer 1 Name", default="1")
-    layer_name_02 = bpy.props.StringProperty(name="Layer 2 Name", default="2")
-    layer_name_03 = bpy.props.StringProperty(name="Layer 3 Name", default="3")
-    layer_name_04 = bpy.props.StringProperty(name="Layer 4 Name", default="4")
-    layer_name_05 = bpy.props.StringProperty(name="Layer 5 Name", default="5")
-    layer_name_06 = bpy.props.StringProperty(name="Layer 6 Name", default="6")
-    layer_name_07 = bpy.props.StringProperty(name="Layer 7 Name", default="7")
-    layer_name_08 = bpy.props.StringProperty(name="Layer 8 Name", default="8")
-    layer_name_09 = bpy.props.StringProperty(name="Layer 9 Name", default="9")
-    layer_name_10 = bpy.props.StringProperty(name="Layer 10 Name", default="10")
-    layer_name_11 = bpy.props.StringProperty(name="Layer 11 Name", default="11")
-    layer_name_12 = bpy.props.StringProperty(name="Layer 12 Name", default="12")
-    layer_name_13 = bpy.props.StringProperty(name="Layer 13 Name", default="13")
-    layer_name_14 = bpy.props.StringProperty(name="Layer 14 Name", default="14")
-    layer_name_15 = bpy.props.StringProperty(name="Layer 15 Name", default="15")
-    layer_name_16 = bpy.props.StringProperty(name="Layer 16 Name", default="16")
-    layer_name_17 = bpy.props.StringProperty(name="Layer 17 Name", default="17")
-    layer_name_18 = bpy.props.StringProperty(name="Layer 18 Name", default="18")
-    layer_name_19 = bpy.props.StringProperty(name="Layer 19 Name", default="19")
-    layer_name_20 = bpy.props.StringProperty(name="Layer 20 Name", default="20")
-    layer_name_21 = bpy.props.StringProperty(name="Layer 21 Name", default="21")
-    layer_name_22 = bpy.props.StringProperty(name="Layer 22 Name", default="22")
-    layer_name_23 = bpy.props.StringProperty(name="Layer 23 Name", default="23")
-    layer_name_24 = bpy.props.StringProperty(name="Layer 24 Name", default="24")
-    layer_name_25 = bpy.props.StringProperty(name="Layer 25 Name", default="25")
-    layer_name_26 = bpy.props.StringProperty(name="Layer 26 Name", default="26")
-    layer_name_27 = bpy.props.StringProperty(name="Layer 27 Name", default="27")
-    layer_name_28 = bpy.props.StringProperty(name="Layer 28 Name", default="28")
+class RigifyArmatureLayer(bpy.types.PropertyGroup):
+    name = bpy.props.StringProperty(name="Layer Name", default=" ")
+    row = bpy.props.IntProperty(name="Layer Row", default=1, min=1, max=32)
 
 
 ##### REGISTER #####
@@ -154,12 +128,12 @@
 
     bpy.utils.register_class(RigifyName)
     bpy.utils.register_class(RigifyParameters)
-    bpy.utils.register_class(RigifyArmatureProps)
+    bpy.utils.register_class(RigifyArmatureLayer)
 
     bpy.types.PoseBone.rigify_type = bpy.props.StringProperty(name="Rigify Type", description="Rig type for this bone.")
     bpy.types.PoseBone.rigify_parameters = bpy.props.CollectionProperty(type=RigifyParameters)
 
-    bpy.types.Armature.rigify_props = bpy.props.CollectionProperty(type=RigifyArmatureProps)
+    bpy.types.Armature.rigify_layers = bpy.props.CollectionProperty(type=RigifyArmatureLayer)
 
     IDStore = bpy.types.WindowManager
     IDStore.rigify_collection = bpy.props.EnumProperty(items=col_enum_list, default="All", name="Rigify Active Collection", description="The selected rig collection")
@@ -187,7 +161,7 @@
 
     bpy.utils.unregister_class(RigifyName)
     bpy.utils.unregister_class(RigifyParameters)
-    bpy.utils.unregister_class(RigifyArmatureProps)
+    bpy.utils.unregister_class(RigifyArmatureLayer)
 
     metarig_menu.unregister()
     ui.unregister()

Modified: trunk/py/scripts/addons/rigify/generate.py
===================================================================
--- trunk/py/scripts/addons/rigify/generate.py	2011-06-19 13:05:35 UTC (rev 2038)
+++ trunk/py/scripts/addons/rigify/generate.py	2011-06-19 19:53:01 UTC (rev 2039)
@@ -282,13 +282,15 @@
         vis_layers[i] = vis_layers[i] and not (ORG_LAYER[i] or MCH_LAYER[i] or DEF_LAYER[i])
     obj.data.layers = vis_layers
 
-    # Create list of layer names
-    if len(metarig.data.rigify_props) < 1:
-        metarig.data.rigify_props.add()
-    layer_names = []
-    for i in range(28):
-        layer_names += [getattr(metarig.data.rigify_props[0], "layer_name_%s" % str(i+1).rjust(2, "0"))]
+    # Ensure the collection of layer names exists
+    for i in range(1 + len(metarig.data.rigify_layers), 29):
+        layer = metarig.data.rigify_layers.add()
 
+    # Create list of layer name/row pairs
+    layer_layout = []
+    for l in metarig.data.rigify_layers:
+        layer_layout += [(l.name, l.row)]
+
     # Generate the UI script
     if "rig_ui.py" in bpy.data.texts:
         script = bpy.data.texts["rig_ui.py"]
@@ -298,7 +300,7 @@
     script.write(UI_SLIDERS % rig_id)
     for s in ui_scripts:
         script.write("\n        " + s.replace("\n", "\n        ") + "\n")
-    script.write(layers_ui(vis_layers, layer_names))
+    script.write(layers_ui(vis_layers, layer_layout))
     script.write(UI_REGISTER)
     script.use_module = True
 

Modified: trunk/py/scripts/addons/rigify/metarigs/human.py
===================================================================
--- trunk/py/scripts/addons/rigify/metarigs/human.py	2011-06-19 13:05:35 UTC (rev 2038)
+++ trunk/py/scripts/addons/rigify/metarigs/human.py	2011-06-19 19:53:01 UTC (rev 2039)
@@ -24,20 +24,34 @@
     bpy.ops.object.mode_set(mode='EDIT')
     arm = obj.data
 
-    props = arm.rigify_props.add()
-    props.layer_name_01 = "Torso"
-    props.layer_name_03 = "Head"
-    props.layer_name_05 = "Fingers"
-    props.layer_name_06 = "Fingers (tweak)"
-    props.layer_name_07 = "Arm.L (FK)"
-    props.layer_name_08 = "Arm.L (IK)"
-    props.layer_name_09 = "Arm.R (FK)"
-    props.layer_name_10 = "Arm.R (IK)"
-    props.layer_name_11 = "Leg.L (FK)"
-    props.layer_name_12 = "Leg.L (IK)"
-    props.layer_name_13 = "Leg.R (FK)"
-    props.layer_name_14 = "Leg.R (IK)"
+    for i in range(28):
+        arm.rigify_layers.add()
 
+    arm.rigify_layers[0].name = "Torso"
+    arm.rigify_layers[0].row = 2
+    arm.rigify_layers[2].name = "Head"
+    arm.rigify_layers[2].row = 1
+    arm.rigify_layers[4].name = "Fingers"
+    arm.rigify_layers[4].row = 3
+    arm.rigify_layers[5].name = "(Tweak)"
+    arm.rigify_layers[5].row = 3
+    arm.rigify_layers[6].name = "Arm.L (FK)"
+    arm.rigify_layers[6].row = 4
+    arm.rigify_layers[7].name = "Arm.L (IK)"
+    arm.rigify_layers[7].row = 5
+    arm.rigify_layers[8].name = "Arm.R (FK)"
+    arm.rigify_layers[8].row = 4
+    arm.rigify_layers[9].name = "Arm.R (IK)"
+    arm.rigify_layers[9].row = 5
+    arm.rigify_layers[10].name = "Leg.L (FK)"
+    arm.rigify_layers[10].row = 6
+    arm.rigify_layers[11].name = "Leg.L (IK)"
+    arm.rigify_layers[11].row = 7
+    arm.rigify_layers[12].name = "Leg.R (FK)"
+    arm.rigify_layers[12].row = 6
+    arm.rigify_layers[13].name = "Leg.R (IK)"
+    arm.rigify_layers[13].row = 7
+
     bones = {}
 
     bone = arm.edit_bones.new('hips')

Modified: trunk/py/scripts/addons/rigify/rig_ui_template.py
===================================================================
--- trunk/py/scripts/addons/rigify/rig_ui_template.py	2011-06-19 13:05:35 UTC (rev 2038)
+++ trunk/py/scripts/addons/rigify/rig_ui_template.py	2011-06-19 19:53:01 UTC (rev 2039)
@@ -493,7 +493,7 @@
 '''
 
 
-def layers_ui(layers, names):
+def layers_ui(layers, layout):
     """ Turn a list of booleans + a list of names into a layer UI.
     """
 
@@ -515,16 +515,35 @@
         layout = self.layout
         col = layout.column()
 '''
-    i = 0
-    for layer in layers:
-        if layer:
-            code += "\n        row = col.row()\n"
-            if i == 28:
-                code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='Root')\n" % (str(i))
-            else:
-                code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='%s')\n" % (str(i), names[i])
-        i += 1
+    rows = {}
+    for i in range(28):
+        if layers[i]:
+            if layout[i][1] not in rows:
+                rows[layout[i][1]] = []
+            rows[layout[i][1]] += [(layout[i][0], i)]
 
+    keys = list(rows.keys())
+    keys.sort()
+
+    for key in keys:
+        code += "\n        row = col.row()\n"
+        i = 0
+        for l in rows[key]:
+            if i > 3:
+                code += "\n        row = col.row()\n"
+                i = 0
+            code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='%s')\n" % (str(l[1]), l[0])
+            i += 1
+
+    # Root layer
+    code += "\n        row = col.row()"
+    code += "\n        row.separator()"
+    code += "\n        row = col.row()"
+    code += "\n        row.separator()\n"
+    code += "\n        row = col.row()\n"
+    code += "        row.prop(context.active_object.data, 'layers', index=28, toggle=True, text='Root')\n"
+
+
     return code
 
 

Modified: trunk/py/scripts/addons/rigify/ui.py
===================================================================
--- trunk/py/scripts/addons/rigify/ui.py	2011-06-19 13:05:35 UTC (rev 2038)
+++ trunk/py/scripts/addons/rigify/ui.py	2011-06-19 19:53:01 UTC (rev 2039)
@@ -92,10 +92,6 @@
     def poll(cls, context):
         if not context.armature:
             return False
-        #obj = context.object
-        #if obj:
-        #    return (obj.mode in ('POSE', 'OBJECT', 'EDIT'))
-        #return False
         return True
 
     def draw(self, context):
@@ -103,9 +99,11 @@
         layout = self.layout
         obj = context.object
 
-        if len(obj.data.rigify_props) < 1:
-            obj.data.rigify_props.add()
+        # Ensure that the layers exist
+        for i in range(1 + len(obj.data.rigify_layers), 29):
+            layer = obj.data.rigify_layers.add()
 
+        # UI
         for i in range(28):
             if (i % 16) == 0:
                 col = layout.column()
@@ -117,10 +115,12 @@

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list