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-08 13:31:07 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2020-12-08 13:31:07 +0300
commitb0361dcaac3034cde90a5c146e3ef3f07d226da9 (patch)
tree9dff4b37f71374882a2c8dbc1347018ce293e7d1 /rigify/rigs
parent9bc98387d9edf988695e294bedaa152043a35de7 (diff)
Rigify: support choosing widgets out of a list in super_copy and pivot.
Register the most generic widgets in the list and add a few more. Use it to assign a nicer looking shoulder widget in human metarigs.
Diffstat (limited to 'rigify/rigs')
-rw-r--r--rigify/rigs/basic/pivot.py13
-rw-r--r--rigify/rigs/basic/super_copy.py29
-rw-r--r--rigify/rigs/limbs/limb_rigs.py2
-rw-r--r--rigify/rigs/limbs/super_palm.py61
-rw-r--r--rigify/rigs/widgets.py20
5 files changed, 61 insertions, 64 deletions
diff --git a/rigify/rigs/basic/pivot.py b/rigify/rigs/basic/pivot.py
index e5d31659..2a44e7e4 100644
--- a/rigify/rigs/basic/pivot.py
+++ b/rigify/rigs/basic/pivot.py
@@ -24,7 +24,8 @@ from ...base_rig import BaseRig
from ...utils.naming import make_derived_name
from ...utils.bones import set_bone_widget_transform
-from ...utils.widgets_basic import create_cube_widget, create_pivot_widget
+from ...utils.widgets import layout_widget_dropdown, create_registered_widget
+from ...utils.widgets_basic import create_pivot_widget
from ...utils.switch_parent import SwitchParentBuilder
@@ -135,7 +136,7 @@ class Rig(BaseRig):
if self.make_control:
set_bone_widget_transform(self.obj, self.bones.ctrl.master, self.bones.org)
- create_cube_widget(self.obj, self.bones.ctrl.master, radius=0.5)
+ create_registered_widget(self.obj, self.bones.ctrl.master, self.params.pivot_master_widget_type or 'cube')
@classmethod
@@ -146,6 +147,12 @@ class Rig(BaseRig):
description = "Create a control bone for the copy"
)
+ params.pivot_master_widget_type = bpy.props.StringProperty(
+ name = "Widget Type",
+ default = 'cube',
+ description = "Choose the type of the widget to create"
+ )
+
params.make_parent_switch = bpy.props.BoolProperty(
name = "Switchable Parent",
default = False,
@@ -183,6 +190,8 @@ class Rig(BaseRig):
r.prop(params, "make_extra_control", text="Master Control")
if params.make_extra_control:
+ layout_widget_dropdown(layout, params, "pivot_master_widget_type")
+
layout.prop(params, "make_parent_switch")
layout.prop(params, "register_parent")
diff --git a/rigify/rigs/basic/super_copy.py b/rigify/rigs/basic/super_copy.py
index 07ad60b7..dcff41fe 100644
--- a/rigify/rigs/basic/super_copy.py
+++ b/rigify/rigs/basic/super_copy.py
@@ -23,7 +23,8 @@ import bpy
from ...base_rig import BaseRig
from ...utils.naming import strip_org, make_deformer_name
-from ...utils.widgets_basic import create_bone_widget, create_circle_widget
+from ...utils.widgets import layout_widget_dropdown, create_registered_widget
+from ...utils.widgets_basic import create_bone_widget
from .raw_copy import RelinkConstraintsMixin
@@ -95,7 +96,7 @@ class Rig(BaseRig, RelinkConstraintsMixin):
if self.make_control:
# Create control widget
if self.make_widget:
- create_circle_widget(self.obj, bones.ctrl, radius=0.5)
+ create_registered_widget(self.obj, bones.ctrl, self.params.super_copy_widget_type or 'circle')
else:
create_bone_widget(self.obj, bones.ctrl)
@@ -117,6 +118,12 @@ class Rig(BaseRig, RelinkConstraintsMixin):
description = "Choose a widget for the bone control"
)
+ params.super_copy_widget_type = bpy.props.StringProperty(
+ name = "Widget Type",
+ default = 'circle',
+ description = "Choose the type of the widget to create"
+ )
+
params.make_deform = bpy.props.BoolProperty(
name = "Deform",
default = True,
@@ -130,13 +137,17 @@ class Rig(BaseRig, RelinkConstraintsMixin):
def parameters_ui(self, layout, params):
""" Create the ui for the rig parameters.
"""
- r = layout.row()
- r.prop(params, "make_control")
- r = layout.row()
- r.prop(params, "make_widget")
- r.enabled = params.make_control
- r = layout.row()
- r.prop(params, "make_deform")
+ layout.prop(params, "make_control")
+
+ row = layout.split(factor=0.3)
+ row.prop(params, "make_widget")
+ row.enabled = params.make_control
+
+ row2 = row.row(align=True)
+ row2.enabled = params.make_widget
+ layout_widget_dropdown(row2, params, "super_copy_widget_type", text="")
+
+ layout.prop(params, "make_deform")
self.add_relink_constraints_ui(layout, params)
diff --git a/rigify/rigs/limbs/limb_rigs.py b/rigify/rigs/limbs/limb_rigs.py
index 1c57a597..a5df27f4 100644
--- a/rigify/rigs/limbs/limb_rigs.py
+++ b/rigify/rigs/limbs/limb_rigs.py
@@ -206,7 +206,7 @@ class BaseLimbRig(BaseRig):
@stage.generate_widgets
def make_master_control_widget(self):
- create_gear_widget(self.obj, self.bones.ctrl.master, size=10)
+ create_gear_widget(self.obj, self.bones.ctrl.master, radius=1)
####################################################
diff --git a/rigify/rigs/limbs/super_palm.py b/rigify/rigs/limbs/super_palm.py
index ed044fe1..47d5eaf3 100644
--- a/rigify/rigs/limbs/super_palm.py
+++ b/rigify/rigs/limbs/super_palm.py
@@ -26,7 +26,7 @@ from itertools import count, repeat
from rigify.utils.rig import is_rig_base_bone
from rigify.utils.naming import strip_org, make_derived_name, choose_derived_bone
-from rigify.utils.widgets import create_widget
+from rigify.utils.widgets import widget_generator, register_widget
from rigify.utils.widgets_basic import create_bone_widget
from rigify.utils.misc import map_list
@@ -147,43 +147,7 @@ class Rig(BaseRig):
self.make_control_widget(self.bones.ctrl.secondary)
def make_control_widget(self, ctrl):
- w = create_widget(self.obj, ctrl)
- if w is not None:
- mesh = w.data
- verts = [
- (0.1578, 0.0, -0.3),
- (0.1578, 1.0, -0.2),
- (-0.1578, 1.0, -0.2),
- (-0.1578, -0.0, -0.3),
- (-0.1578, -0.0, 0.3),
- (-0.1578, 1.0, 0.2),
- (0.1578, 1.0, 0.2),
- (0.1578, 0.0, 0.3),
- (0.1578, 0.25, -0.275),
- (-0.1578, 0.25, -0.275),
- (0.1578, 0.75, -0.225),
- (-0.1578, 0.75, -0.225),
- (0.1578, 0.75, 0.225),
- (0.1578, 0.25, 0.275),
- (-0.1578, 0.25, 0.275),
- (-0.1578, 0.75, 0.225),
- ]
-
- if 'Z' in self.palm_rotation_axis:
- # Flip x/z coordinates
- verts = [v[::-1] for v in verts]
-
- edges = [
- (1, 2), (0, 3), (4, 7), (5, 6),
- (8, 0), (9, 3), (10, 1), (11, 2),
- (12, 6), (13, 7), (4, 14), (15, 5),
- (10, 8), (11, 9), (15, 14), (12, 13),
- ]
- mesh.from_pydata(verts, edges, [])
- mesh.update()
-
- mod = w.modifiers.new("subsurf", 'SUBSURF')
- mod.levels = 2
+ make_palm_widget(self.obj, ctrl, axis=self.palm_rotation_axis, radius=0.4)
####################################################
# FK controls
@@ -354,6 +318,27 @@ class Rig(BaseRig):
layout.prop(params, "make_extra_control", text="Extra FK Controls")
+@widget_generator(register="palm", subsurf=2)
+def make_palm_widget(geom, axis='X', radius=0.5):
+ sx = radius / 0.4
+ sz = radius / 0.3
+ v = [(0.1578, 0.0, -0.3), (0.1578, 1.0, -0.2), (-0.1578, 1.0, -0.2), (-0.1578, -0.0, -0.3),
+ (-0.1578, -0.0, 0.3), (-0.1578, 1.0, 0.2), (0.1578, 1.0, 0.2), (0.1578, 0.0, 0.3),
+ (0.1578, 0.25, -0.275), (-0.1578, 0.25, -0.275), (0.1578, 0.75, -0.225), (-0.1578, 0.75, -0.225),
+ (0.1578, 0.75, 0.225), (0.1578, 0.25, 0.275), (-0.1578, 0.25, 0.275), (-0.1578, 0.75, 0.225)]
+
+ geom.verts = [(x*sx, y, z*sz) for x,y,z in v]
+
+ if 'Z' in axis:
+ # Flip x/z coordinates
+ geom.verts = [v[::-1] for v in geom.verts]
+
+ geom.edges = [(1, 2), (0, 3), (4, 7), (5, 6), (8, 0), (9, 3), (10, 1), (11, 2), (12, 6),
+ (13, 7), (4, 14), (15, 5), (10, 8), (11, 9), (15, 14), (12, 13)]
+
+register_widget("palm_z", make_palm_widget, axis='Z')
+
+
def create_sample(obj):
# generated by rigify.utils.write_metarig
bpy.ops.object.mode_set(mode='EDIT')
diff --git a/rigify/rigs/widgets.py b/rigify/rigs/widgets.py
index 507d5422..c6617702 100644
--- a/rigify/rigs/widgets.py
+++ b/rigify/rigs/widgets.py
@@ -1,5 +1,5 @@
from mathutils import Matrix
-from ..utils import create_widget
+from ..utils.widgets import create_widget, widget_generator
MODULE_NAME = "super_widgets" # Windows/Mac blender is weird, so __package__ doesn't work
@@ -166,16 +166,8 @@ def create_ballsocket_widget(rig, bone_name, size=1.0, bone_transform_name=None)
return None
-def create_gear_widget(rig, bone_name, size=1.0, bone_transform_name=None):
- obj = create_widget(rig, bone_name, bone_transform_name)
- if obj is not None:
- verts = [(0.11251477152109146*size, -8.06030631128607e-10*size, 0.01843983121216297*size), (0.018439611420035362*size, -4.918176976786981e-09*size, 0.11251477152109146*size), (0.09270283579826355*size, -8.06030631128607e-10*size, 0.01843983121216297*size), (0.08732416480779648*size, -1.5810827092010982e-09*size, 0.03617095574736595*size), (0.07858962565660477*size, -2.295374557093055e-09*size, 0.05251204967498779*size), (0.052511852234601974*size, -3.4352671818282943e-09*size, 0.07858975231647491*size), (0.03617073595523834*size, -3.8170644423018985e-09*size, 0.08732425421476364*size), (0.018439611420035362*size, -4.0521714872454595e-09*size, 0.09270287305116653*size), (0.09402976930141449*size, -2.937612375575327e-09*size, 0.06720473617315292*size), (0.08150213211774826*size, -3.513068946858766e-09*size, 0.08036965131759644*size), (0.06872907280921936*size, -4.0997978345558295e-09*size, 0.09379243850708008*size), (-0.1125146746635437*size, -8.06030631128607e-10*size, 0.01843983121216297*size), (-0.01843959279358387*size, -4.918176976786981e-09*size, 0.11251477152109146*size), (1.078764189088588e-08*size, -4.918176976786981e-09*size, 0.11251477152109146*size), (-0.09270282834768295*size, -8.06030631128607e-10*size, 0.01843983121216297*size), (-0.0873241126537323*size, -1.5810827092010982e-09*size, 0.03617095574736595*size), (-0.07858961820602417*size, -2.295374557093055e-09*size, 0.05251204967498779*size), (-0.05251181498169899*size, -3.4352671818282943e-09*size, 0.07858975231647491*size), (-0.036170728504657745*size, -3.8170644423018985e-09*size, 0.08732425421476364*size), (-0.01843959279358387*size, -4.0521714872454595e-09*size, 0.09270287305116653*size), (-0.09402971714735031*size, -2.937612375575327e-09*size, 0.06720473617315292*size), (-0.08150212466716766*size, -3.513068946858766e-09*size, 0.08036965131759644*size), (-0.06872902065515518*size, -4.0997978345558295e-09*size, 0.09379243850708008*size), (0.11251477152109146*size, 8.06031352773573e-10*size, -0.018439847975969315*size), (0.11251477152109146*size, 3.801315519479033e-16*size, -8.696396491814085e-09*size), (0.018439611420035362*size, 4.918176532697771e-09*size, -0.11251476407051086*size), (0.09270283579826355*size, 8.06031352773573e-10*size, -0.018439847975969315*size), (0.08732416480779648*size, 1.5810828202234006e-09*size, -0.03617095947265625*size), (0.07858962565660477*size, 2.29537477913766e-09*size, -0.05251205340027809*size), (0.052511852234601974*size, 3.435267403872899e-09*size, -0.07858975976705551*size), (0.03617073595523834*size, 3.8170644423018985e-09*size, -0.08732425421476364*size), (0.018439611420035362*size, 4.0521714872454595e-09*size, -0.09270287305116653*size), (0.09402976930141449*size, 2.937614596021376e-09*size, -0.0672047883272171*size), (0.08150213211774826*size, 3.513068946858766e-09*size, -0.08036965131759644*size), (0.06872907280921936*size, 4.099800055001879e-09*size, -0.09379249066114426*size), (-0.1125146746635437*size, 8.06031352773573e-10*size, -0.018439847975969315*size), (-0.1125146746635437*size, 3.801315519479033e-16*size, -8.696396491814085e-09*size), (-0.01843959279358387*size, 4.918176532697771e-09*size, -0.11251476407051086*size), (1.078764189088588e-08*size, 4.918176532697771e-09*size, -0.11251476407051086*size), (-0.09270282834768295*size, 8.06031352773573e-10*size, -0.018439847975969315*size), (-0.0873241126537323*size, 1.5810828202234006e-09*size, -0.03617095947265625*size), (-0.07858961820602417*size, 2.29537477913766e-09*size, -0.05251205340027809*size), (-0.05251181498169899*size, 3.435267403872899e-09*size, -0.07858975976705551*size), (-0.036170728504657745*size, 3.8170644423018985e-09*size, -0.08732425421476364*size), (-0.01843959279358387*size, 4.0521714872454595e-09*size, -0.09270287305116653*size), (-0.09402971714735031*size, 2.937614596021376e-09*size, -0.0672047883272171*size), (-0.08150212466716766*size, 3.513068946858766e-09*size, -0.08036965131759644*size), (-0.06872902065515518*size, 4.099800055001879e-09*size, -0.09379249066114426*size), ]
- edges = [(0, 2), (0, 24), (7, 1), (13, 1), (3, 2), (4, 3), (6, 5), (7, 6), (9, 8), (10, 9), (10, 5), (4, 8), (11, 14), (11, 36), (19, 12), (13, 12), (15, 14), (16, 15), (18, 17), (19, 18), (21, 20), (22, 21), (22, 17), (16, 20), (23, 26), (23, 24), (31, 25), (38, 25), (27, 26), (28, 27), (30, 29), (31, 30), (33, 32), (34, 33), (34, 29), (28, 32), (35, 39), (35, 36), (44, 37), (38, 37), (40, 39), (41, 40), (43, 42), (44, 43), (46, 45), (47, 46), (47, 42), (41, 45), ]
- faces = []
- mesh = obj.data
- mesh.from_pydata(verts, edges, faces)
- mesh.update()
- mesh.update()
- return obj
- else:
- return None
+@widget_generator(register="gear")
+def create_gear_widget(geom, *, radius=0.5):
+ size = radius * 10
+ geom.verts = [(0.11251477152109146*size, -8.06030631128607e-10*size, 0.01843983121216297*size), (0.018439611420035362*size, -4.918176976786981e-09*size, 0.11251477152109146*size), (0.09270283579826355*size, -8.06030631128607e-10*size, 0.01843983121216297*size), (0.08732416480779648*size, -1.5810827092010982e-09*size, 0.03617095574736595*size), (0.07858962565660477*size, -2.295374557093055e-09*size, 0.05251204967498779*size), (0.052511852234601974*size, -3.4352671818282943e-09*size, 0.07858975231647491*size), (0.03617073595523834*size, -3.8170644423018985e-09*size, 0.08732425421476364*size), (0.018439611420035362*size, -4.0521714872454595e-09*size, 0.09270287305116653*size), (0.09402976930141449*size, -2.937612375575327e-09*size, 0.06720473617315292*size), (0.08150213211774826*size, -3.513068946858766e-09*size, 0.08036965131759644*size), (0.06872907280921936*size, -4.0997978345558295e-09*size, 0.09379243850708008*size), (-0.1125146746635437*size, -8.06030631128607e-10*size, 0.01843983121216297*size), (-0.01843959279358387*size, -4.918176976786981e-09*size, 0.11251477152109146*size), (1.078764189088588e-08*size, -4.918176976786981e-09*size, 0.11251477152109146*size), (-0.09270282834768295*size, -8.06030631128607e-10*size, 0.01843983121216297*size), (-0.0873241126537323*size, -1.5810827092010982e-09*size, 0.03617095574736595*size), (-0.07858961820602417*size, -2.295374557093055e-09*size, 0.05251204967498779*size), (-0.05251181498169899*size, -3.4352671818282943e-09*size, 0.07858975231647491*size), (-0.036170728504657745*size, -3.8170644423018985e-09*size, 0.08732425421476364*size), (-0.01843959279358387*size, -4.0521714872454595e-09*size, 0.09270287305116653*size), (-0.09402971714735031*size, -2.937612375575327e-09*size, 0.06720473617315292*size), (-0.08150212466716766*size, -3.513068946858766e-09*size, 0.08036965131759644*size), (-0.06872902065515518*size, -4.0997978345558295e-09*size, 0.09379243850708008*size), (0.11251477152109146*size, 8.06031352773573e-10*size, -0.018439847975969315*size), (0.11251477152109146*size, 3.801315519479033e-16*size, -8.696396491814085e-09*size), (0.018439611420035362*size, 4.918176532697771e-09*size, -0.11251476407051086*size), (0.09270283579826355*size, 8.06031352773573e-10*size, -0.018439847975969315*size), (0.08732416480779648*size, 1.5810828202234006e-09*size, -0.03617095947265625*size), (0.07858962565660477*size, 2.29537477913766e-09*size, -0.05251205340027809*size), (0.052511852234601974*size, 3.435267403872899e-09*size, -0.07858975976705551*size), (0.03617073595523834*size, 3.8170644423018985e-09*size, -0.08732425421476364*size), (0.018439611420035362*size, 4.0521714872454595e-09*size, -0.09270287305116653*size), (0.09402976930141449*size, 2.937614596021376e-09*size, -0.0672047883272171*size), (0.08150213211774826*size, 3.513068946858766e-09*size, -0.08036965131759644*size), (0.06872907280921936*size, 4.099800055001879e-09*size, -0.09379249066114426*size), (-0.1125146746635437*size, 8.06031352773573e-10*size, -0.018439847975969315*size), (-0.1125146746635437*size, 3.801315519479033e-16*size, -8.696396491814085e-09*size), (-0.01843959279358387*size, 4.918176532697771e-09*size, -0.11251476407051086*size), (1.078764189088588e-08*size, 4.918176532697771e-09*size, -0.11251476407051086*size), (-0.09270282834768295*size, 8.06031352773573e-10*size, -0.018439847975969315*size), (-0.0873241126537323*size, 1.5810828202234006e-09*size, -0.03617095947265625*size), (-0.07858961820602417*size, 2.29537477913766e-09*size, -0.05251205340027809*size), (-0.05251181498169899*size, 3.435267403872899e-09*size, -0.07858975976705551*size), (-0.036170728504657745*size, 3.8170644423018985e-09*size, -0.08732425421476364*size), (-0.01843959279358387*size, 4.0521714872454595e-09*size, -0.09270287305116653*size), (-0.09402971714735031*size, 2.937614596021376e-09*size, -0.0672047883272171*size), (-0.08150212466716766*size, 3.513068946858766e-09*size, -0.08036965131759644*size), (-0.06872902065515518*size, 4.099800055001879e-09*size, -0.09379249066114426*size), ]
+ geom.edges = [(0, 2), (0, 24), (7, 1), (13, 1), (3, 2), (4, 3), (6, 5), (7, 6), (9, 8), (10, 9), (10, 5), (4, 8), (11, 14), (11, 36), (19, 12), (13, 12), (15, 14), (16, 15), (18, 17), (19, 18), (21, 20), (22, 21), (22, 17), (16, 20), (23, 26), (23, 24), (31, 25), (38, 25), (27, 26), (28, 27), (30, 29), (31, 30), (33, 32), (34, 33), (34, 29), (28, 32), (35, 39), (35, 36), (44, 37), (38, 37), (40, 39), (41, 40), (43, 42), (44, 43), (46, 45), (47, 46), (47, 42), (41, 45), ]