""" Armature -> SWBF skeleton mapping functions """ import bpy import math from typing import List, Set, Dict, Tuple from .msh_scene import Scene from .msh_model import * from .msh_model_utilities import * from .crc import * def get_bone_world_matrix(armature: bpy.types.Object, bone_name: str) -> Matrix: if bone_name in armature.data.bones: return armature.matrix_world @ armature.data.bones[bone_name].matrix_local else: return None '''Returns all bones that should be marked as BONE''' def get_real_BONES(armature: bpy.types.Armature) -> Set[str]: # First priority, add the names of the skeleton preserved on import skel_props = armature.data.swbf_msh_skel # Second, add all keyed bones action = armature.animation_data.action if armature.animation_data else None # Third, just add all bones in armature # Set of bones to include real_bones : Set[str] = set() if len(skel_props) > 0: for bone in skel_props: real_bones.add(bone.name) if action: for group in armature.animation_data.action.groups: real_bones.add(group.name) if len(skel_props) == 0 and action is None: for bone in armature.data.bones: real_bones.add(bone.name) return real_bones