[Bf-extensions-cvs] [8c035351] master: Rigify: implement a deformed circle widget for main spine controls.
Alexander Gavrilov
noreply at git.blender.org
Sun Sep 29 17:30:32 CEST 2019
Commit: 8c0353518e1dfef4046f1be1f8b2df6e9b3fd0af
Author: Alexander Gavrilov
Date: Sun Sep 29 16:42:54 2019 +0300
Branches: master
https://developer.blender.org/rBA8c0353518e1dfef4046f1be1f8b2df6e9b3fd0af
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.
===================================================================
M rigify/rigs/limbs/arm.py
M rigify/rigs/limbs/leg.py
M rigify/rigs/limbs/limb_rigs.py
M rigify/rigs/limbs/paw.py
M rigify/rigs/spines/basic_spine.py
M rigify/rigs/spines/spine_rigs.py
M rigify/rigs/spines/super_head.py
M rigify/utils/widgets.py
M rigify/utils/widgets_basic.py
===================================================================
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.788 [...]
- 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] *
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list