fix for some errors and local root bone override
This commit is contained in:
@@ -24,8 +24,7 @@ from Mathutils import Vector
|
||||
# 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 @@ def submodule_func_from_type(bone_type):
|
||||
|
||||
# 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 validate_rig(context, obj):
|
||||
|
||||
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 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
|
||||
# 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 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
|
||||
# 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 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
|
||||
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(context, metarig_type="", GENERATE_FINAL=True):
|
||||
|
||||
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)
|
||||
|
||||
@@ -75,7 +75,7 @@ def main(obj, bone_definition, base_names):
|
||||
'''
|
||||
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')
|
||||
|
||||
|
||||
@@ -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 @@ def main(obj, bone_definition, base_names):
|
||||
# *** 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 @@ def main(obj, bone_definition, base_names):
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -118,9 +118,9 @@ def main(obj, bone_definition, base_names):
|
||||
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
|
||||
|
||||
arm, control_pbone, control_ebone = get_bone_data(obj, control_name)
|
||||
arm, pinky_pbone, pinky_ebone = get_bone_data(obj, children[0])
|
||||
arm = obj.data
|
||||
control_pbone = obj.pose.bones[control_name]
|
||||
pinky_pbone = obj.pose.bones[children[0]]
|
||||
|
||||
control_pbone.rotation_mode = 'YZX'
|
||||
control_pbone.lock_rotation = False, True, True
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user