11import bpy
2+ import re
23from ...utils import copy_bone , flip_bone
34from ...utils import strip_org , make_deformer_name , connected_children_names , make_mechanism_name
45from ...utils import create_circle_widget , create_widget , create_sphere_widget
@@ -110,12 +111,12 @@ def generate(self):
110111 org_name = self .org_bones [0 ]
111112 temp_name = strip_org (self .org_bones [0 ])
112113
113- if temp_name [ - 2 :] == '.L' or temp_name [ - 2 :] == '.R' :
114- suffix = temp_name [ - 2 :]
115- master_name = temp_name [: - 2 ] + "_master" + suffix
116- else :
117- master_name = temp_name + "_master"
118- master_name = copy_bone (self .obj , org_name , master_name )
114+ # Compute master bone name: inherit .LR suffix, but strip trailing digits
115+ name_parts = re . match ( r'^(.*?)(?:([._-])?\d+)?((?:[._-][LlRr])?)(?:\.\d+)?$' , temp_name )
116+ name_base , name_sep , name_suffix = name_parts . groups ()
117+ name_base += name_sep if name_sep else '_'
118+
119+ master_name = copy_bone (self .obj , org_name , name_base + 'master' + name_suffix )
119120 ctrl_bone_master = eb [master_name ]
120121
121122 # Parenting bug fix ??
@@ -158,7 +159,7 @@ def generate(self):
158159 mch_drv_chain += [mch_bone_drv ]
159160
160161 # Creating tip control bone
161- tip_name = copy_bone (self .obj , org_bones [- 1 ], temp_name )
162+ tip_name = copy_bone (self .obj , org_bones [- 1 ], name_base + 'tip' + name_suffix )
162163 ctrl_bone_tip = eb [tip_name ]
163164 flip_bone (self .obj , tip_name )
164165 ctrl_bone_tip .length /= 2
@@ -167,7 +168,7 @@ def generate(self):
167168
168169 # Create IK control bone and follow socket
169170 if self .params .generate_ik :
170- ik_ctrl_name = copy_bone (self .obj , tip_name , get_bone_name ( org_name , 'ctrl' , 'ik' ) )
171+ ik_ctrl_name = copy_bone (self .obj , tip_name , name_base + 'ik' + name_suffix )
171172 ik_ctrl_bone = eb [ik_ctrl_name ]
172173 ik_ctrl_bone .tail = ik_ctrl_bone .head + Vector ((0 , ik_ctrl_bone .length * 1.5 , 0 ))
173174 ik_ctrl_bone .roll = 0
0 commit comments