diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2021-09-20 22:16:41 +0300 |
---|---|---|
committer | Alexander Gavrilov <angavrilov@gmail.com> | 2021-09-20 22:34:09 +0300 |
commit | eed6d6cc132d194efe018996d43a36ebc8d91ad4 (patch) | |
tree | 0817ea53fe929cb2959e219d1076d998d9d22b61 /rigify/rigs/widgets.py | |
parent | ecf30de46c368ffddad259c125402a38e6093382 (diff) |
Rigify: support generating mirrored linked duplicate widgets.
After the custom shape scale property was split into an XYZ vector,
it is possible to generate truly mirrored widgets using the same
mesh for the left and right side. The widgets Rigify generates are
originally symmetrical, but in practice they usually need to be
tweaked to fit the character better, and proper mirroring matters.
This commit implements widget mirroring and enables it by default.
When reusing widgets left from a previous generation the code tries
to detect whether they were actually originally mirrored by checking
object scale to avoid flipping in pre-existing rigs.
As an aside, reusing pre-existing widgets is made more robust
to random name changes by building a table via scanning the old
generated rig before overwriting it.
Diffstat (limited to 'rigify/rigs/widgets.py')
-rw-r--r-- | rigify/rigs/widgets.py | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/rigify/rigs/widgets.py b/rigify/rigs/widgets.py index ef0bb544..0c434593 100644 --- a/rigify/rigs/widgets.py +++ b/rigify/rigs/widgets.py @@ -97,7 +97,7 @@ def create_ikarrow_widget(rig, bone_name, size=1.0, bone_transform_name=None, ro def create_hand_widget(rig, bone_name, size=1.0, bone_transform_name=None): # Create hand widget - obj = create_widget(rig, bone_name, bone_transform_name) + obj = create_widget(rig, bone_name, bone_transform_name, subsurf=2) if obj is not None: verts = [(0.0*size, 1.5*size, -0.7000000476837158*size), (1.1920928955078125e-07*size, -0.25*size, -0.6999999284744263*size), (0.0*size, -0.25*size, 0.7000000476837158*size), (-1.1920928955078125e-07*size, 1.5*size, 0.6999999284744263*size), (5.960464477539063e-08*size, 0.7229999899864197*size, -0.699999988079071*size), (-5.960464477539063e-08*size, 0.7229999899864197*size, 0.699999988079071*size), (1.1920928955078125e-07*size, -2.9802322387695312e-08*size, -0.699999988079071*size), (0.0*size, 2.9802322387695312e-08*size, 0.699999988079071*size), ] edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7)] @@ -107,8 +107,6 @@ def create_hand_widget(rig, bone_name, size=1.0, bone_transform_name=None): mesh.from_pydata(verts, edges, faces) mesh.update() - mod = obj.modifiers.new("subsurf", 'SUBSURF') - mod.levels = 2 return obj else: return None @@ -116,7 +114,7 @@ def create_hand_widget(rig, bone_name, size=1.0, bone_transform_name=None): def create_foot_widget(rig, bone_name, size=1.0, bone_transform_name=None): # Create hand widget - obj = create_widget(rig, bone_name, bone_transform_name) + obj = create_widget(rig, bone_name, bone_transform_name, subsurf=2) if obj is not None: verts = [(-0.6999998688697815*size, -0.5242648720741272*size, 0.0*size), (-0.7000001072883606*size, 1.2257349491119385*size, 0.0*size), (0.6999998688697815*size, 1.2257351875305176*size, 0.0*size), (0.7000001072883606*size, -0.5242648720741272*size, 0.0*size), (-0.6999998688697815*size, 0.2527350187301636*size, 0.0*size), (0.7000001072883606*size, 0.2527352571487427*size, 0.0*size), (-0.7000001072883606*size, 0.975735068321228*size, 0.0*size), (0.6999998688697815*size, 0.9757352471351624*size, 0.0*size), ] edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7), ] @@ -126,8 +124,6 @@ def create_foot_widget(rig, bone_name, size=1.0, bone_transform_name=None): mesh.from_pydata(verts, edges, faces) mesh.update() - mod = obj.modifiers.new("subsurf", 'SUBSURF') - mod.levels = 2 return obj else: return None |