armature.py 文件源码

python
阅读 17 收藏 0 点赞 0 评论 0

项目:bds-tools 作者: rykerp 项目源码 文件源码
def insert_bone (si_bone, armdat):
    """Create bone and insert into armature.
    Uses:
      node.id as as bone name (these are used in morph formulas)
      node_instance.id as custom property bdst_instance_id (these are used in poses / scene.animations)
    """

    bname = si_bone.node.id
    b_info = bone_info(bone=si_bone, bname=bname)
    b_bone = armdat.edit_bones.new(name=bname)
    b_bone.bdst_instance_id = si_bone.id
    orient = si_bone.orientation
    b_bone.use_deform = True
    b_bone.use_inherit_scale = si_bone.inherits_scale

    center_point = si_bone.center_point
    end_point = si_bone.end_point
    if center_point == end_point:
        end_point = (end_point[0], end_point[1], end_point[2] + 0.3)

    len = (mathutils.Vector(center_point) - mathutils.Vector(end_point)).length
    b_bone.head = (0,0,0)
    rot_order = si_bone.rotation_order
    if si_bone.rotation_order[0] == "X":
        sign = 1 if center_point[0] < end_point[0] else -1
        b_bone.bdst_sign = "+X" if sign == 1 else "-X"
        b_info.rotation_order = swap_rot(rot_order, {"X": "Y", "Y": "X", "Z": "Z"})
        b_bone.tail = (sign * len, 0, 0)
    elif si_bone.rotation_order[0] == "Y":
        sign = 1 if center_point[1] < end_point[1] else -1
        b_bone.bdst_sign = "+Y" if sign == 1 else "-Y"
        b_info.rotation_order = swap_rot(rot_order, {"X": "X", "Y": "Y", "Z": "Z"})
        b_bone.tail = (0, sign * len, 0)
    else:
        sign = 1 if center_point[2] < end_point[2] else -1
        b_bone.bdst_sign = "+Z" if sign == 1 else "-Z"
        b_info.rotation_order = swap_rot(rot_order, {"X": "X", "Y": "Z", "Z": "Y"})
        b_bone.tail = (0, 0, sign * len)
    b_bone.roll = 0

    rot = mathutils.Euler(((orient[0]), (-orient[1]), (orient[2])), "XZY").to_matrix().to_4x4()
    b_bone.transform(rot)
    b_bone.translate(mathutils.Vector(center_point))

    b_bone.bdst_center_point = center_point
    b_bone.bdst_end_point = end_point
    b_bone.bdst_orientation = orient

    b_info.roots.append(bname)
    b_info.leaf = bname
    return [b_info]
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号