[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