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>2021-09-20 22:16:41 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2021-09-20 22:34:09 +0300
commiteed6d6cc132d194efe018996d43a36ebc8d91ad4 (patch)
tree0817ea53fe929cb2959e219d1076d998d9d22b61 /rigify/rigs/widgets.py
parentecf30de46c368ffddad259c125402a38e6093382 (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.py8
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