diff --git a/rigify/rigs/limbs/arm.py b/rigify/rigs/limbs/arm.py index 4e9cf299e267ad902ad942c9da67f1bdc1580e6c..98a3c50f4411f14ff04621363ae755cb6d65c54c 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 098d303aa524bdaafef809456b68d388cdfcf3f6..dbdd20cba05e3201a8722c162388848019e8fe7a 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 4799e87d3a291a889b4717277d6358a91dc8f54a..30d475bbf928a88b2856b12e657fbdcbfd0b8861 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 fa590b66f3e77d7d6e8a9ff38506b2e417aaa734..f8cb1f9fe98992bb0d6aee16eeea78c117ea5fad 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 d90e4c8d92650158e24469270906e9685f846209..269889cf0691c748143ee4da2a1f89a566a0d586 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 47a72287f5d2f8cc80fc4e59759f31a462f994a7..34eefbf55f1fc47b8819bf9a13454c8c12b1fb8d 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 de25113a9a3572df21930d13bf7fa242eb7f1ed2..422f3ad094511d664a7c06c4e5aa491d48a70ca4 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 037d4118e58d69f570fd4728e2da72cf372f00ab..f7e796b606ff51bccdd8e9cf0992abd54fc56897 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 a40806adec7533bb84b4a180d950a6197aa7dc48..2848e5bfb20366d624e2fc6a588d49ad8d093937 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: