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
path: root/rigify
diff options
context:
space:
mode:
authorAlexander Gavrilov <angavrilov@gmail.com>2019-09-29 16:42:54 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2019-09-29 17:48:59 +0300
commit8c0353518e1dfef4046f1be1f8b2df6e9b3fd0af (patch)
tree28186dee2b417f3b69382b9c9eae2a3a6ff994b6 /rigify
parent704ace1b48181180b70a5b4ed0039420c4acb4db (diff)
Rigify: implement a deformed circle widget for main spine controls.
The idea is inspired by similar shapes in other rigs like BlenRig. The actual used shape is simply a circle deformed into a parabolic shape when viewed from the side, added to create_circle_widget. Using the new shape for the main controls allows adding extra FK controls to the spine without visual confusion. As an aside, fix a minor issue in handling bone_transform_name, and remove redundant bone_transform_name=None parameters.
Diffstat (limited to 'rigify')
-rw-r--r--rigify/rigs/limbs/arm.py2
-rw-r--r--rigify/rigs/limbs/leg.py4
-rw-r--r--rigify/rigs/limbs/limb_rigs.py4
-rw-r--r--rigify/rigs/limbs/paw.py4
-rw-r--r--rigify/rigs/spines/basic_spine.py4
-rw-r--r--rigify/rigs/spines/spine_rigs.py1
-rw-r--r--rigify/rigs/spines/super_head.py3
-rw-r--r--rigify/utils/widgets.py13
-rw-r--r--rigify/utils/widgets_basic.py6
9 files changed, 19 insertions, 22 deletions
diff --git a/rigify/rigs/limbs/arm.py b/rigify/rigs/limbs/arm.py
index 4e9cf299..98a3c50f 100644
--- a/rigify/rigs/limbs/arm.py
+++ b/rigify/rigs/limbs/arm.py
@@ -65,7 +65,7 @@ class Rig(BaseLimbRig):
pbuilder.register_parent(self, self.bones.org.main[2], exclude_self=True)
def make_ik_ctrl_widget(self, ctrl):
- create_hand_widget(self.obj, ctrl, bone_transform_name=None)
+ create_hand_widget(self.obj, ctrl)
####################################################
# Settings
diff --git a/rigify/rigs/limbs/leg.py b/rigify/rigs/limbs/leg.py
index 098d303a..dbdd20cb 100644
--- a/rigify/rigs/limbs/leg.py
+++ b/rigify/rigs/limbs/leg.py
@@ -127,7 +127,7 @@ class Rig(BaseLimbRig):
pbuilder.register_parent(self, self.bones.org.main[2], exclude_self=True)
def make_ik_ctrl_widget(self, ctrl):
- create_foot_widget(self.obj, ctrl, bone_transform_name=None)
+ create_foot_widget(self.obj, ctrl)
####################################################
@@ -159,7 +159,7 @@ class Rig(BaseLimbRig):
@stage.generate_widgets
def generate_heel_control_widget(self):
- create_ballsocket_widget(self.obj, self.bones.ctrl.heel, bone_transform_name=None)
+ create_ballsocket_widget(self.obj, self.bones.ctrl.heel)
####################################################
diff --git a/rigify/rigs/limbs/limb_rigs.py b/rigify/rigs/limbs/limb_rigs.py
index 4799e87d..30d475bb 100644
--- a/rigify/rigs/limbs/limb_rigs.py
+++ b/rigify/rigs/limbs/limb_rigs.py
@@ -407,10 +407,10 @@ class BaseLimbRig(BaseRig):
else:
roll = pi/2
- create_ikarrow_widget(self.obj, ctrl, bone_transform_name=None, roll=roll)
+ create_ikarrow_widget(self.obj, ctrl, roll=roll)
def make_ik_pole_widget(self, ctrl):
- create_sphere_widget(self.obj, ctrl, bone_transform_name=None)
+ create_sphere_widget(self.obj, ctrl)
def make_ik_ctrl_widget(self, ctrl):
raise NotImplementedError()
diff --git a/rigify/rigs/limbs/paw.py b/rigify/rigs/limbs/paw.py
index fa590b66..f8cb1f9f 100644
--- a/rigify/rigs/limbs/paw.py
+++ b/rigify/rigs/limbs/paw.py
@@ -110,7 +110,7 @@ class Rig(BaseLimbRig):
pbuilder.register_parent(self, self.bones.org.main[3], exclude_self=True)
def make_ik_ctrl_widget(self, ctrl):
- create_foot_widget(self.obj, ctrl, bone_transform_name=None)
+ create_foot_widget(self.obj, ctrl)
####################################################
@@ -136,7 +136,7 @@ class Rig(BaseLimbRig):
@stage.generate_widgets
def generate_heel_control_widget(self):
- create_ballsocket_widget(self.obj, self.bones.ctrl.heel, bone_transform_name=None)
+ create_ballsocket_widget(self.obj, self.bones.ctrl.heel)
####################################################
diff --git a/rigify/rigs/spines/basic_spine.py b/rigify/rigs/spines/basic_spine.py
index d90e4c8d..269889cf 100644
--- a/rigify/rigs/spines/basic_spine.py
+++ b/rigify/rigs/spines/basic_spine.py
@@ -125,9 +125,9 @@ class Rig(BaseSpineRig):
create_circle_widget(
self.obj, ctrl,
radius=1.0,
- head_tail=0.75,
+ head_tail=0.0,
+ head_tail_x=1.0,
with_line=False,
- bone_transform_name=wgt_mch
)
####################################################
diff --git a/rigify/rigs/spines/spine_rigs.py b/rigify/rigs/spines/spine_rigs.py
index 47a72287..34eefbf5 100644
--- a/rigify/rigs/spines/spine_rigs.py
+++ b/rigify/rigs/spines/spine_rigs.py
@@ -79,7 +79,6 @@ class BaseSpineRig(TweakChainRig):
create_cube_widget(
self.obj, self.bones.ctrl.master,
radius=0.5,
- bone_transform_name=None
)
####################################################
diff --git a/rigify/rigs/spines/super_head.py b/rigify/rigs/spines/super_head.py
index de25113a..422f3ad0 100644
--- a/rigify/rigs/spines/super_head.py
+++ b/rigify/rigs/spines/super_head.py
@@ -144,7 +144,6 @@ class Rig(BaseHeadTailRig):
self.obj, ctrl,
radius=radius,
head_tail=0.5,
- bone_transform_name=None
)
def make_neck_bend_widget(self, ctrl):
@@ -154,7 +153,6 @@ class Rig(BaseHeadTailRig):
self.obj, ctrl,
radius=radius/2,
head_tail=0.0,
- bone_transform_name=None
)
def make_head_widget(self, ctrl):
@@ -169,7 +167,6 @@ class Rig(BaseHeadTailRig):
radius = 0.5,
head_tail = head_tail,
with_line = False,
- bone_transform_name = None
)
####################################################
diff --git a/rigify/utils/widgets.py b/rigify/utils/widgets.py
index 037d4118..f7e796b6 100644
--- a/rigify/utils/widgets.py
+++ b/rigify/utils/widgets.py
@@ -33,7 +33,7 @@ WGT_PREFIX = "WGT-" # Prefix for widget objects
#=============================================
-def obj_to_bone(obj, rig, bone_name):
+def obj_to_bone(obj, rig, bone_name, bone_transform_name=None):
""" Places an object at the location/rotation/scale of the given bone.
"""
if bpy.context.mode == 'EDIT_ARMATURE':
@@ -45,7 +45,9 @@ def obj_to_bone(obj, rig, bone_name):
if bone.use_custom_shape_bone_size:
scale *= bone.length
- if bone.custom_shape_transform:
+ if bone_transform_name is not None:
+ bone = rig.pose.bones[bone_transform_name]
+ elif bone.custom_shape_transform:
bone = bone.custom_shape_transform
mat = rig.matrix_world @ bone.bone.matrix_local
@@ -63,9 +65,6 @@ def obj_to_bone(obj, rig, bone_name):
def create_widget(rig, bone_name, bone_transform_name=None):
""" Creates an empty widget object for a bone, and returns the object.
"""
- if bone_transform_name is None:
- bone_transform_name = bone_name
-
obj_name = WGT_PREFIX + rig.name + '_' + bone_name
scene = bpy.context.scene
collection = ensure_widget_collection(bpy.context)
@@ -74,7 +73,7 @@ def create_widget(rig, bone_name, bone_transform_name=None):
if obj_name in scene.objects:
# Move object to bone position, in case it changed
obj = scene.objects[obj_name]
- obj_to_bone(obj, rig, bone_transform_name)
+ obj_to_bone(obj, rig, bone_name, bone_transform_name)
return None
else:
@@ -91,7 +90,7 @@ def create_widget(rig, bone_name, bone_transform_name=None):
collection.objects.link(obj)
# Move object to bone position and set layers
- obj_to_bone(obj, rig, bone_transform_name)
+ obj_to_bone(obj, rig, bone_name, bone_transform_name)
wgts_group_name = 'WGTS_' + rig.name
if wgts_group_name in bpy.data.objects.keys():
obj.parent = bpy.data.objects[wgts_group_name]
diff --git a/rigify/utils/widgets_basic.py b/rigify/utils/widgets_basic.py
index a40806ad..2848e5bf 100644
--- a/rigify/utils/widgets_basic.py
+++ b/rigify/utils/widgets_basic.py
@@ -33,15 +33,17 @@ def create_line_widget(rig, bone_name, bone_transform_name=None):
mesh.update()
-def create_circle_widget(rig, bone_name, radius=1.0, head_tail=0.0, with_line=False, bone_transform_name=None):
+def create_circle_widget(rig, bone_name, radius=1.0, head_tail=0.0, head_tail_x=None, with_line=False, bone_transform_name=None):
""" Creates a basic circle widget, a circle around the y-axis.
radius: the radius of the circle
head_tail: where along the length of the bone the circle is (0.0=head, 1.0=tail)
+ head_tail_x: if not None, specifies a different value along the X axis to create a deformed circle
"""
obj = create_widget(rig, bone_name, bone_transform_name)
if obj != None:
v = [(0.7071068286895752, 2.980232238769531e-07, -0.7071065306663513), (0.8314696550369263, 2.980232238769531e-07, -0.5555699467658997), (0.9238795042037964, 2.682209014892578e-07, -0.3826831877231598), (0.9807852506637573, 2.5331974029541016e-07, -0.19509011507034302), (1.0, 2.365559055306221e-07, 1.6105803979371558e-07), (0.9807853698730469, 2.2351741790771484e-07, 0.19509044289588928), (0.9238796234130859, 2.086162567138672e-07, 0.38268351554870605), (0.8314696550369263, 1.7881393432617188e-07, 0.5555704236030579), (0.7071068286895752, 1.7881393432617188e-07, 0.7071070075035095), (0.5555702447891235, 1.7881393432617188e-07, 0.8314698934555054), (0.38268327713012695, 1.7881393432617188e-07, 0.923879861831665), (0.19509008526802063, 1.7881393432617188e-07, 0.9807855486869812), (-3.2584136988589307e-07, 1.1920928955078125e-07, 1.000000238418579), (-0.19509072601795197, 1.7881393432617188e-07, 0.9807854294776917), (-0.3826838731765747, 1.7881393432617188e-07, 0.9238795638084412), (-0.5555707216262817, 1.7881393432617188e-07, 0.8314695358276367), (-0.7071071863174438, 1.7881393432617188e-07, 0.7071065902709961), (-0.8314700126647949, 1.7881393432617188e-07, 0.5555698871612549), (-0.923879861831665, 2.086162567138672e-07, 0.3826829195022583), (-0.9807853698730469, 2.2351741790771484e-07, 0.1950896978378296), (-1.0, 2.365559907957504e-07, -7.290432222362142e-07), (-0.9807850122451782, 2.5331974029541016e-07, -0.195091113448143), (-0.9238790273666382, 2.682209014892578e-07, -0.38268423080444336), (-0.831468939781189, 2.980232238769531e-07, -0.5555710196495056), (-0.7071058750152588, 2.980232238769531e-07, -0.707107424736023), (-0.555569052696228, 2.980232238769531e-07, -0.8314701318740845), (-0.38268208503723145, 2.980232238769531e-07, -0.923879861831665), (-0.19508881866931915, 2.980232238769531e-07, -0.9807853102684021), (1.6053570561780361e-06, 2.980232238769531e-07, -0.9999997615814209), (0.19509197771549225, 2.980232238769531e-07, -0.9807847142219543), (0.3826850652694702, 2.980232238769531e-07, -0.9238786101341248), (0.5555717945098877, 2.980232238769531e-07, -0.8314683437347412)]
- verts = [(a[0] * radius, head_tail, a[2] * radius) for a in v]
+ delta = (head_tail_x - head_tail) if head_tail_x is not None else 0
+ verts = [(a[0] * radius, head_tail + delta * a[0] * a[0], a[2] * radius) for a in v]
if with_line:
edges = [(28, 12), (0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (15, 16), (16, 17), (17, 18), (18, 19), (19, 20), (20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 26), (26, 27), (27, 28), (28, 29), (29, 30), (30, 31), (0, 31)]
else: