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

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/rigify
diff options
context:
space:
mode:
authorNathan Vegdahl <cessen@cessen.com>2011-06-19 23:53:01 +0400
committerNathan Vegdahl <cessen@cessen.com>2011-06-19 23:53:01 +0400
commit670bf72cb6978ff2f26a23bf2b5bb83b6e631e10 (patch)
tree59919e085327201bfb713be1c0451fd699790ff5 /rigify
parent1a3f4c4c6af16a3214c9dd3847590b87c580c11a (diff)
Rig layers can now be organized into rows by the user, for nicer layout.
Diffstat (limited to 'rigify')
-rw-r--r--rigify/__init__.py38
-rw-r--r--rigify/generate.py16
-rw-r--r--rigify/metarigs/human.py40
-rw-r--r--rigify/rig_ui_template.py39
-rw-r--r--rigify/ui.py16
5 files changed, 79 insertions, 70 deletions
diff --git a/rigify/__init__.py b/rigify/__init__.py
index fe9511cf..cbd93abd 100644
--- a/rigify/__init__.py
+++ b/rigify/__init__.py
@@ -115,35 +115,9 @@ class RigifyParameters(bpy.types.PropertyGroup):
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 @@ def register():
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 @@ def unregister():
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()
diff --git a/rigify/generate.py b/rigify/generate.py
index 3de8fe23..96a6d68d 100644
--- a/rigify/generate.py
+++ b/rigify/generate.py
@@ -282,12 +282,14 @@ def generate_rig(context, metarig):
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:
@@ -298,7 +300,7 @@ def generate_rig(context, metarig):
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
diff --git a/rigify/metarigs/human.py b/rigify/metarigs/human.py
index d0744066..cfc9f038 100644
--- a/rigify/metarigs/human.py
+++ b/rigify/metarigs/human.py
@@ -24,19 +24,33 @@ def create(obj):
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 = {}
diff --git a/rigify/rig_ui_template.py b/rigify/rig_ui_template.py
index 35df1ec2..a54ab175 100644
--- a/rigify/rig_ui_template.py
+++ b/rigify/rig_ui_template.py
@@ -493,7 +493,7 @@ class RigUI(bpy.types.Panel):
'''
-def layers_ui(layers, names):
+def layers_ui(layers, layout):
""" Turn a list of booleans + a list of names into a layer UI.
"""
@@ -515,15 +515,34 @@ class RigLayers(bpy.types.Panel):
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
diff --git a/rigify/ui.py b/rigify/ui.py
index eafa9679..3a2e89e3 100644
--- a/rigify/ui.py
+++ b/rigify/ui.py
@@ -92,10 +92,6 @@ class DATA_PT_rigify_layer_names(bpy.types.Panel):
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 @@ class DATA_PT_rigify_layer_names(bpy.types.Panel):
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,8 +115,10 @@ class DATA_PT_rigify_layer_names(bpy.types.Panel):
col = layout.column(align=True)
row = col.row()
row.prop(obj.data, "layers", index=i, text="", toggle=True)
- row.prop(obj.data.rigify_props[0], "layer_name_%s" % str(i+1).rjust(2, "0"), text="Layer %d" % (i + 1))
-
+ split = row.split(percentage=0.8)
+ split.prop(obj.data.rigify_layers[i], "name", text="Layer %d" % (i + 1))
+ split.prop(obj.data.rigify_layers[i], "row", text="")
+ #split.prop(obj.data.rigify_layers[i], "column", text="")
class BONE_PT_rigify_buttons(bpy.types.Panel):