Skip to content

Commit 9bbd678

Browse files
committed
fix: reverse tail
1 parent e5f7aed commit 9bbd678

File tree

1 file changed

+39
-29
lines changed

1 file changed

+39
-29
lines changed

rigs/experimental/bendy_tail.py

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,28 @@ def create_mch(self):
2828

2929
org_chain = self.get_chain_bones(self.base_bone)
3030

31-
if edit_bones[org_chain[-1]].children:
32-
bone_to_copy = edit_bones[org_chain[-1]].children[0].name
31+
if edit_bones[org_chain[0]].parent:
32+
bone_to_copy = edit_bones[org_chain[0]].parent.name
3333
else:
3434
bone_to_copy = self.orientation_bone
35+
3536
mch_rot_tail = make_mechanism_name('ROT-' + strip_org(self.base_bone))
3637
mch_rot_tail = copy_bone(self.obj, bone_to_copy, assign_name=mch_rot_tail)
3738
self.bones['tail_mch']['rot_tail_mch'] = mch_rot_tail
3839
main_chain = self.get_chain_bones(self.base_bone)
39-
put_bone(self.obj, mch_rot_tail, edit_bones[main_chain[-1]].tail)
40+
flip_bone(self.obj, mch_rot_tail)
41+
edit_bones[mch_rot_tail].parent = None
42+
put_bone(self.obj, mch_rot_tail, edit_bones[main_chain[0]].head)
43+
44+
def create_def(self):
45+
super().create_def()
46+
47+
chain = strip_org(self.base_bone)
48+
49+
for def_bone in self.bones['def'][chain]:
50+
flip_bone(self.obj, def_bone)
51+
52+
self.bones['def'][chain].reverse()
4053

4154
def create_controls(self):
4255

@@ -45,8 +58,6 @@ def create_controls(self):
4558

4659
super().create_controls()
4760

48-
edit_bones = self.obj.data.edit_bones
49-
5061
self.bones['tweaks'] = {}
5162
self.bones['tail_ctrl'] = {}
5263

@@ -58,30 +69,24 @@ def create_controls(self):
5869
for org_bone, ctrl in zip(orgs, ctrl_chain):
5970
edit_bones[ctrl].length = edit_bones[org_bone].length
6071
align_bone_y_axis(self.obj, ctrl, edit_bones[org_bone].y_axis)
61-
flip_bone(self.obj, ctrl)
6272
tweak_name = 'tweak_' + ctrl
6373
tweak_name = copy_bone(self.obj, org_bone, assign_name=tweak_name)
64-
flip_bone(self.obj, tweak_name)
65-
put_bone(self.obj, tweak_name, edit_bones[org_bone].head)
6674
edit_bones[tweak_name].length = edit_bones[self.orientation_bone].length * self.TWEAK_SCALE
6775
self.bones['tweaks'][chain].append(tweak_name)
6876

6977
tweak_name = 'tweak_' + ctrl_chain[-1]
7078
tweak_name = copy_bone(self.obj, orgs[-1], assign_name=tweak_name)
7179
edit_bones[tweak_name].parent = None
72-
flip_bone(self.obj, tweak_name)
7380
put_bone(self.obj, tweak_name, edit_bones[orgs[-1]].tail)
7481
edit_bones[tweak_name].length = edit_bones[self.orientation_bone].length * self.TWEAK_SCALE
7582
self.bones['tweaks'][chain].append(tweak_name)
7683

77-
ctrl_chain = self.bones['ctrl'][strip_org(self.base_bone)]
78-
flip_bone(self.obj, ctrl_chain[-1])
79-
edit_bones[ctrl_chain[-1]].head = edit_bones[orgs[-1]].tail
80-
edit_bones[ctrl_chain[-1]].tail = edit_bones[orgs[-1]].head
84+
edit_bones[ctrl_chain[-1]].head = edit_bones[orgs[0]].head
85+
edit_bones[ctrl_chain[-1]].tail = edit_bones[orgs[0]].tail
8186
tail_master = strip_org(self.base_bone) + '_master'
8287
edit_bones[ctrl_chain[-1]].name = tail_master
8388
self.bones['tail_ctrl']['tail_master'] = tail_master
84-
self.bones['ctrl'][strip_org(self.base_bone)][-1] = tail_master
89+
ctrl_chain[-1] = tail_master
8590

8691
def parent_bones(self):
8792

@@ -93,24 +98,26 @@ def parent_bones(self):
9398
ctrl_chain = self.bones['ctrl'][strip_org(self.base_bone)]
9499
tweak_chain = self.bones['tweaks'][strip_org(self.base_bone)]
95100
def_chain = self.bones['def'][strip_org(self.base_bone)]
96-
org_bones = self.bones['org']
97101

98-
edit_bones[tweak_chain[0]].parent = edit_bones[ctrl_chain[0]]
102+
edit_bones[tweak_chain[0]].parent = None
99103

100-
for ctrl, tweak in zip(ctrl_chain, tweak_chain[1:-1]):
104+
for ctrl, tweak in zip(ctrl_chain[1:-1], tweak_chain[1:-1]):
101105
edit_bones[tweak].use_connect = False
102106
edit_bones[tweak].parent = edit_bones[ctrl]
103107

108+
edit_bones[tweak_chain[-1]].use_connect = False
109+
edit_bones[tweak_chain[-1]].parent = edit_bones[ctrl_chain[-2]]
110+
104111
for i, def_bone in enumerate(def_chain[1:]):
105112
edit_bones[def_bone].use_connect = True
106113
edit_bones[def_bone].parent = edit_bones[def_chain[i]]
107114

108-
for i, ctrl in enumerate(ctrl_chain[0:-2]):
109-
edit_bones[ctrl].parent = edit_bones[ctrl_chain[i+1]]
115+
for i, ctrl in enumerate(ctrl_chain[1:-1]):
116+
edit_bones[ctrl].parent = edit_bones[ctrl_chain[i]]
110117

111-
edit_bones[ctrl_chain[-2]].parent = edit_bones[self.bones['tail_mch']['rot_tail_mch']]
118+
edit_bones[ctrl_chain[0]].parent = edit_bones[self.bones['tail_mch']['rot_tail_mch']]
112119

113-
edit_bones[self.bones['tail_mch']['rot_tail_mch']].parent = edit_bones[tweak_chain[-1]]
120+
edit_bones[self.bones['tail_mch']['rot_tail_mch']].parent = edit_bones[tweak_chain[0]]
114121

115122
def assign_layers(self):
116123

@@ -135,21 +142,24 @@ def make_constraints(self):
135142
ctrl_chain = self.bones['ctrl'][strip_org(self.base_bone)]
136143

137144
for i, def_bone in enumerate(def_chain):
138-
pose_bones[def_bone].constraints[0].subtarget = tweak_chain[i]
139-
pose_bones[def_bone].constraints[1].subtarget = tweak_chain[i+1]
140-
pose_bones[def_bone].constraints[2].subtarget = tweak_chain[i+1]
145+
pose_bones[def_bone].constraints[0].subtarget = tweak_chain[-i-1]
146+
pose_bones[def_bone].constraints[1].subtarget = tweak_chain[-i-2]
147+
pose_bones[def_bone].constraints[2].subtarget = tweak_chain[-i-2]
141148

142149
for i, ctrl in enumerate(ctrl_chain):
143150
if ctrl != ctrl_chain[-1]:
144151
owner = pose_bones[ctrl]
145-
subtarget = ctrl_chain[i+1]
152+
if i == 0:
153+
subtarget = ctrl_chain[-1]
154+
else:
155+
subtarget = ctrl_chain[i-1]
146156
make_constraints_from_string(owner, self.obj, subtarget, "CR1.0LLO")
147157
owner.constraints[-1].use_y = False
148158

149-
last_connected_org = self.get_chain_bones(self.base_bone)[-1]
150-
if pose_bones[last_connected_org].children:
159+
first_org = self.get_chain_bones(self.base_bone)[0]
160+
if pose_bones[first_org].parent:
151161
owner = pose_bones[self.bones['tail_mch']['rot_tail_mch']]
152-
subtarget = pose_bones[last_connected_org].children[0].name
162+
subtarget = pose_bones[first_org].parent.name
153163
make_constraints_from_string(owner, self.obj, subtarget, "CR1.0WW")
154164

155165
def create_widgets(self):
@@ -168,7 +178,7 @@ def create_widgets(self):
168178
create_sphere_widget(self.obj, bone)
169179

170180
pose_bones[ctrl_chain[-1]].custom_shape_transform = \
171-
pose_bones[self.bones['tweaks'][strip_org(self.base_bone)][0]]
181+
pose_bones[self.bones['tweaks'][strip_org(self.base_bone)][-1]]
172182

173183
super().create_widgets()
174184

0 commit comments

Comments
 (0)