[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25289] trunk/blender/release/scripts/ modules: fix for some errors and local root bone override
Campbell Barton
ideasman42 at gmail.com
Thu Dec 10 15:32:39 CET 2009
Revision: 25289
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25289
Author: campbellbarton
Date: 2009-12-10 15:32:37 +0100 (Thu, 10 Dec 2009)
Log Message:
-----------
fix for some errors and local root bone override
Modified Paths:
--------------
trunk/blender/release/scripts/modules/rigify/__init__.py
trunk/blender/release/scripts/modules/rigify/delta.py
trunk/blender/release/scripts/modules/rigify/finger_curl.py
trunk/blender/release/scripts/modules/rigify/palm_curl.py
trunk/blender/release/scripts/modules/rigify_utils.py
Modified: trunk/blender/release/scripts/modules/rigify/__init__.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/__init__.py 2009-12-10 14:26:06 UTC (rev 25288)
+++ trunk/blender/release/scripts/modules/rigify/__init__.py 2009-12-10 14:32:37 UTC (rev 25289)
@@ -24,9 +24,8 @@
# TODO, have these in a more general module
from rna_prop_ui import rna_idprop_ui_prop_get
-EMPTY_LAYER = [False] * 32
-DELIMITER = '-._'
+
def submodule_func_from_type(bone_type):
type_pair = bone_type.split(".")
@@ -39,7 +38,7 @@
# from rigify import leg
submod = __import__(name="%s.%s" % (__package__, submod_name), fromlist=[submod_name])
-
+ reload(submod)
return submod, getattr(submod, func_name)
@@ -63,6 +62,8 @@
def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
from collections import OrderedDict
+ import rigify_utils
+ reload(rigify_utils)
global_undo = context.user_preferences.edit.global_undo
context.user_preferences.edit.global_undo = False
@@ -110,6 +111,12 @@
# value: [functions, ...]
# each function is from the module. eg leg.ik, arm.main
bone_typeinfos = {}
+
+ # key: bone name
+ # value: [new_bone_name, ...]
+ # where each bone with a 'type' stores a list of bones that it created
+ # ...needed so we can override the root parent
+ bone_genesis = {}
# inspect all bones and assign their definitions before modifying
for pbone in obj.pose.bones:
@@ -162,6 +169,8 @@
# Only blend results from the same submodule, eg.
# leg.ik and arm.fk could not be blended.
results = OrderedDict()
+
+ bone_names_pre = set([bone.name for bone in arm.bones])
for submod_name, type_func in bone_typeinfos[bone_name]:
# this bones definition of the current typeinfo
@@ -186,15 +195,41 @@
if len(result_submod) == 2:
blend_bone_list(obj, definition, result_submod[0], result_submod[1], target_bone=bone_name)
+
+ bone_names_post = set([bone.name for bone in arm.bones])
+
+ # Store which bones were created from this one
+ bone_genesis[bone_name] = list(bone_names_post - bone_names_pre)
+
+ # need a reverse lookup on bone_genesis so as to know immediately
+ # where a bone comes from
+ bone_genesis_reverse = {}
+ for bone_name, bone_children in bone_genesis.items():
+ for bone_child_name in bone_children:
+ bone_genesis_reverse[bone_child_name] = bone_name
+
+
if root_bone:
# assign all new parentless bones to this
bpy.ops.object.mode_set(mode='EDIT')
root_ebone = arm.edit_bones[root_bone]
for ebone in arm.edit_bones:
- if ebone.parent is None and ebone.name not in base_names:
+ bone_name = ebone.name
+ if ebone.parent is None and bone_name not in base_names:
+ # check for override
+ bone_creator = bone_genesis_reverse[bone_name]
+ pbone_creator = obj.pose.bones[bone_creator]
+ root_bone_override = pbone_creator.get("root", "")
+
+ if root_bone_override:
+ root_ebone_tmp = arm.edit_bones[root_bone_override]
+ else:
+ root_ebone_tmp = root_ebone
+
ebone.connected = False
ebone.parent = root_ebone
+
bpy.ops.object.mode_set(mode='OBJECT')
@@ -277,9 +312,11 @@
def generate_test_all(context, GRAPH=False):
import rigify
+ import rigify_utils
import graphviz_export
import os
reload(rigify)
+ reload(rigify_utils)
reload(graphviz_export)
new_objects = rigify.generate_test(context)
Modified: trunk/blender/release/scripts/modules/rigify/delta.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/delta.py 2009-12-10 14:26:06 UTC (rev 25288)
+++ trunk/blender/release/scripts/modules/rigify/delta.py 2009-12-10 14:32:37 UTC (rev 25289)
@@ -75,7 +75,7 @@
'''
Use this bone to define a delta thats applied to its child in pose mode.
'''
-
+ return
mode_orig = obj.mode
bpy.ops.object.mode_set(mode='OBJECT')
Modified: trunk/blender/release/scripts/modules/rigify/finger_curl.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/finger_curl.py 2009-12-10 14:26:06 UTC (rev 25288)
+++ trunk/blender/release/scripts/modules/rigify/finger_curl.py 2009-12-10 14:32:37 UTC (rev 25289)
@@ -19,8 +19,7 @@
# <pep8 compliant>
import bpy
-from rigify import EMPTY_LAYER
-from rigify_utils import copy_bone_simple, get_side_name, get_base_name
+from rigify_utils import copy_bone_simple, get_side_name, get_base_name, EMPTY_LAYER
from rna_prop_ui import rna_idprop_ui_prop_get
from functools import reduce
@@ -90,7 +89,9 @@
# *** EDITMODE
# get assosiated data
- arm, orig_pbone, orig_ebone = get_bone_data(obj, bone_definition[0])
+ arm = obj.data
+ orig_pbone = obj.pose.bones[bone_definition[0]]
+ orig_ebone = arm.edit_bones[bone_definition[0]]
obj.animation_data_create() # needed if its a new armature with no keys
@@ -117,7 +118,7 @@
children = [pbone.name for pbone in children]
# set an alternate layer for driver bones
- other_layer = empty_layer[:]
+ other_layer = EMPTY_LAYER[:]
other_layer[8] = True
Modified: trunk/blender/release/scripts/modules/rigify/palm_curl.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/palm_curl.py 2009-12-10 14:26:06 UTC (rev 25288)
+++ trunk/blender/release/scripts/modules/rigify/palm_curl.py 2009-12-10 14:32:37 UTC (rev 25289)
@@ -118,10 +118,10 @@
bpy.ops.object.mode_set(mode='OBJECT')
+ arm = obj.data
+ control_pbone = obj.pose.bones[control_name]
+ pinky_pbone = obj.pose.bones[children[0]]
- arm, control_pbone, control_ebone = get_bone_data(obj, control_name)
- arm, pinky_pbone, pinky_ebone = get_bone_data(obj, children[0])
-
control_pbone.rotation_mode = 'YZX'
control_pbone.lock_rotation = False, True, True
Modified: trunk/blender/release/scripts/modules/rigify_utils.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify_utils.py 2009-12-10 14:26:06 UTC (rev 25288)
+++ trunk/blender/release/scripts/modules/rigify_utils.py 2009-12-10 14:32:37 UTC (rev 25289)
@@ -25,6 +25,13 @@
# for rigify so in some cases seemingly generic functions make assumptions
# that a generic function would need to check for.
+import bpy
+from Mathutils import Vector
+from rna_prop_ui import rna_idprop_ui_prop_get
+
+DELIMITER = '-._'
+EMPTY_LAYER = [False] * 32
+
def add_stretch_to(obj, from_name, to_name, name):
'''
Adds a bone that stretches from one to another
More information about the Bf-blender-cvs
mailing list