Hy, I’m trying to import an armature based on a json file. The input data is all correct, however I seem to experience a problem when setting the parent of a new bone. Blender just crashes on this line. Also, I’m trying to set the bbone width which is also not working. Any suggestions?
def convertBone(boneData,armature,parent):
# use correct axis alignment
bpy.ops.object.mode_set(mode='EDIT',toggle=True)
bpy.ops.armature.bone_primitive_add(name=boneData['name'])
edit_bone = armature.edit_bones[boneData["name"]]
edit_bone.select = True
edit_bone.parent = parent
edit_bone.use_connect = True
bpy.ops.object.mode_set(mode='EDIT',toggle=True)
# TODO: set orientation of the bone
bone = armature.bones[boneData['name']]
if (boneData.get("length")):
setLength(bone,boneData["length"])
if (boneData.get("width")):
bpy.ops.object.mode_set(mode='EDIT',toggle=True)
edit_bone.bbone_x = boneData["width"]["x"]
edit_bone.bbone_z = boneData["width"]["z"]
bpy.ops.object.mode_set(mode='EDIT',toggle=True)
for child in boneData["children"]:
convertBone(child,armature,edit_bone)
if (data['version'] != '1.0'):
raise Exception('This version of csf files is not supported.')
bpy.context.scene.cursor_location = (0.0, 0.0, 0.0)
if (bpy.context.mode != 'OBJECT'):
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.armature_add()
armature = bpy.data.armatures[-1]
pose = bpy.data.objects[armature.name].pose
root = [k for k in pose.bones if k.parent == None][0]
# clean armature
bpy.ops.object.mode_set(mode='EDIT',toggle=True)
armature.edit_bones[root.name].select = True
bpy.ops.armature.delete()
bpy.ops.object.mode_set(mode='EDIT',toggle=True)
convertBone(data["bones"],armature,None)