diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2019-10-15 17:03:29 +0300 |
---|---|---|
committer | Alexander Gavrilov <angavrilov@gmail.com> | 2019-10-15 17:03:29 +0300 |
commit | 11871509f9bc207ee3bfd324c3f160be38f658fe (patch) | |
tree | cc7233c3136f8559d5e2fa36752193c38c241868 /rigify | |
parent | dd723151763d8ee3b5c2c94f6c4b5c1ac43b8b59 (diff) | |
parent | 5b18c3f4acb23fe26e12b6c4d425a79c0a8a61e6 (diff) |
Merge branch 'blender-v2.81-release'
Diffstat (limited to 'rigify')
-rw-r--r-- | rigify/base_generate.py | 3 | ||||
-rw-r--r-- | rigify/generate.py | 5 | ||||
-rw-r--r-- | rigify/rigs/spines/super_spine.py | 2 | ||||
-rw-r--r-- | rigify/utils/misc.py | 25 |
4 files changed, 32 insertions, 3 deletions
diff --git a/rigify/base_generate.py b/rigify/base_generate.py index 8cf04ade..651e0612 100644 --- a/rigify/base_generate.py +++ b/rigify/base_generate.py @@ -27,7 +27,7 @@ from .utils.errors import MetarigError, RaiseErrorMixin from .utils.naming import random_id from .utils.metaclass import SingletonPluginMetaclass from .utils.rig import list_bone_names_depth_first_sorted, get_rigify_type -from .utils.misc import assign_parameters +from .utils.misc import clone_parameters, assign_parameters from . import base_rig @@ -78,6 +78,7 @@ class SubstitutionRig(RaiseErrorMixin): self.obj = generator.obj self.base_bone = pose_bone.name self.params = pose_bone.rigify_parameters + self.params_copy = clone_parameters(self.params) def substitute(self): # return [rig1, rig2...] diff --git a/rigify/generate.py b/rigify/generate.py index 295c1a50..9e88dcfc 100644 --- a/rigify/generate.py +++ b/rigify/generate.py @@ -165,8 +165,13 @@ class Generator(base_generate.BaseGenerator): # Select the target rig and join select_object(context, obj) + saved_matrix = obj.matrix_world.copy() + obj.matrix_world = metarig.matrix_world + bpy.ops.object.join() + obj.matrix_world = saved_matrix + # Select the generated rig select_object(context, obj, deselect_all=True) diff --git a/rigify/rigs/spines/super_spine.py b/rigify/rigs/spines/super_spine.py index 4e371e64..86021c84 100644 --- a/rigify/rigs/spines/super_spine.py +++ b/rigify/rigs/spines/super_spine.py @@ -33,7 +33,7 @@ class Rig(SubstitutionRig, BoneUtilityMixin): """Compatibility proxy for the monolithic super_spine rig that splits it into parts.""" def substitute(self): - params_copy = dict(self.params) + params_copy = self.params_copy orgs = [self.base_bone] + connected_children_names(self.obj, self.base_bone) # Split the bone list according to the settings diff --git a/rigify/utils/misc.py b/rigify/utils/misc.py index 4d0fbad3..64367bb7 100644 --- a/rigify/utils/misc.py +++ b/rigify/utils/misc.py @@ -24,6 +24,7 @@ import collections from itertools import tee, chain, islice, repeat from mathutils import Vector, Matrix, Color +from rna_prop_ui import rna_idprop_value_to_python #============================================= @@ -170,8 +171,30 @@ def copy_attributes(a, b): pass +def property_to_python(value): + value = rna_idprop_value_to_python(value) + + if isinstance(value, dict): + return { k: property_to_python(v) for k, v in value.items() } + elif isinstance(value, list): + return map_list(property_to_python, value) + else: + return value + + +def clone_parameters(target): + return property_to_python(dict(target)) + + def assign_parameters(target, val_dict=None, **params): - data = { **val_dict, **params } if val_dict else params + if val_dict is not None: + for key in list(target.keys()): + del target[key] + + data = { **val_dict, **params } + else: + data = params + for key, value in data.items(): try: target[key] = value |