Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gavrilov <angavrilov@gmail.com>2020-12-05 18:59:13 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2020-12-07 14:11:53 +0300
commitc93dc355888ec2f9a4376ad6cf0422277c69d565 (patch)
treecb30669758c2c036c3819b9fecca0a8ef4c5219d /rigify/rigs/basic/raw_copy.py
parent53bfa6c93a17b6fa6bcc19f86c3c8df17cb57c5c (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.py23
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):