diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2020-12-05 18:59:13 +0300 |
---|---|---|
committer | Alexander Gavrilov <angavrilov@gmail.com> | 2020-12-07 14:11:53 +0300 |
commit | c93dc355888ec2f9a4376ad6cf0422277c69d565 (patch) | |
tree | cb30669758c2c036c3819b9fecca0a8ef4c5219d /rigify/rigs/basic/raw_copy.py | |
parent | 53bfa6c93a17b6fa6bcc19f86c3c8df17cb57c5c (diff) |
Rigify: keep custom widgets already assigned in metarig.
Also make error handling more robust and extend constraint relink mixin.
Diffstat (limited to 'rigify/rigs/basic/raw_copy.py')
-rw-r--r-- | rigify/rigs/basic/raw_copy.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/rigify/rigs/basic/raw_copy.py b/rigify/rigs/basic/raw_copy.py index 077deaa6..44c10a6c 100644 --- a/rigify/rigs/basic/raw_copy.py +++ b/rigify/rigs/basic/raw_copy.py @@ -47,10 +47,19 @@ class RelinkConstraintsMixin: def relink_bone_constraints(self, bone_name): if self.params.relink_constraints: for con in self.get_bone(bone_name).constraints: - parts = con.name.split('@') + self.relink_single_constraint(con) - if len(parts) > 1: - self.relink_constraint(con, parts[1:]) + + relink_unmarked_constraints = False + + def relink_single_constraint(self, con): + if self.params.relink_constraints: + parts = con.name.split('@') + + if len(parts) > 1: + self.relink_constraint(con, parts[1:]) + elif self.relink_unmarked_constraints: + self.relink_constraint(con, ['']) def relink_bone_parent(self, bone_name): @@ -73,13 +82,15 @@ class RelinkConstraintsMixin: self.raise_error("Constraint {} actually has {} targets", con.name, len(con.targets)) for tgt, spec in zip(con.targets, specs): - tgt.subtarget = self.find_relink_target(spec, tgt.subtarget) + if tgt.target == self.obj: + tgt.subtarget = self.find_relink_target(spec, tgt.subtarget) - else: + elif hasattr(con, 'subtarget'): if len(specs) > 1: self.raise_error("Only the Armature constraint can have multiple '@' targets: {}", con.name) - con.subtarget = self.find_relink_target(specs[0], con.subtarget) + if con.target == self.obj: + con.subtarget = self.find_relink_target(specs[0], con.subtarget) def find_relink_target(self, spec, old_target): |