Skip to content

Commit b331684

Browse files
committed
DragonBones Exporter
- Fixing issue when Sprite has no Bone Parent
1 parent 07bdca3 commit b331684

1 file changed

Lines changed: 14 additions & 6 deletions

File tree

Blender/coa_tools/operators/dragonbones_exporter/export_dragonbones.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)