[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25173] trunk/blender/release/scripts/ modules: - bone.basename now only gets the name before the first '.', since names like finger.01.L are common
Campbell Barton
ideasman42 at gmail.com
Mon Dec 7 18:21:31 CET 2009
Revision: 25173
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25173
Author: campbellbarton
Date: 2009-12-07 18:21:30 +0100 (Mon, 07 Dec 2009)
Log Message:
-----------
- bone.basename now only gets the name before the first '.', since names like finger.01.L are common
- updated delta not to remove a bone
- spine and neck rigs interpolation bones are now axis aligned to the control bone
- palm tag is expected on the pointer finger rather then the wrist
- operate on bone children first working up the chain (not essential but more pradictable)
Modified Paths:
--------------
trunk/blender/release/scripts/modules/bpy_types.py
trunk/blender/release/scripts/modules/rigify/__init__.py
trunk/blender/release/scripts/modules/rigify/arm.py
trunk/blender/release/scripts/modules/rigify/delta.py
trunk/blender/release/scripts/modules/rigify/leg.py
trunk/blender/release/scripts/modules/rigify/neck.py
trunk/blender/release/scripts/modules/rigify/palm.py
trunk/blender/release/scripts/modules/rigify/spine.py
Modified: trunk/blender/release/scripts/modules/bpy_types.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_types.py 2009-12-07 16:59:10 UTC (rev 25172)
+++ trunk/blender/release/scripts/modules/bpy_types.py 2009-12-07 17:21:30 UTC (rev 25173)
@@ -76,7 +76,8 @@
@property
def basename(self):
- return self.name.rsplit(".", 1)[0]
+ #return self.name.rsplit(".", 1)[0]
+ return self.name.split(".")[0]
@property
def parent_recursive(self):
Modified: trunk/blender/release/scripts/modules/rigify/__init__.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/__init__.py 2009-12-07 16:59:10 UTC (rev 25172)
+++ trunk/blender/release/scripts/modules/rigify/__init__.py 2009-12-07 17:21:30 UTC (rev 25173)
@@ -438,14 +438,19 @@
bone_typeinfo.append((submod_name, type_func))
+ # sort bones, not needed but gives more pradictable execution which may be useful in rare cases
+ bones_sorted = obj.pose.bones.values()
+ bones_sorted.sort(key=lambda pbone: pbone.name) # first sort by names
+ bones_sorted.sort(key=lambda pbone: - len(pbone.parent_recursive)) # children before parents
+
# now we have all the info about bones we can start operating on them
-
- for pbone in obj.pose.bones:
+ # for pbone in obj.pose.bones:
+ for pbone in bones_sorted:
bone_name = pbone.name
if bone_name not in bone_typeinfos:
continue
-
+
bone_def_dict = bone_definitions[bone_name]
# Only blend results from the same submodule, eg.
Modified: trunk/blender/release/scripts/modules/rigify/arm.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/arm.py 2009-12-07 16:59:10 UTC (rev 25172)
+++ trunk/blender/release/scripts/modules/rigify/arm.py 2009-12-07 17:21:30 UTC (rev 25173)
@@ -64,10 +64,11 @@
mt.update()
mt.shoulder_p = mt.arm_p.parent
- mt.shoulder = mt.shoulder_p.name
-
+
if not mt.shoulder_p:
raise Exception("could not find 'arm' parent, skipping:", orig_bone_name)
+ print(mt.shoulder_p)
+ mt.shoulder = mt.shoulder_p.name
# We could have some bones attached, find the bone that has this as its 2nd parent
hands = []
@@ -119,13 +120,13 @@
mt.update()
# Add the edit bones
- ik.hand_e = copy_bone_simple(arm, mt.hand, prefix % mt.hand)
+ ik.hand_e = copy_bone_simple(arm, mt.hand, prefix % base_names[mt.hand])
ik.hand = ik.hand_e.name
- ik.arm_e = copy_bone_simple(arm, mt.arm, prefix % mt.arm)
+ ik.arm_e = copy_bone_simple(arm, mt.arm, prefix % base_names[mt.arm])
ik.arm = ik.arm_e.name
- ik.forearm_e = copy_bone_simple(arm, mt.forearm, prefix % mt.forearm)
+ ik.forearm_e = copy_bone_simple(arm, mt.forearm, prefix % base_names[mt.forearm])
ik.forearm = ik.forearm_e.name
ik.arm_e.parent = mt.arm_e.parent
@@ -164,32 +165,27 @@
bpy.ops.object.mode_set(mode='EDIT')
- ik.arm = ik.arm
- ik.forearm = ik.forearm
- ik.hand = ik.hand
- ik.pole = ik.pole
-
def chain_switch(prefix="MCH-%s"):
-
+ print(mt.obj.mode)
sw.update()
mt.update()
- sw.shoulder_e = copy_bone_simple(arm, mt.shoulder, prefix % mt.shoulder)
+ sw.shoulder_e = copy_bone_simple(arm, mt.shoulder, prefix % base_names[mt.shoulder])
sw.shoulder = sw.shoulder_e.name
sw.shoulder_e.parent = mt.shoulder_e.parent
sw.shoulder_e.connected = mt.shoulder_e.connected
- sw.arm_e = copy_bone_simple(arm, mt.arm, prefix % mt.arm)
+ sw.arm_e = copy_bone_simple(arm, mt.arm, prefix % base_names[mt.arm])
sw.arm = sw.arm_e.name
sw.arm_e.parent = sw.shoulder_e
sw.arm_e.connected = arm.edit_bones[mt.shoulder].connected
- sw.forearm_e = copy_bone_simple(arm, mt.forearm, prefix % mt.forearm)
+ sw.forearm_e = copy_bone_simple(arm, mt.forearm, prefix % base_names[mt.forearm])
sw.forearm = sw.forearm_e.name
sw.forearm_e.parent = sw.arm_e
sw.forearm_e.connected = arm.edit_bones[mt.forearm].connected
- sw.hand_e = copy_bone_simple(arm, mt.hand, prefix % mt.hand)
+ sw.hand_e = copy_bone_simple(arm, mt.hand, prefix % base_names[mt.hand])
sw.hand = sw.hand_e.name
sw.hand_e.parent = sw.forearm_e
sw.hand_e.connected = arm.edit_bones[mt.hand].connected
@@ -271,7 +267,7 @@
def chain_shoulder(prefix="MCH-%s"):
- sw.socket_e = copy_bone_simple(arm, mt.arm, (prefix % mt.arm) + "_socket")
+ sw.socket_e = copy_bone_simple(arm, mt.arm, (prefix % base_names[mt.arm]) + "_socket")
sw.socket = sw.socket_e.name
sw.socket_e.tail = arm.edit_bones[mt.shoulder].tail
@@ -287,7 +283,7 @@
# ***** add the shoulder hinge
# yes this is correct, the shoulder copy gets the arm's name
- ex.arm_hinge_e = copy_bone_simple(arm, mt.shoulder, (prefix % mt.arm) + "_hinge")
+ ex.arm_hinge_e = copy_bone_simple(arm, mt.shoulder, (prefix % base_names[mt.arm]) + "_hinge")
ex.arm_hinge = ex.arm_hinge_e.name
offset = ex.arm_hinge_e.length / 2.0
Modified: trunk/blender/release/scripts/modules/rigify/delta.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/delta.py 2009-12-07 16:59:10 UTC (rev 25172)
+++ trunk/blender/release/scripts/modules/rigify/delta.py 2009-12-07 17:21:30 UTC (rev 25173)
@@ -81,24 +81,27 @@
child_head = child_ebone.head.copy()
child_tail = child_ebone.tail.copy()
- arm.edit_bones.remove(delta_ebone)
- del delta_ebone # cant use this
+ #arm.edit_bones.remove(delta_ebone)
+ #del delta_ebone # cant use this
+ del child_pbone
bpy.ops.object.mode_set(mode='OBJECT')
+
+
-
# Move the child bone to the deltas location
obj.animation_data_create()
- child_pbone = obj.pose.bones[child_name]
-
+ delta_pbone = obj.pose.bones[delta_name]
+ # child_pbone = obj.pose.bones[child_name]
+
# ------------------- drivers
- child_pbone.rotation_mode = 'XYZ'
+ delta_pbone.rotation_mode = 'XYZ'
rot = delta_pmatrix.invert().rotationPart() * child_pmatrix.rotationPart()
rot = rot.invert().toEuler()
- fcurve_drivers = child_pbone.driver_add("rotation_euler", -1)
+ fcurve_drivers = delta_pbone.driver_add("rotation_euler", -1)
for i, fcurve_driver in enumerate(fcurve_drivers):
driver = fcurve_driver.driver
driver.type = 'AVERAGE'
@@ -111,7 +114,7 @@
# tricky, find the transform to drive the bone to this location.
delta_head_offset = child_pmatrix.rotationPart() * (delta_phead - child_phead)
- fcurve_drivers = child_pbone.driver_add("location", -1)
+ fcurve_drivers = delta_pbone.driver_add("location", -1)
for i, fcurve_driver in enumerate(fcurve_drivers):
driver = fcurve_driver.driver
driver.type = 'AVERAGE'
Modified: trunk/blender/release/scripts/modules/rigify/leg.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/leg.py 2009-12-07 16:59:10 UTC (rev 25172)
+++ trunk/blender/release/scripts/modules/rigify/leg.py 2009-12-07 17:21:30 UTC (rev 25173)
@@ -105,7 +105,7 @@
children = bone.children
# Now there must be 2 children, only one connected
if len(children) != 2:
- raise Exception("expected the foot to have 2 children")
+ raise Exception("expected the foot bone:'%s' to have 2 children" % bone.name )
if children[0].connected == children[1].connected:
raise Exception("expected one bone to be connected")
Modified: trunk/blender/release/scripts/modules/rigify/neck.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/neck.py 2009-12-07 16:59:10 UTC (rev 25172)
+++ trunk/blender/release/scripts/modules/rigify/neck.py 2009-12-07 17:21:30 UTC (rev 25173)
@@ -159,8 +159,9 @@
# dont store parent names, re-reference as each chain bones parent.
neck_e_parent = arm.edit_bones.new("MCH-rot_%s" % neck_e.name)
neck_e_parent.head = neck_e.head
- neck_e_parent.tail = neck_e.head + Vector(0.0, 0.0, neck_chain_segment_length / 2.0)
- neck_e_parent.roll = 0.0
+ neck_e_parent.tail = neck_e.head + ((mt.head_e.tail - mt.head_e.head).normalize() * neck_chain_segment_length / 2.0)
+ neck_e_parent.roll = neck_e.roll
+
orig_parent = neck_e.parent
neck_e.connected = False
Modified: trunk/blender/release/scripts/modules/rigify/palm.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/palm.py 2009-12-07 16:59:10 UTC (rev 25172)
+++ trunk/blender/release/scripts/modules/rigify/palm.py 2009-12-07 17:21:30 UTC (rev 25173)
@@ -25,8 +25,8 @@
# not used, defined for completeness
METARIG_NAMES = tuple()
-
def metarig_template():
+ # generated by rigify.write_meta_rig
bpy.ops.object.mode_set(mode='EDIT')
obj = bpy.context.object
arm = obj.data
@@ -73,28 +73,28 @@
bone.parent = arm.edit_bones['hand']
bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['hand']
+ pbone = obj.pose.bones['palm.05']
pbone['type'] = 'palm'
def metarig_definition(obj, orig_bone_name):
'''
- The bone given is the first in a chain
- Expects an array of children sorted with the little finger lowest.
+ The bone given is the first in an array of siblings with a matching basename
+ sorted with the little finger lowest.
eg.
- parent -> [pinky, ring... etc]
+ [pinky, ring... etc]
'''
arm = obj.data
- bone_definition = [orig_bone_name]
- palm_ebone = arm.bones[orig_bone_name]
+
+ palm_bone = arm.bones[orig_bone_name]
+ palm_parent = palm_bone.parent
+ palm_base = palm_bone.basename
+ bone_definition = [bone.name for bone in palm_parent.children if bone.basename == palm_base]
+ bone_definition.sort()
- children = [ebone.name for ebone in palm_ebone.children]
- children.sort() # simply assume the pinky has the lowest name
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list