# {py:mod}`simvx.core.skeleton` ```{py:module} simvx.core.skeleton ``` ```{autodoc2-docstring} simvx.core.skeleton :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`Bone ` - ```{autodoc2-docstring} simvx.core.skeleton.Bone :summary: ``` * - {py:obj}`Skeleton ` - ```{autodoc2-docstring} simvx.core.skeleton.Skeleton :summary: ``` * - {py:obj}`SkeletonProfile ` - ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`log ` - ```{autodoc2-docstring} simvx.core.skeleton.log :summary: ``` * - {py:obj}`__all__ ` - ```{autodoc2-docstring} simvx.core.skeleton.__all__ :summary: ``` * - {py:obj}`PROFILE_HUMANOID ` - ```{autodoc2-docstring} simvx.core.skeleton.PROFILE_HUMANOID :summary: ``` ```` ### API ````{py:data} log :canonical: simvx.core.skeleton.log :value: > 'getLogger(...)' ```{autodoc2-docstring} simvx.core.skeleton.log ``` ```` ````{py:data} __all__ :canonical: simvx.core.skeleton.__all__ :value: > ['Bone', 'Skeleton', 'SkeletonProfile', 'PROFILE_HUMANOID'] ```{autodoc2-docstring} simvx.core.skeleton.__all__ ``` ```` `````{py:class} Bone :canonical: simvx.core.skeleton.Bone ```{autodoc2-docstring} simvx.core.skeleton.Bone ``` ````{py:attribute} name :canonical: simvx.core.skeleton.Bone.name :type: str :value: ```{autodoc2-docstring} simvx.core.skeleton.Bone.name ``` ```` ````{py:attribute} parent_index :canonical: simvx.core.skeleton.Bone.parent_index :type: int :value: > None ```{autodoc2-docstring} simvx.core.skeleton.Bone.parent_index ``` ```` ````{py:attribute} inverse_bind_matrix :canonical: simvx.core.skeleton.Bone.inverse_bind_matrix :type: numpy.ndarray :value: > 'field(...)' ```{autodoc2-docstring} simvx.core.skeleton.Bone.inverse_bind_matrix ``` ```` ````{py:attribute} local_transform :canonical: simvx.core.skeleton.Bone.local_transform :type: numpy.ndarray :value: > 'field(...)' ```{autodoc2-docstring} simvx.core.skeleton.Bone.local_transform ``` ```` ````` `````{py:class} Skeleton(bones: list[simvx.core.skeleton.Bone] | None = None, **kwargs) :canonical: simvx.core.skeleton.Skeleton Bases: {py:obj}`simvx.core.nodes_3d.node3d.Node3D` ```{autodoc2-docstring} simvx.core.skeleton.Skeleton ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.__init__ ``` ````{py:property} bone_count :canonical: simvx.core.skeleton.Skeleton.bone_count :type: int ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.bone_count ``` ```` ````{py:property} joint_matrices :canonical: simvx.core.skeleton.Skeleton.joint_matrices :type: numpy.ndarray ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.joint_matrices ``` ```` ````{py:method} set_bone_pose(bone_index: int, transform: numpy.ndarray) -> None :canonical: simvx.core.skeleton.Skeleton.set_bone_pose ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.set_bone_pose ``` ```` ````{py:method} get_bone_pose(bone_index: int) -> numpy.ndarray :canonical: simvx.core.skeleton.Skeleton.get_bone_pose ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.get_bone_pose ``` ```` ````{py:method} clear_bone_pose(bone_index: int) -> None :canonical: simvx.core.skeleton.Skeleton.clear_bone_pose ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.clear_bone_pose ``` ```` ````{py:method} clear_all_bone_poses() -> None :canonical: simvx.core.skeleton.Skeleton.clear_all_bone_poses ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.clear_all_bone_poses ``` ```` ````{py:method} get_bone_global_transform(bone_index: int) -> numpy.ndarray :canonical: simvx.core.skeleton.Skeleton.get_bone_global_transform ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.get_bone_global_transform ``` ```` ````{py:method} compute_pose(bone_transforms: dict[int, numpy.ndarray] | None = None) -> None :canonical: simvx.core.skeleton.Skeleton.compute_pose ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.compute_pose ``` ```` ````{py:method} process(dt: float) -> None :canonical: simvx.core.skeleton.Skeleton.process ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.process ``` ```` ````{py:method} find_bone(name: str) -> int :canonical: simvx.core.skeleton.Skeleton.find_bone ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.find_bone ``` ```` ````{py:method} add_bone(bone: simvx.core.skeleton.Bone) -> int :canonical: simvx.core.skeleton.Skeleton.add_bone ```{autodoc2-docstring} simvx.core.skeleton.Skeleton.add_bone ``` ```` ````{py:attribute} render_layer :canonical: simvx.core.skeleton.Skeleton.render_layer :value: > 'Property(...)' ```` ````{py:property} position :canonical: simvx.core.skeleton.Skeleton.position ```` ````{py:property} rotation :canonical: simvx.core.skeleton.Skeleton.rotation :type: simvx.core.math.types.Quat ```` ````{py:property} scale :canonical: simvx.core.skeleton.Skeleton.scale ```` ````{py:property} rotation_degrees :canonical: simvx.core.skeleton.Skeleton.rotation_degrees :type: simvx.core.math.types.Vec3 ```` ````{py:property} world_position :canonical: simvx.core.skeleton.Skeleton.world_position :type: simvx.core.math.types.Vec3 ```` ````{py:property} world_rotation :canonical: simvx.core.skeleton.Skeleton.world_rotation :type: simvx.core.math.types.Quat ```` ````{py:property} world_scale :canonical: simvx.core.skeleton.Skeleton.world_scale :type: simvx.core.math.types.Vec3 ```` ````{py:property} forward :canonical: simvx.core.skeleton.Skeleton.forward :type: simvx.core.math.types.Vec3 ```` ````{py:property} right :canonical: simvx.core.skeleton.Skeleton.right :type: simvx.core.math.types.Vec3 ```` ````{py:property} up :canonical: simvx.core.skeleton.Skeleton.up :type: simvx.core.math.types.Vec3 ```` ````{py:method} translate(offset: tuple[float, float, float] | numpy.ndarray) :canonical: simvx.core.skeleton.Skeleton.translate ```` ````{py:method} translate_global(offset: tuple[float, float, float] | numpy.ndarray) :canonical: simvx.core.skeleton.Skeleton.translate_global ```` ````{py:method} rotate(axis: tuple[float, float, float] | numpy.ndarray, angle: float) :canonical: simvx.core.skeleton.Skeleton.rotate ```` ````{py:method} rotate_x(angle: float) :canonical: simvx.core.skeleton.Skeleton.rotate_x ```` ````{py:method} rotate_y(angle: float) :canonical: simvx.core.skeleton.Skeleton.rotate_y ```` ````{py:method} rotate_z(angle: float) :canonical: simvx.core.skeleton.Skeleton.rotate_z ```` ````{py:method} look_at(target: tuple[float, float, float] | numpy.ndarray, up=None) :canonical: simvx.core.skeleton.Skeleton.look_at ```` ````{py:method} set_render_layer(index: int, enabled: bool = True) -> None :canonical: simvx.core.skeleton.Skeleton.set_render_layer ```` ````{py:method} is_on_render_layer(index: int) -> bool :canonical: simvx.core.skeleton.Skeleton.is_on_render_layer ```` ````{py:method} wrap_bounds(bounds: tuple[float, float, float] | numpy.ndarray, margin: float = 1.0) :canonical: simvx.core.skeleton.Skeleton.wrap_bounds ```` ````{py:attribute} strict_errors :canonical: simvx.core.skeleton.Skeleton.strict_errors :type: typing.ClassVar[bool] :value: > True ```` ````{py:attribute} script_error_raised :canonical: simvx.core.skeleton.Skeleton.script_error_raised :value: > 'Signal(...)' ```` ````{py:method} __init_subclass__(**kwargs) :canonical: simvx.core.skeleton.Skeleton.__init_subclass__ :classmethod: ```` ````{py:property} name :canonical: simvx.core.skeleton.Skeleton.name :type: str ```` ````{py:property} process_mode :canonical: simvx.core.skeleton.Skeleton.process_mode :type: simvx.core.descriptors.ProcessMode ```` ````{py:method} reset_error() -> None :canonical: simvx.core.skeleton.Skeleton.reset_error ```` ````{py:method} add_child(node: simvx.core.node.Node) -> simvx.core.node.Node :canonical: simvx.core.skeleton.Skeleton.add_child ```` ````{py:method} remove_child(node: simvx.core.node.Node) :canonical: simvx.core.skeleton.Skeleton.remove_child ```` ````{py:method} reparent(new_parent: simvx.core.node.Node) :canonical: simvx.core.skeleton.Skeleton.reparent ```` ````{py:method} get_node(path: str) -> simvx.core.node.Node :canonical: simvx.core.skeleton.Skeleton.get_node ```` ````{py:method} find_child(name: str, recursive: bool = False) -> simvx.core.node.Node | None :canonical: simvx.core.skeleton.Skeleton.find_child ```` ````{py:method} find(node_type: type, recursive: bool = True) -> simvx.core.node.Node | None :canonical: simvx.core.skeleton.Skeleton.find ```` ````{py:method} find_all(node_type: type, recursive: bool = True) -> list :canonical: simvx.core.skeleton.Skeleton.find_all ```` ````{py:property} path :canonical: simvx.core.skeleton.Skeleton.path :type: str ```` ````{py:method} add_to_group(group: str) :canonical: simvx.core.skeleton.Skeleton.add_to_group ```` ````{py:method} remove_from_group(group: str) :canonical: simvx.core.skeleton.Skeleton.remove_from_group ```` ````{py:method} is_in_group(group: str) -> bool :canonical: simvx.core.skeleton.Skeleton.is_in_group ```` ````{py:method} ready() -> None :canonical: simvx.core.skeleton.Skeleton.ready ```` ````{py:method} enter_tree() -> None :canonical: simvx.core.skeleton.Skeleton.enter_tree ```` ````{py:method} exit_tree() -> None :canonical: simvx.core.skeleton.Skeleton.exit_tree ```` ````{py:method} physics_process(dt: float) -> None :canonical: simvx.core.skeleton.Skeleton.physics_process ```` ````{py:method} draw(renderer) -> None :canonical: simvx.core.skeleton.Skeleton.draw ```` ````{py:method} input_event(event: simvx.core.events.InputEvent) -> None :canonical: simvx.core.skeleton.Skeleton.input_event ```` ````{py:method} input(event: simvx.core.events.TreeInputEvent) -> None :canonical: simvx.core.skeleton.Skeleton.input ```` ````{py:method} unhandled_input(event: simvx.core.events.TreeInputEvent) -> None :canonical: simvx.core.skeleton.Skeleton.unhandled_input ```` ````{py:method} start_coroutine(gen: simvx.core.descriptors.Coroutine) -> simvx.core.descriptors.CoroutineHandle :canonical: simvx.core.skeleton.Skeleton.start_coroutine ```` ````{py:method} stop_coroutine(gen_or_handle) :canonical: simvx.core.skeleton.Skeleton.stop_coroutine ```` ````{py:method} clear_children() :canonical: simvx.core.skeleton.Skeleton.clear_children ```` ````{py:method} destroy() :canonical: simvx.core.skeleton.Skeleton.destroy ```` ````{py:property} app :canonical: simvx.core.skeleton.Skeleton.app ```` ````{py:property} tree :canonical: simvx.core.skeleton.Skeleton.tree :type: simvx.core.scene_tree.SceneTree ```` ````{py:method} get_tree() -> simvx.core.scene_tree.SceneTree :canonical: simvx.core.skeleton.Skeleton.get_tree ```` ````{py:method} __getitem__(key: str) :canonical: simvx.core.skeleton.Skeleton.__getitem__ ```` ````{py:method} get_properties() -> dict[str, simvx.core.descriptors.Property] :canonical: simvx.core.skeleton.Skeleton.get_properties :classmethod: ```` ````{py:method} __repr__() :canonical: simvx.core.skeleton.Skeleton.__repr__ ```` ````` `````{py:class} SkeletonProfile :canonical: simvx.core.skeleton.SkeletonProfile ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile ``` ````{py:attribute} name :canonical: simvx.core.skeleton.SkeletonProfile.name :type: str :value: > None ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile.name ``` ```` ````{py:attribute} bone_names :canonical: simvx.core.skeleton.SkeletonProfile.bone_names :type: list[str] :value: > 'field(...)' ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile.bone_names ``` ```` ````{py:attribute} bone_parents :canonical: simvx.core.skeleton.SkeletonProfile.bone_parents :type: dict[str, str] :value: > 'field(...)' ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile.bone_parents ``` ```` ````{py:attribute} bone_groups :canonical: simvx.core.skeleton.SkeletonProfile.bone_groups :type: dict[str, list[str]] :value: > 'field(...)' ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile.bone_groups ``` ```` ````{py:method} validate(skeleton: simvx.core.skeleton.Skeleton) -> list[str] :canonical: simvx.core.skeleton.SkeletonProfile.validate ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile.validate ``` ```` ````{py:method} find_in_skeleton(skeleton: simvx.core.skeleton.Skeleton, profile_bone_name: str) -> int :canonical: simvx.core.skeleton.SkeletonProfile.find_in_skeleton ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile.find_in_skeleton ``` ```` ````{py:method} get_parent(bone_name: str) -> str | None :canonical: simvx.core.skeleton.SkeletonProfile.get_parent ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile.get_parent ``` ```` ````{py:method} get_group(group_name: str) -> list[str] :canonical: simvx.core.skeleton.SkeletonProfile.get_group ```{autodoc2-docstring} simvx.core.skeleton.SkeletonProfile.get_group ``` ```` ````` ````{py:data} PROFILE_HUMANOID :canonical: simvx.core.skeleton.PROFILE_HUMANOID :value: > 'SkeletonProfile(...)' ```{autodoc2-docstring} simvx.core.skeleton.PROFILE_HUMANOID ``` ````