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-09 17:46:49 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2020-12-09 17:57:16 +0300
commit13bf2bfc39128cc2f7c5906a53d89de1a0f18f29 (patch)
tree921e5b9deb09d9a48310fb2482eb45de36a83a81 /rigify/utils/widgets.py
parentff83176c7f46ec16666bec79bbda5d0147b5ed7c (diff)
Rigify: when using a widget from the metarig, create a linked duplicate.
This preserves the standard widget naming even with custom widgets.
Diffstat (limited to 'rigify/utils/widgets.py')
-rw-r--r--rigify/utils/widgets.py16
1 files changed, 10 insertions, 6 deletions
diff --git a/rigify/utils/widgets.py b/rigify/utils/widgets.py
index f39fa206..964d6257 100644
--- a/rigify/utils/widgets.py
+++ b/rigify/utils/widgets.py
@@ -60,15 +60,11 @@ def create_widget(rig, bone_name, bone_transform_name=None, *, widget_name=None,
""" Creates an empty widget object for a bone, and returns the object.
"""
assert rig.mode != 'EDIT'
- bone = rig.pose.bones[bone_name]
-
- # The bone already has a widget
- if bone.custom_shape:
- return None
obj_name = widget_name or WGT_PREFIX + rig.name + '_' + bone_name
scene = bpy.context.scene
collection = ensure_widget_collection(bpy.context, 'WGTS_' + rig.name)
+ reuse_mesh = None
# Check if it already exists in the scene
if not widget_force_new:
@@ -85,14 +81,22 @@ def create_widget(rig, bone_name, bone_transform_name=None, *, widget_name=None,
if obj_name in bpy.data.objects:
bpy.data.objects.remove(bpy.data.objects[obj_name])
+ # Create a linked duplicate of the widget assigned in the metarig
+ reuse_widget = rig.pose.bones[bone_name].custom_shape
+ if reuse_widget:
+ reuse_mesh = reuse_widget.data
+
# Create mesh object
- mesh = bpy.data.meshes.new(obj_name)
+ mesh = reuse_mesh or bpy.data.meshes.new(obj_name)
obj = bpy.data.objects.new(obj_name, mesh)
collection.objects.link(obj)
# Move object to bone position and set layers
obj_to_bone(obj, rig, bone_name, bone_transform_name)
+ if reuse_mesh:
+ return None
+
return obj