@@ -291,7 +291,10 @@ def get_bone_with_most_influence(self, sprite):
291291 if v_group .name in self .armature .data .bones :
292292 total_weight = 0
293293 for i ,vert in enumerate (sprite .data .vertices ):
294- total_weight += v_group .weight (i )
294+ try :
295+ total_weight += v_group .weight (vert .index )
296+ except :
297+ pass
295298 if total_weight > max_weight :
296299 max_weight = float (total_weight )
297300 bone = self .armature .data .bones [v_group .name ]
@@ -443,16 +446,21 @@ def get_skin_slot(self,sprite,armature,scale,slot_data=None):
443446 ### write sprite bone data
444447 bone = get_bone_with_most_influence (self , sprite )
445448 sprite_center_pos = get_mesh_center (sprite , 1.0 )
446-
447- bone_pos = get_bone_matrix (self .armature , bone , relative = False ).to_translation ()
448- p_bone = self .armature .pose .bones [bone .name ]
449- sprite_pos_final = (bone .matrix_local .inverted () * sprite_center_pos ) * scale
449+ if bone != None :
450+ bone_pos = get_bone_matrix (self .armature , bone , relative = False ).to_translation ()
451+ p_bone = self .armature .pose .bones [bone .name ]
452+ sprite_pos_final = (bone .matrix_local .inverted () * sprite_center_pos ) * scale
453+ angle = get_bone_angle (armature , bone , relative = False )
454+ else :
455+ sprite_pos_final = sprite_center_pos * scale
456+ sprite_pos_final = sprite_pos_final .zxy
457+ angle = 0
450458
451459 display_data ["transform" ] = OrderedDict ()
452460 display_data ["transform" ]["x" ] = round (sprite_pos_final .y ,3 )
453461 display_data ["transform" ]["y" ] = round (- sprite_pos_final .x ,3 )
454462
455- angle = get_bone_angle ( armature , bone , relative = False )
463+
456464 if angle != 0 :
457465 display_data ["transform" ]["skX" ] = - round (angle , 2 )
458466 display_data ["transform" ]["skY" ] = - round (angle , 2 )
0 commit comments