|
Blender
V2.93
|
#include "BLI_listbase.h"Go to the source code of this file.
Classes | |
| struct | EditBone |
| struct | PoseTarget |
| struct | PoseTree |
| struct | BoneParentTransform |
| struct | Mat4 |
| struct | BBoneSplineParameters |
Macros | |
| #define | MAX_BBONE_SUBDIV 32 |
| #define | PBONE_VISIBLE(arm, bone) |
| #define | PBONE_SELECTABLE(arm, bone) (PBONE_VISIBLE(arm, bone) && !((bone)->flag & BONE_UNSELECTABLE)) |
| #define | PBONE_SELECTED(arm, bone) (((bone)->flag & BONE_SELECTED) & PBONE_VISIBLE(arm, bone)) |
| #define | FOREACH_PCHAN_SELECTED_IN_OBJECT_BEGIN(_ob, _pchan) |
| #define | FOREACH_PCHAN_SELECTED_IN_OBJECT_END |
| #define | FOREACH_PCHAN_VISIBLE_IN_OBJECT_BEGIN(_ob, _pchan) |
| #define | FOREACH_PCHAN_VISIBLE_IN_OBJECT_END |
Typedefs | |
| typedef struct EditBone | EditBone |
| typedef struct PoseTarget | PoseTarget |
| typedef struct PoseTree | PoseTree |
| typedef struct BoneParentTransform | BoneParentTransform |
| typedef struct Mat4 | Mat4 |
| typedef struct BBoneSplineParameters | BBoneSplineParameters |
Functions | |
| struct bArmature * | BKE_armature_add (struct Main *bmain, const char *name) |
| struct bArmature * | BKE_armature_from_object (struct Object *ob) |
| int | BKE_armature_bonelist_count (struct ListBase *lb) |
| void | BKE_armature_bonelist_free (struct ListBase *lb, const bool do_id_user) |
| void | BKE_armature_editbonelist_free (struct ListBase *lb, const bool do_id_user) |
| void | BKE_armature_copy_bone_transforms (struct bArmature *armature_dst, const struct bArmature *armature_src) |
| void | BKE_armature_transform (struct bArmature *arm, const float mat[4][4], const bool do_props) |
| struct BoundBox * | BKE_armature_boundbox_get (struct Object *ob) |
| bool | BKE_pose_minmax (struct Object *ob, float r_min[3], float r_max[3], bool use_hidden, bool use_select) |
| bool | bone_autoside_name (char name[64], int strip_number, short axis, float head, float tail) |
| struct Bone * | BKE_armature_find_bone_name (struct bArmature *arm, const char *name) |
| void | BKE_armature_bone_hash_make (struct bArmature *arm) |
| void | BKE_armature_bone_hash_free (struct bArmature *arm) |
| bool | BKE_armature_bone_flag_test_recursive (const struct Bone *bone, int flag) |
| void | BKE_armature_refresh_layer_used (struct Depsgraph *depsgraph, struct bArmature *arm) |
| float | distfactor_to_bone (const float vec[3], const float b1[3], const float b2[3], float rad1, float rad2, float rdist) |
| void | BKE_armature_where_is (struct bArmature *arm) |
| void | BKE_armature_where_is_bone (struct Bone *bone, const struct Bone *bone_parent, const bool use_recursion) |
| void | BKE_pose_clear_pointers (struct bPose *pose) |
| void | BKE_pose_remap_bone_pointers (struct bArmature *armature, struct bPose *pose) |
| void | BKE_pchan_rebuild_bbone_handles (struct bPose *pose, struct bPoseChannel *pchan) |
| void | BKE_pose_channels_clear_with_null_bone (struct bPose *pose, const bool do_id_user) |
| void | BKE_pose_rebuild (struct Main *bmain, struct Object *ob, struct bArmature *arm, const bool do_id_user) |
| void | BKE_pose_ensure (struct Main *bmain, struct Object *ob, struct bArmature *arm, const bool do_id_user) |
| void | BKE_pose_where_is (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob) |
| void | BKE_pose_where_is_bone (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime, bool do_extra) |
| void | BKE_pose_where_is_bone_tail (struct bPoseChannel *pchan) |
| void | BKE_pose_apply_action (struct Object *ob, struct bAction *action, struct AnimationEvalContext *anim_eval_context) |
| void | vec_roll_to_mat3 (const float vec[3], const float roll, float r_mat[3][3]) |
| void | vec_roll_to_mat3_normalized (const float nor[3], const float roll, float r_mat[3][3]) |
| void | mat3_to_vec_roll (const float mat[3][3], float r_vec[3], float *r_roll) |
| void | mat3_vec_to_roll (const float mat[3][3], const float vec[3], float *r_roll) |
| void | BKE_armature_mat_world_to_pose (struct Object *ob, const float inmat[4][4], float outmat[4][4]) |
| void | BKE_armature_loc_world_to_pose (struct Object *ob, const float inloc[3], float outloc[3]) |
| void | BKE_armature_mat_pose_to_bone (struct bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4]) |
| void | BKE_armature_loc_pose_to_bone (struct bPoseChannel *pchan, const float inloc[3], float outloc[3]) |
| void | BKE_armature_mat_bone_to_pose (struct bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4]) |
| void | BKE_armature_mat_pose_to_delta (float delta_mat[4][4], float pose_mat[4][4], float arm_mat[4][4]) |
| void | BKE_armature_mat_pose_to_bone_ex (struct Depsgraph *depsgraph, struct Object *ob, struct bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4]) |
| void | BKE_pchan_mat3_to_rot (struct bPoseChannel *pchan, const float mat[3][3], bool use_compat) |
| void | BKE_pchan_rot_to_mat3 (const struct bPoseChannel *pchan, float r_mat[3][3]) |
| void | BKE_pchan_apply_mat4 (struct bPoseChannel *pchan, const float mat[4][4], bool use_compat) |
| void | BKE_pchan_to_mat4 (const struct bPoseChannel *pchan, float r_chanmat[4][4]) |
| void | BKE_pchan_calc_mat (struct bPoseChannel *pchan) |
| void | BKE_bone_offset_matrix_get (const struct Bone *bone, float offs_bone[4][4]) |
| void | BKE_bone_parent_transform_clear (struct BoneParentTransform *bpt) |
| void | BKE_bone_parent_transform_invert (struct BoneParentTransform *bpt) |
| void | BKE_bone_parent_transform_combine (const struct BoneParentTransform *in1, const struct BoneParentTransform *in2, struct BoneParentTransform *result) |
| void | BKE_bone_parent_transform_apply (const struct BoneParentTransform *bpt, const float inmat[4][4], float outmat[4][4]) |
| void | BKE_bone_parent_transform_calc_from_pchan (const struct bPoseChannel *pchan, struct BoneParentTransform *r_bpt) |
| void | BKE_bone_parent_transform_calc_from_matrices (int bone_flag, int inherit_scale_mode, const float offs_bone[4][4], const float parent_arm_mat[4][4], const float parent_pose_mat[4][4], struct BoneParentTransform *r_bpt) |
| void | BKE_rotMode_change_values (float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode) |
| void | BKE_pchan_bbone_handles_get (struct bPoseChannel *pchan, struct bPoseChannel **r_prev, struct bPoseChannel **r_next) |
| void | BKE_pchan_bbone_spline_params_get (struct bPoseChannel *pchan, const bool rest, struct BBoneSplineParameters *r_param) |
| void | BKE_pchan_bbone_spline_setup (struct bPoseChannel *pchan, const bool rest, const bool for_deform, Mat4 *result_array) |
| void | BKE_pchan_bbone_handles_compute (const BBoneSplineParameters *param, float h1[3], float *r_roll1, float h2[3], float *r_roll2, bool ease, bool offsets) |
| int | BKE_pchan_bbone_spline_compute (struct BBoneSplineParameters *param, const bool for_deform, Mat4 *result_array) |
| void | BKE_pchan_bbone_segments_cache_compute (struct bPoseChannel *pchan) |
| void | BKE_pchan_bbone_segments_cache_copy (struct bPoseChannel *pchan, struct bPoseChannel *pchan_from) |
| void | BKE_pchan_bbone_deform_segment_index (const struct bPoseChannel *pchan, float pos, int *r_index, float *r_blend_next) |
| struct bPoseChannel * | BKE_armature_ik_solver_find_root (struct bPoseChannel *pchan, struct bKinematicConstraint *data) |
| struct bPoseChannel * | BKE_armature_splineik_solver_find_root (struct bPoseChannel *pchan, struct bSplineIKConstraint *data) |
| void | BKE_pose_splineik_init_tree (struct Scene *scene, struct Object *ob, float ctime) |
| void | BKE_splineik_execute_tree (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan_root, float ctime) |
| void | BKE_pose_pchan_index_rebuild (struct bPose *pose) |
| void | BKE_pose_eval_init (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object) |
| void | BKE_pose_eval_init_ik (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object) |
| void | BKE_pose_eval_bone (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object, int pchan_index) |
| void | BKE_pose_constraints_evaluate (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object, int pchan_index) |
| void | BKE_pose_bone_done (struct Depsgraph *depsgraph, struct Object *object, int pchan_index) |
| void | BKE_pose_eval_bbone_segments (struct Depsgraph *depsgraph, struct Object *object, int pchan_index) |
| void | BKE_pose_iktree_evaluate (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object, int rootchan_index) |
| void | BKE_pose_splineik_evaluate (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object, int rootchan_index) |
| void | BKE_pose_eval_done (struct Depsgraph *depsgraph, struct Object *object) |
| void | BKE_pose_eval_cleanup (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object) |
| void | BKE_pose_eval_proxy_init (struct Depsgraph *depsgraph, struct Object *object) |
| void | BKE_pose_eval_proxy_done (struct Depsgraph *depsgraph, struct Object *object) |
| void | BKE_pose_eval_proxy_cleanup (struct Depsgraph *depsgraph, struct Object *object) |
| void | BKE_pose_eval_proxy_copy_bone (struct Depsgraph *depsgraph, struct Object *object, int pchan_index) |
Deform 3D Coordinates by Armature (armature_deform.c) | |
| void | BKE_armature_deform_coords_with_gpencil_stroke (const struct Object *ob_arm, const struct Object *ob_target, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], int vert_coords_len, int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, struct bGPDstroke *gps_target) |
| void | BKE_armature_deform_coords_with_mesh (const struct Object *ob_arm, const struct Object *ob_target, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], int vert_coords_len, int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, const struct Mesh *me_target) |
| void | BKE_armature_deform_coords_with_editmesh (const struct Object *ob_arm, const struct Object *ob_target, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], int vert_coords_len, int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, struct BMEditMesh *em_target) |
| #define FOREACH_PCHAN_SELECTED_IN_OBJECT_BEGIN | ( | _ob, | |
| _pchan | |||
| ) |
Definition at line 349 of file BKE_armature.h.
| #define FOREACH_PCHAN_SELECTED_IN_OBJECT_END |
Definition at line 353 of file BKE_armature.h.
| #define FOREACH_PCHAN_VISIBLE_IN_OBJECT_BEGIN | ( | _ob, | |
| _pchan | |||
| ) |
Definition at line 358 of file BKE_armature.h.
| #define FOREACH_PCHAN_VISIBLE_IN_OBJECT_END |
Definition at line 361 of file BKE_armature.h.
| #define MAX_BBONE_SUBDIV 32 |
Definition at line 277 of file BKE_armature.h.
| #define PBONE_SELECTABLE | ( | arm, | |
| bone | |||
| ) | (PBONE_VISIBLE(arm, bone) && !((bone)->flag & BONE_UNSELECTABLE)) |
Definition at line 343 of file BKE_armature.h.
| #define PBONE_SELECTED | ( | arm, | |
| bone | |||
| ) | (((bone)->flag & BONE_SELECTED) & PBONE_VISIBLE(arm, bone)) |
Definition at line 346 of file BKE_armature.h.
| #define PBONE_VISIBLE | ( | arm, | |
| bone | |||
| ) |
Definition at line 338 of file BKE_armature.h.
| typedef struct BBoneSplineParameters BBoneSplineParameters |
| typedef struct BoneParentTransform BoneParentTransform |
| typedef struct PoseTarget PoseTarget |
Definition at line 345 of file armature.c.
References BKE_id_new(), and ID_AR.
Referenced by BKE_object_obdata_add_from_type().
| bool BKE_armature_bone_flag_test_recursive | ( | const struct Bone * | bone, |
| int | flag | ||
| ) |
Referenced by snap_selected_to_location().
| void BKE_armature_bone_hash_free | ( | struct bArmature * | arm | ) |
Definition at line 651 of file armature.c.
References BLI_ghash_free(), bArmature::bonehash, and NULL.
Referenced by armature_free_data(), and ED_armature_from_edit().
| void BKE_armature_bone_hash_make | ( | struct bArmature * | arm | ) |
Definition at line 644 of file armature.c.
References armature_bone_from_name_map(), and bArmature::bonehash.
Referenced by armature_blend_read_data(), armature_copy_data(), and ED_armature_from_edit().
| int BKE_armature_bonelist_count | ( | struct ListBase * | lb | ) |
Definition at line 361 of file armature.c.
References BKE_armature_bonelist_count(), and LISTBASE_FOREACH.
Referenced by armature_bone_from_name_map(), BKE_armature_bonelist_count(), and ED_object_data_xform_create_ex().
| void BKE_armature_bonelist_free | ( | struct ListBase * | lb, |
| const bool | do_id_user | ||
| ) |
Definition at line 371 of file armature.c.
References BKE_armature_bonelist_free(), BLI_freelistN(), Bone::childbase, ListBase::first, IDP_FreeProperty_ex(), Bone::next, and Bone::prop.
Referenced by armature_free_data(), BKE_armature_bonelist_free(), and ED_armature_from_edit().
Definition at line 2858 of file armature.c.
References Object_Runtime::bb, boundbox_armature(), and Object::runtime.
Referenced by BKE_object_boundbox_get(), and snapArmature().
| void BKE_armature_copy_bone_transforms | ( | struct bArmature * | armature_dst, |
| const struct bArmature * | armature_src | ||
| ) |
Referenced by apply_objects_internal(), and object_origin_set_exec().
| void BKE_armature_deform_coords_with_editmesh | ( | const struct Object * | ob_arm, |
| const struct Object * | ob_target, | ||
| float(*) | vert_coords[3], | ||
| float(*) | vert_deform_mats[3][3], | ||
| int | vert_coords_len, | ||
| int | deformflag, | ||
| float(*) | vert_coords_prev[3], | ||
| const char * | defgrp_name, | ||
| struct BMEditMesh * | em_target | ||
| ) |
Referenced by deformMatricesEM(), and deformVertsEM().
| void BKE_armature_deform_coords_with_gpencil_stroke | ( | const struct Object * | ob_arm, |
| const struct Object * | ob_target, | ||
| float(*) | vert_coords[3], | ||
| float(*) | vert_deform_mats[3][3], | ||
| int | vert_coords_len, | ||
| int | deformflag, | ||
| float(*) | vert_coords_prev[3], | ||
| const char * | defgrp_name, | ||
| struct bGPDstroke * | gps_target | ||
| ) |
Referenced by gpencil_deform_verts().
| void BKE_armature_deform_coords_with_mesh | ( | const struct Object * | ob_arm, |
| const struct Object * | ob_target, | ||
| float(*) | vert_coords[3], | ||
| float(*) | vert_deform_mats[3][3], | ||
| int | vert_coords_len, | ||
| int | deformflag, | ||
| float(*) | vert_coords_prev[3], | ||
| const char * | defgrp_name, | ||
| const struct Mesh * | me_target | ||
| ) |
Referenced by deformMatrices(), and deformVerts().
| void BKE_armature_editbonelist_free | ( | struct ListBase * | lb, |
| const bool | do_id_user | ||
| ) |
Definition at line 385 of file armature.c.
References BLI_remlink_safe(), IDP_FreeProperty_ex(), LISTBASE_FOREACH_MUTABLE, and MEM_freeN.
Referenced by armature_free_data().
Walk the list until the bone is found (slow!), use #BKE_armature_bone_from_name_map for multiple lookups.
Definition at line 609 of file armature.c.
References BLI_ghash_lookup(), bArmature::bonebase, bArmature::bonehash, get_named_bone_bonechildren(), and NULL.
Referenced by AnimationImporter::add_bone_animation_sampled(), AnimationImporter::apply_matrix_curves(), BKE_pose_blend_read_lib(), BKE_pose_blend_write(), BKE_pose_remap_bone_pointers(), bone_unique_check(), copy_bonechildren_custom_handles(), ED_armature_bone_rename(), test_constraint(), and AnimationImporter::translate_animation_OLD().
Definition at line 353 of file armature.c.
References Object::data, NULL, OB_ARMATURE, and Object::type.
Referenced by apply_armature_pose2bones_exec(), createTransPose(), and test_constraint().
| struct bPoseChannel* BKE_armature_ik_solver_find_root | ( | struct bPoseChannel * | pchan, |
| struct bKinematicConstraint * | data | ||
| ) |
Definition at line 2910 of file armature.c.
References CONSTRAINT_IK_TIP, data, NULL, and bPoseChannel::parent.
Referenced by blender::deg::DepsgraphNodeBuilder::build_ik_pose(), and blender::deg::DepsgraphRelationBuilder::build_ik_pose().
| void BKE_armature_loc_pose_to_bone | ( | struct bPoseChannel * | pchan, |
| const float | inloc[3], | ||
| float | outloc[3] | ||
| ) |
Definition at line 1853 of file armature.c.
References BKE_armature_mat_pose_to_bone(), copy_v3_v3(), and unit_m4().
Referenced by snap_sel_to_grid_exec(), and snap_selected_to_location().
Definition at line 1555 of file armature.c.
References BKE_armature_mat_world_to_pose(), copy_v3_v3(), and unit_m4().
| void BKE_armature_mat_bone_to_pose | ( | struct bPoseChannel * | pchan, |
| const float | inmat[4][4], | ||
| float | outmat[4][4] | ||
| ) |
Definition at line 1840 of file armature.c.
References BKE_bone_parent_transform_apply(), and BKE_bone_parent_transform_calc_from_pchan().
Referenced by BKE_constraint_mat_convertspace(), and BKE_pose_where_is_bone().
| void BKE_armature_mat_pose_to_bone | ( | struct bPoseChannel * | pchan, |
| const float | inmat[4][4], | ||
| float | outmat[4][4] | ||
| ) |
Definition at line 1828 of file armature.c.
References BKE_bone_parent_transform_apply(), BKE_bone_parent_transform_calc_from_pchan(), and BKE_bone_parent_transform_invert().
Referenced by apply_targetless_ik(), BKE_armature_loc_pose_to_bone(), BKE_armature_mat_pose_to_bone_ex(), BKE_constraint_mat_convertspace(), pose_visual_transform_apply_exec(), and visualkey_get_values().
| void BKE_armature_mat_pose_to_bone_ex | ( | struct Depsgraph * | depsgraph, |
| struct Object * | ob, | ||
| struct bPoseChannel * | pchan, | ||
| const float | inmat[4][4], | ||
| float | outmat[4][4] | ||
| ) |
Definition at line 1875 of file armature.c.
References BKE_armature_mat_pose_to_bone(), BKE_pchan_apply_mat4(), BKE_pose_where_is_bone(), depsgraph, NULL, and unit_m4().
| void BKE_armature_mat_pose_to_delta | ( | float | delta_mat[4][4], |
| float | pose_mat[4][4], | ||
| float | arm_mat[4][4] | ||
| ) |
Remove rest-position effects from pose-transform for obtaining 'visual' transformation of pose-channel. (used by the Visual-Keyframing stuff).
Definition at line 1963 of file armature.c.
References invert_m4_m4(), and mul_m4_m4m4().
| void BKE_armature_mat_world_to_pose | ( | struct Object * | ob, |
| const float | inmat[4][4], | ||
| float | outmat[4][4] | ||
| ) |
Definition at line 1536 of file armature.c.
References invert_m4_m4(), mul_m4_m4m4(), NULL, and Object::obmat.
Referenced by BKE_armature_loc_world_to_pose().
Definition at line 690 of file armature.c.
References armature_refresh_layer_used_recursive(), bArmature::bonebase, DEG_get_original_id(), DEG_is_active(), depsgraph, bArmature::edbo, bArmature::id, bArmature::layer_used, and NULL.
| struct bPoseChannel* BKE_armature_splineik_solver_find_root | ( | struct bPoseChannel * | pchan, |
| struct bSplineIKConstraint * | data | ||
| ) |
Definition at line 2931 of file armature.c.
References BLI_assert, data, NULL, and bPoseChannel::parent.
Referenced by blender::deg::DepsgraphNodeBuilder::build_splineik_pose(), and blender::deg::DepsgraphRelationBuilder::build_splineik_pose().
Definition at line 567 of file armature.c.
References armature_transform_recurse(), bArmature::bonebase, copy_m3_m4(), mat4_to_scale(), normalize_m3(), and NULL.
Referenced by apply_objects_internal(), armature_coords_and_quats_apply_with_mat4(), and ED_armature_transform().
| void BKE_armature_where_is | ( | struct bArmature * | arm | ) |
Definition at line 2270 of file armature.c.
References BKE_armature_where_is_bone(), bArmature::bonebase, ListBase::first, Bone::next, and NULL.
Referenced by blo_do_versions_pre250().
| void BKE_armature_where_is_bone | ( | struct Bone * | bone, |
| const struct Bone * | bone_parent, | ||
| const bool | use_recursion | ||
| ) |
Referenced by armature_finalize_restpose().
Referenced by applyarmature_process_selected_recursive().
| void BKE_bone_parent_transform_apply | ( | const struct BoneParentTransform * | bpt, |
| const float | inmat[4][4], | ||
| float | outmat[4][4] | ||
| ) |
Definition at line 1812 of file armature.c.
References copy_v3_v3(), BoneParentTransform::loc_mat, mul_m4_m4m4(), mul_v3_m4v3(), BoneParentTransform::post_scale, rescale_m4(), and BoneParentTransform::rotscale_mat.
Referenced by applyarmature_process_selected_recursive(), BKE_armature_mat_bone_to_pose(), and BKE_armature_mat_pose_to_bone().
| void BKE_bone_parent_transform_calc_from_matrices | ( | int | bone_flag, |
| int | inherit_scale_mode, | ||
| const float | offs_bone[4][4], | ||
| const float | parent_arm_mat[4][4], | ||
| const float | parent_pose_mat[4][4], | ||
| struct BoneParentTransform * | r_bpt | ||
| ) |
Definition at line 1644 of file armature.c.
References BLI_assert_unreachable, BONE_HINGE, BONE_INHERIT_SCALE_ALIGNED, BONE_INHERIT_SCALE_AVERAGE, BONE_INHERIT_SCALE_FIX_SHEAR, BONE_INHERIT_SCALE_FULL, BONE_INHERIT_SCALE_NONE, BONE_INHERIT_SCALE_NONE_LEGACY, BONE_NO_LOCAL_LOCATION, copy_m3_m4(), copy_m4_m3(), copy_m4_m4(), copy_v3_fl(), copy_v3_v3(), fabsf, BoneParentTransform::loc_mat, mat4_to_size(), mat4_to_size_fix_shear(), mat4_to_volume_scale(), mul_m3_m3m3(), mul_m4_m4m4(), mul_mat3_m4_fl(), mul_v3_m4v3(), normalize_m4(), normalize_m4_ex(), orthogonalize_m4_stable(), BoneParentTransform::post_scale, rescale_m4(), BoneParentTransform::rotscale_mat, unit_m3(), and unit_m4().
Referenced by applyarmature_process_selected_recursive(), and BKE_bone_parent_transform_calc_from_pchan().
| void BKE_bone_parent_transform_calc_from_pchan | ( | const struct bPoseChannel * | pchan, |
| struct BoneParentTransform * | r_bpt | ||
| ) |
Referenced by add_pose_transdata().
| void BKE_bone_parent_transform_clear | ( | struct BoneParentTransform * | bpt | ) |
Definition at line 1789 of file armature.c.
References copy_v3_fl(), BoneParentTransform::loc_mat, BoneParentTransform::post_scale, BoneParentTransform::rotscale_mat, and unit_m4().
Referenced by applyarmature_process_selected_recursive().
| void BKE_bone_parent_transform_combine | ( | const struct BoneParentTransform * | in1, |
| const struct BoneParentTransform * | in2, | ||
| struct BoneParentTransform * | result | ||
| ) |
Definition at line 1803 of file armature.c.
References BoneParentTransform::loc_mat, mul_m4_m4m4(), mul_v3_v3v3(), BoneParentTransform::post_scale, result, and BoneParentTransform::rotscale_mat.
Referenced by applyarmature_process_selected_recursive().
| void BKE_bone_parent_transform_invert | ( | struct BoneParentTransform * | bpt | ) |
Definition at line 1796 of file armature.c.
References invert_m4(), invert_v3(), BoneParentTransform::loc_mat, BoneParentTransform::post_scale, and BoneParentTransform::rotscale_mat.
Referenced by applyarmature_process_selected_recursive(), and BKE_armature_mat_pose_to_bone().
| void BKE_pchan_apply_mat4 | ( | bPoseChannel * | pchan, |
| const float | mat[4][4], | ||
| bool | use_compat | ||
| ) |
Apply a 4x4 matrix to the pose bone, similar to BKE_object_apply_mat4().
Definition at line 1951 of file armature.c.
References BKE_pchan_mat3_to_rot(), bPoseChannel::loc, mat4_to_loc_rot_size(), rot, and bPoseChannel::size.
Referenced by action_flip_pchan(), BKE_armature_mat_pose_to_bone_ex(), pose_transform_mirror_update(), and pose_visual_transform_apply_exec().
| void BKE_pchan_bbone_deform_segment_index | ( | const struct bPoseChannel * | pchan, |
| float | pos, | ||
| int * | r_index, | ||
| float * | r_blend_next | ||
| ) |
Referenced by armdef_accumulate_bone(), b_bone_deform(), and constraint_target_to_mat4().
| void BKE_pchan_bbone_handles_compute | ( | const BBoneSplineParameters * | param, |
| float | h1[3], | ||
| float * | r_roll1, | ||
| float | h2[3], | ||
| float * | r_roll2, | ||
| bool | ease, | ||
| bool | offsets | ||
| ) |
Definition at line 1147 of file armature.c.
References copy_m3_m4(), copy_v3_fl3(), copy_v3_v3(), cubic_tangent_factor_circle_v3(), BBoneSplineParameters::curve_in_x, BBoneSplineParameters::curve_in_y, BBoneSplineParameters::curve_out_x, BBoneSplineParameters::curve_out_y, BBoneSplineParameters::do_scale, e, BBoneSplineParameters::ease1, BBoneSplineParameters::ease2, blender::robust_pred::epsilon, length(), BBoneSplineParameters::length, mat3_vec_to_roll(), mul_v3_fl(), negate_v3(), BBoneSplineParameters::next_bbone, BBoneSplineParameters::next_h, BBoneSplineParameters::next_mat, normalize_v3(), BBoneSplineParameters::prev_bbone, BBoneSplineParameters::prev_h, BBoneSplineParameters::prev_mat, BBoneSplineParameters::roll1, BBoneSplineParameters::roll2, BBoneSplineParameters::scale, BBoneSplineParameters::use_next, and BBoneSplineParameters::use_prev.
Referenced by BKE_pchan_bbone_spline_compute().
| void BKE_pchan_bbone_handles_get | ( | struct bPoseChannel * | pchan, |
| struct bPoseChannel ** | r_prev, | ||
| struct bPoseChannel ** | r_next | ||
| ) |
Definition at line 921 of file armature.c.
References BBONE_HANDLE_AUTO, bPoseChannel::bbone_next, Bone::bbone_next_type, bPoseChannel::bbone_prev, Bone::bbone_prev_type, bPoseChannel::bone, BONE_CONNECTED, bPoseChannel::child, Bone::flag, NULL, and bPoseChannel::parent.
Referenced by BKE_pchan_bbone_spline_params_get(), and blender::deg::DepsgraphRelationBuilder::build_rig().
| void BKE_pchan_bbone_segments_cache_compute | ( | bPoseChannel * | pchan | ) |
Compute and cache the B-Bone shape in the channel runtime struct.
Definition at line 1425 of file armature.c.
References Freestyle::a, allocate_bbone_cache(), Bone::arm_mat, bPoseChannel_Runtime::bbone_deform_mats, bPoseChannel_Runtime::bbone_dual_quats, bPoseChannel_Runtime::bbone_pose_mats, bPoseChannel_Runtime::bbone_rest_mats, BKE_pchan_bbone_spline_setup(), BLI_assert, bPoseChannel::bone, bPoseChannel::chan_mat, invert_m4_m4(), Mat4::mat, mat4_to_dquat(), mul_m4_m4m4(), mul_m4_series, normalize_m4(), bPoseChannel::runtime, and Bone::segments.
Referenced by BKE_pose_eval_bbone_segments().
| void BKE_pchan_bbone_segments_cache_copy | ( | bPoseChannel * | pchan, |
| bPoseChannel * | pchan_from | ||
| ) |
Copy cached B-Bone segments from one channel to another
Definition at line 1477 of file armature.c.
References allocate_bbone_cache(), bPoseChannel_Runtime::bbone_deform_mats, bPoseChannel_Runtime::bbone_dual_quats, bPoseChannel_Runtime::bbone_pose_mats, bPoseChannel_Runtime::bbone_rest_mats, bPoseChannel_Runtime::bbone_segments, BKE_pose_channel_free_bbone_cache(), and bPoseChannel::runtime.
Referenced by BKE_pose_eval_bbone_segments(), and BKE_pose_eval_proxy_copy_bone().
| int BKE_pchan_bbone_spline_compute | ( | struct BBoneSplineParameters * | param, |
| const bool | for_deform, | ||
| Mat4 * | result_array | ||
| ) |
Definition at line 1306 of file armature.c.
References Freestyle::a, add_v3_v3v3(), BKE_pchan_bbone_handles_compute(), CLAMP_MAX, copy_v3_fl3(), copy_v3_v3(), BBoneSplineParameters::do_scale, ease_handle_axis(), equalize_cubic_bezier(), evaluate_cubic_bezier(), float(), interpf(), invert_m4_m4(), length(), BBoneSplineParameters::length, make_bbone_spline_matrix(), Mat4::mat, MAX_BBONE_SUBDIV, negate_v3(), BBoneSplineParameters::scale, BBoneSplineParameters::scale_in_x, BBoneSplineParameters::scale_in_y, BBoneSplineParameters::scale_out_x, BBoneSplineParameters::scale_out_y, BBoneSplineParameters::segments, size_to_mat4(), sub_v3_v3v3(), and zero_v3().
Referenced by BKE_pchan_bbone_spline_setup(), and ebone_spline_preview().
| void BKE_pchan_bbone_spline_params_get | ( | struct bPoseChannel * | pchan, |
| const bool | rest, | ||
| struct BBoneSplineParameters * | r_param | ||
| ) |
Definition at line 948 of file armature.c.
References add_v3_v3v3(), Bone::arm_head, Bone::arm_mat, Bone::arm_tail, BBONE_HANDLE_RELATIVE, BBONE_HANDLE_TANGENT, Bone::bbone_next_type, Bone::bbone_prev_type, BKE_pchan_bbone_handles_get(), bPoseChannel::bone, BONE_ADD_PARENT_END_ROLL, copy_m4_m4(), copy_v3_fl3(), copy_v3_v3(), BBoneSplineParameters::curve_in_x, bPoseChannel::curve_in_x, Bone::curve_in_x, BBoneSplineParameters::curve_in_y, bPoseChannel::curve_in_y, Bone::curve_in_y, BBoneSplineParameters::curve_out_x, bPoseChannel::curve_out_x, Bone::curve_out_x, BBoneSplineParameters::curve_out_y, bPoseChannel::curve_out_y, Bone::curve_out_y, BBoneSplineParameters::do_scale, BBoneSplineParameters::ease1, bPoseChannel::ease1, Bone::ease1, BBoneSplineParameters::ease2, bPoseChannel::ease2, Bone::ease2, fabsf, Bone::flag, invert_m4_m4(), BBoneSplineParameters::length, Bone::length, mat4_to_size(), mul_m4_m4m4(), mul_v3_m4v3(), next, BBoneSplineParameters::next_bbone, BBoneSplineParameters::next_h, BBoneSplineParameters::next_mat, normalize_m4(), bPoseChannel::pose_head, bPoseChannel::pose_mat, bPoseChannel::pose_tail, BBoneSplineParameters::prev_bbone, BBoneSplineParameters::prev_h, BBoneSplineParameters::prev_mat, BBoneSplineParameters::roll1, bPoseChannel::roll1, Bone::roll1, BBoneSplineParameters::roll2, bPoseChannel::roll2, Bone::roll2, BBoneSplineParameters::scale, BBoneSplineParameters::scale_in_x, bPoseChannel::scale_in_x, Bone::scale_in_x, BBoneSplineParameters::scale_in_y, bPoseChannel::scale_in_y, Bone::scale_in_y, BBoneSplineParameters::scale_out_x, bPoseChannel::scale_out_x, Bone::scale_out_x, BBoneSplineParameters::scale_out_y, bPoseChannel::scale_out_y, Bone::scale_out_y, BBoneSplineParameters::segments, Bone::segments, sub_v3_v3v3(), BBoneSplineParameters::use_next, BBoneSplineParameters::use_prev, and zero_v3().
Referenced by BKE_pchan_bbone_spline_setup().
| void BKE_pchan_bbone_spline_setup | ( | struct bPoseChannel * | pchan, |
| const bool | rest, | ||
| const bool | for_deform, | ||
| Mat4 * | result_array | ||
| ) |
Definition at line 1134 of file armature.c.
References BKE_pchan_bbone_spline_compute(), BKE_pchan_bbone_spline_params_get(), bPoseChannel::bone, and Bone::segments.
Referenced by add_verts_to_dgroups(), BKE_pchan_bbone_segments_cache_compute(), draw_bone_update_disp_matrix_bbone(), and gpencil_add_verts_to_dgroups().
| void BKE_pchan_calc_mat | ( | struct bPoseChannel * | pchan | ) |
Definition at line 2651 of file armature.c.
References BKE_pchan_to_mat4(), and bPoseChannel::chan_mat.
Referenced by actcon_get_tarmat(), and BKE_pose_where_is_bone().
| void BKE_pchan_mat3_to_rot | ( | bPoseChannel * | pchan, |
| const float | mat[3][3], | ||
| bool | use_compat | ||
| ) |
Same as BKE_object_mat3_to_rot().
Definition at line 1898 of file armature.c.
References BLI_ASSERT_UNIT_M3, bPoseChannel::eul, mat3_normalized_to_axis_angle(), mat3_normalized_to_compatible_eulO(), mat3_normalized_to_eulO(), mat3_normalized_to_quat(), bPoseChannel::quat, ROT_MODE_AXISANGLE, ROT_MODE_QUAT, bPoseChannel::rotAngle, bPoseChannel::rotAxis, and bPoseChannel::rotmode.
Referenced by apply_targetless_ik(), and BKE_pchan_apply_mat4().
| void BKE_pchan_rebuild_bbone_handles | ( | bPose * | pose, |
| bPoseChannel * | pchan | ||
| ) |
Update the links for the B-Bone handles from Bone data.
Definition at line 2512 of file armature.c.
References bPoseChannel::bbone_next, Bone::bbone_next, bPoseChannel::bbone_prev, Bone::bbone_prev, bPoseChannel::bone, and pose_channel_find_bone().
Referenced by BKE_pose_rebuild().
| void BKE_pchan_rot_to_mat3 | ( | const struct bPoseChannel * | pchan, |
| float | r_mat[3][3] | ||
| ) |
Referenced by apply_targetless_ik().
| void BKE_pchan_to_mat4 | ( | const struct bPoseChannel * | pchan, |
| float | r_chanmat[4][4] | ||
| ) |
Referenced by action_flip_pchan(), dvar_eval_transChan(), pose_mirror_info_init(), and pose_transform_mirror_update().
| void BKE_pose_apply_action | ( | struct Object * | ob, |
| struct bAction * | action, | ||
| struct AnimationEvalContext * | anim_eval_context | ||
| ) |
Definition at line 48 of file armature_pose.cc.
References animsys_evaluate_action(), Object::data, Object::id, Object::pose, and RNA_id_pointer_create().
Definition at line 958 of file armature_update.c.
References Bone::arm_mat, BKE_pose_channel_free_bbone_cache(), bPoseChannel::bone, BONE_NO_DEFORM, bPoseChannel::chan_mat, Object::data, bPoseChannel_Runtime::deform_dual_quat, DEG_debug_print_eval_subdata(), DEG_is_active(), depsgraph, bArmature::edbo, Bone::flag, Object::id, if(), invert_m4_m4(), mat4_to_dquat(), mul_m4_m4m4(), bPoseChannel::name, ID::name, NULL, bPoseChannel::orig_pchan, pose_channel_flush_to_orig_if_needed(), bPoseChannel::pose_mat, pose_pchan_get_indexed(), bPoseChannel::runtime, and Bone::segments.
| void BKE_pose_channels_clear_with_null_bone | ( | struct bPose * | pose, |
| const bool | do_id_user | ||
| ) |
Definition at line 2518 of file armature.c.
References BKE_pose_channel_free_ex(), BKE_pose_channels_hash_free(), BLI_freelinkN(), bPose::chanbase, LISTBASE_FOREACH_MUTABLE, and NULL.
Referenced by BKE_pose_rebuild(), and ED_object_editmode_load_free_ex().
| void BKE_pose_clear_pointers | ( | bPose * | pose | ) |
Clear pointers of object's pose (needed in remap case, since we cannot always wait for a complete pose rebuild).
Definition at line 2490 of file armature.c.
References bPose::chanbase, LISTBASE_FOREACH, and NULL.
Referenced by BKE_lib_override_library_update(), BKE_pose_rebuild(), and libblock_remap_data_preprocess().
| void BKE_pose_constraints_evaluate | ( | struct Depsgraph * | depsgraph, |
| struct Scene * | scene, | ||
| struct Object * | object, | ||
| int | pchan_index | ||
| ) |
Definition at line 912 of file armature_update.c.
References ARM_RESTPOS, BKE_pose_where_is_bone(), BKE_scene_frame_get(), Object::data, DEG_debug_print_eval_subdata(), depsgraph, bArmature::edbo, bPoseChannel::flag, bArmature::flag, Object::id, if(), bPoseChannel::name, ID::name, NULL, POSE_DONE, POSE_IKSPLINE, POSE_IKTREE, pose_pchan_get_indexed(), and scene.
Ensures object's pose is rebuilt if needed.
| bmain | May be NULL, only used to tag depsgraph as being dirty... |
Definition at line 2608 of file armature.c.
References BKE_pose_rebuild(), BLI_assert, ELEM, bPose::flag, GS, bArmature::id, ID_AR, ID::name, NULL, OB_ARMATURE, Object::pose, POSE_RECALC, and Object::type.
Referenced by BKE_lib_override_library_main_operations_create(), BKE_lib_override_library_operations_create(), BKE_lib_override_library_status_check_local(), BKE_lib_override_library_status_check_reference(), BKE_pose_where_is(), pose_bone_layers_exec(), and RNA_struct_override_matches().
| void BKE_pose_eval_bbone_segments | ( | struct Depsgraph * | depsgraph, |
| struct Object * | object, | ||
| int | pchan_index | ||
| ) |
Definition at line 984 of file armature_update.c.
References BKE_pchan_bbone_segments_cache_compute(), BKE_pchan_bbone_segments_cache_copy(), bPoseChannel::bone, Object::data, DEG_debug_print_eval_subdata(), DEG_is_active(), depsgraph, bArmature::edbo, Object::id, if(), bPoseChannel::name, ID::name, NULL, bPoseChannel::orig_pchan, pose_pchan_get_indexed(), and Bone::segments.
| void BKE_pose_eval_bone | ( | struct Depsgraph * | depsgraph, |
| struct Scene * | scene, | ||
| struct Object * | object, | ||
| int | pchan_index | ||
| ) |
Definition at line 876 of file armature_update.c.
References Bone::arm_head, Bone::arm_mat, ARM_RESTPOS, Bone::arm_tail, BKE_pose_where_is_bone(), BKE_scene_frame_get(), BLI_assert, bPoseChannel::bone, bPoseChannel::constraints, copy_m4_m4(), copy_v3_v3(), Object::data, DEG_debug_print_eval_subdata(), depsgraph, bArmature::edbo, ListBase::first, bPoseChannel::flag, bArmature::flag, Object::id, if(), bPoseChannel::name, ID::name, NULL, OB_ARMATURE, POSE_DONE, bPoseChannel::pose_head, POSE_IKSPLINE, POSE_IKTREE, bPoseChannel::pose_mat, pose_pchan_get_indexed(), bPoseChannel::pose_tail, scene, and Object::type.
| void BKE_pose_eval_cleanup | ( | struct Depsgraph * | depsgraph, |
| struct Scene * | scene, | ||
| struct Object * | object | ||
| ) |
Definition at line 1061 of file armature_update.c.
References BIK_release_tree(), BKE_scene_frame_get(), BLI_assert, DEG_debug_print_eval(), depsgraph, Object::id, ID::name, NULL, OB_ARMATURE, pose_eval_cleanup_common(), scene, Object::type, and UNUSED_VARS_NDEBUG.
Definition at line 1052 of file armature_update.c.
References BLI_assert, DEG_debug_print_eval(), depsgraph, Object::id, ID::name, NULL, OB_ARMATURE, Object::type, and UNUSED_VARS_NDEBUG.
| void BKE_pose_eval_init | ( | struct Depsgraph * | depsgraph, |
| struct Scene * | scene, | ||
| struct Object * | object | ||
| ) |
| void BKE_pose_eval_init_ik | ( | struct Depsgraph * | depsgraph, |
| struct Scene * | scene, | ||
| struct Object * | object | ||
| ) |
Definition at line 859 of file armature_update.c.
References ARM_RESTPOS, BIK_init_tree(), BKE_pose_splineik_init_tree(), BKE_scene_frame_get(), BLI_assert, Object::data, DEG_debug_print_eval(), depsgraph, bArmature::flag, Object::id, if(), ID::name, OB_ARMATURE, scene, and Object::type.
Definition at line 1088 of file armature_update.c.
References BLI_assert, DEG_debug_print_eval(), depsgraph, Object::id, ID_IS_LINKED, ID::name, NULL, pose_eval_cleanup_common(), and Object::proxy_from.
| void BKE_pose_eval_proxy_copy_bone | ( | struct Depsgraph * | depsgraph, |
| struct Object * | object, | ||
| int | pchan_index | ||
| ) |
Definition at line 1095 of file armature_update.c.
References BKE_pchan_bbone_segments_cache_copy(), BKE_pose_channel_find_name(), BKE_pose_copy_pchan_result(), BLI_assert, copy_dq_dq(), Object::data, bPoseChannel_Runtime::deform_dual_quat, DEG_debug_print_eval_subdata(), depsgraph, bArmature::edbo, Object::id, ID_IS_LINKED, if(), bPoseChannel::name, ID::name, NULL, Object::pose, pose_channel_flush_to_orig_if_needed(), pose_pchan_get_indexed(), Object::proxy_from, and bPoseChannel::runtime.
Definition at line 1082 of file armature_update.c.
References BLI_assert, DEG_debug_print_eval(), depsgraph, Object::id, ID_IS_LINKED, ID::name, NULL, and Object::proxy_from.
Definition at line 1074 of file armature_update.c.
References BLI_assert, BLI_listbase_is_empty(), bPose::chan_array, bPose::chanbase, DEG_debug_print_eval(), depsgraph, Object::id, ID_IS_LINKED, ID::name, NULL, Object::pose, and Object::proxy_from.
| void BKE_pose_iktree_evaluate | ( | struct Depsgraph * | depsgraph, |
| struct Scene * | scene, | ||
| struct Object * | object, | ||
| int | rootchan_index | ||
| ) |
Definition at line 1003 of file armature_update.c.
References ARM_RESTPOS, BIK_execute_tree(), BKE_scene_frame_get(), BLI_assert, Object::data, DEG_debug_print_eval_subdata(), depsgraph, bArmature::edbo, bArmature::flag, Object::id, if(), bPoseChannel::name, ID::name, NULL, OB_ARMATURE, pose_pchan_get_indexed(), scene, and Object::type.
| bool BKE_pose_minmax | ( | struct Object * | ob, |
| float | r_min[3], | ||
| float | r_max[3], | ||
| bool | use_hidden, | ||
| bool | use_select | ||
| ) |
Definition at line 2865 of file armature.c.
References ARM_NO_CUSTOM, BKE_boundbox_minmax(), BKE_object_boundbox_get(), bPoseChannel::bone, BONE_SELECTED, bPose::chanbase, bPoseChannel::custom, bPoseChannel::custom_tx, Object::data, ListBase::first, Bone::flag, bArmature::flag, minmax_v3v3_v3(), mul_m4_series, mul_v3_m4v3(), bPoseChannel::next, NULL, Object::obmat, PBONE_VISIBLE, PCHAN_CUSTOM_DRAW_SIZE, Object::pose, bPoseChannel::pose_head, bPoseChannel::pose_mat, bPoseChannel::pose_tail, and scale_m4_fl().
Referenced by BKE_object_minmax(), and viewselected_exec().
| void BKE_pose_pchan_index_rebuild | ( | struct bPose * | pose | ) |
Definition at line 805 of file armature_update.c.
References BLI_listbase_count(), bPose::chan_array, bPose::chanbase, ListBase::first, MEM_malloc_arrayN, MEM_SAFE_FREE, and NULL.
Only after leave editmode, duplicating, validating older files, library syncing.
| bmain | May be NULL, only used to tag depsgraph as being dirty... |
Definition at line 2536 of file armature.c.
References animviz_settings_init(), bPose::avs, BKE_object_copy_proxy_drivers(), BKE_pchan_rebuild_bbone_handles(), BKE_pose_channels_clear_with_null_bone(), BKE_pose_channels_hash_make(), BKE_pose_clear_pointers(), BKE_pose_update_constraint_flags(), BLI_findindex(), bArmature::bonebase, bPose::chanbase, bPoseChannel::custom_tx, DEG_relations_tag_update(), ListBase::first, bPose::flag, Object::id, bArmature::layer_protected, LIB_TAG_NO_MAIN, MEM_callocN, bPoseChannel::next, Bone::next, NULL, Object::pose, pose_proxy_sync(), POSE_RECALC, POSE_WAS_REBUILT, Object::proxy, rebuild_pose_bone(), and ID::tag.
Referenced by BKE_library_make_local(), BKE_object_handle_update_ex(), BKE_object_make_proxy(), BKE_pose_ensure(), blender::deg::DepsgraphNodeBuilder::build_rig(), do_versions_after_linking_290(), ED_armature_from_edit(), object_copy_data(), and single_obdata_users().
Definition at line 2498 of file armature.c.
References BKE_armature_find_bone_name(), bPose::chanbase, and LISTBASE_FOREACH.
| void BKE_pose_splineik_evaluate | ( | struct Depsgraph * | depsgraph, |
| struct Scene * | scene, | ||
| struct Object * | object, | ||
| int | rootchan_index | ||
| ) |
Definition at line 1023 of file armature_update.c.
References ARM_RESTPOS, BKE_scene_frame_get(), BKE_splineik_execute_tree(), BLI_assert, Object::data, DEG_debug_print_eval_subdata(), depsgraph, bArmature::edbo, bArmature::flag, Object::id, if(), bPoseChannel::name, ID::name, NULL, OB_ARMATURE, pose_pchan_get_indexed(), scene, and Object::type.
Definition at line 792 of file armature_update.c.
References scene, and splineik_init_tree().
Referenced by BKE_pose_eval_init_ik(), and BKE_pose_where_is().
Definition at line 2739 of file armature.c.
References Bone::arm_head, Bone::arm_mat, ARM_RESTPOS, Bone::arm_tail, BIK_execute_tree(), BIK_init_tree(), BIK_release_tree(), BKE_pose_ensure(), BKE_pose_splineik_init_tree(), BKE_pose_where_is_bone(), BKE_scene_frame_get(), BKE_splineik_execute_tree(), bPoseChannel::bone, bPoseChannel::chan_mat, bPose::chanbase, copy_m4_m4(), copy_v3_v3(), Object::data, depsgraph, bArmature::edbo, ELEM, ListBase::first, bPoseChannel::flag, bArmature::flag, Object::imat, invert_m4_m4(), mul_m4_m4m4(), bPoseChannel::next, NULL, OB_ARMATURE, Object::obmat, Object::pose, POSE_CHAIN, POSE_DONE, bPoseChannel::pose_head, POSE_IKSPLINE, POSE_IKTREE, bPoseChannel::pose_mat, bPoseChannel::pose_tail, scene, and Object::type.
Referenced by apply_armature_pose2bones_exec(), apply_objects_internal(), BKE_object_handle_data_update(), BKE_object_modifier_update_subframe(), object_origin_set_exec(), and special_aftertrans_update__pose().
| void BKE_pose_where_is_bone | ( | struct Depsgraph * | depsgraph, |
| struct Scene * | scene, | ||
| struct Object * | ob, | ||
| struct bPoseChannel * | pchan, | ||
| float | ctime, | ||
| bool | do_extra | ||
| ) |
Definition at line 2673 of file armature.c.
References add_v3_v3(), BKE_armature_mat_bone_to_pose(), BKE_constraints_clear_evalob(), BKE_constraints_make_evalob(), BKE_constraints_solve(), BKE_pchan_calc_mat(), BKE_pose_where_is_bone_tail(), bPoseChannel::bone, BONE_CONNECTED, BONE_NO_CYCLICOFFSET, bPoseChannel::chan_mat, CONSTRAINT_OBTYPE_BONE, bPoseChannel::constraints, copy_v3_v3(), bPose::cyclic_offset, depsgraph, ListBase::first, Bone::flag, bPoseChannel::parent, Object::pose, bPoseChannel::pose_head, bPoseChannel::pose_mat, scene, and unit_m4().
Referenced by BKE_armature_mat_pose_to_bone_ex(), BKE_pose_constraints_evaluate(), BKE_pose_eval_bone(), BKE_pose_where_is(), convert_channels(), execute_scene(), iksolver_execute_tree(), and splineik_execute_tree().
| void BKE_pose_where_is_bone_tail | ( | struct bPoseChannel * | pchan | ) |
Definition at line 2660 of file armature.c.
References add_v3_v3v3(), bPoseChannel::bone, copy_v3_v3(), Bone::length, mul_v3_fl(), bPoseChannel::pose_head, bPoseChannel::pose_mat, and bPoseChannel::pose_tail.
Referenced by BKE_pose_where_is_bone(), and splineik_evaluate_bone().
| void BKE_rotMode_change_values | ( | float | quat[4], |
| float | eul[3], | ||
| float | axis[3], | ||
| float * | angle, | ||
| short | oldMode, | ||
| short | newMode | ||
| ) |
Definition at line 1984 of file armature.c.
References angle(), axis_angle_to_eulO(), axis_angle_to_quat(), eulO_to_axis_angle(), eulO_to_quat(), IS_EQF, normalize_qt(), quat_to_axis_angle(), quat_to_eulO(), ROT_MODE_AXISANGLE, and ROT_MODE_QUAT.
Referenced by pose_bone_rotmode_exec().
| void BKE_splineik_execute_tree | ( | struct Depsgraph * | depsgraph, |
| struct Scene * | scene, | ||
| struct Object * | ob, | ||
| struct bPoseChannel * | pchan_root, | ||
| float | ctime | ||
| ) |
Definition at line 797 of file armature_update.c.
References depsgraph, scene, and splineik_execute_tree().
Referenced by BKE_pose_splineik_evaluate(), and BKE_pose_where_is().
Referenced by armature_autoside_names_exec(), and pose_autoside_names_exec().
| float distfactor_to_bone | ( | const float | vec[3], |
| const float | b1[3], | ||
| const float | b2[3], | ||
| float | rad1, | ||
| float | rad2, | ||
| float | rdist | ||
| ) |
Definition at line 124 of file armature_deform.c.
References Freestyle::a, dot_v3v3(), l, len_squared_v3(), len_squared_v3v3(), normalize_v3(), sqrtf, and sub_v3_v3v3().
Referenced by armature_vert_task_with_dvert(), armdef_accumulate_bone(), dist_bone_deform(), and envelope_bone_weighting().
Definition at line 2059 of file armature.c.
References copy_v3_v3(), and mat3_vec_to_roll().
Referenced by armature_transform_recurse(), do_version_bone_roll_256(), ED_armature_ebone_from_mat3(), and ED_armature_edit_transform().
Definition at line 2072 of file armature.c.
References invert_m3_m3(), mat3_to_quat(), mul_m3_m3m3(), NULL, quat_split_swing_and_twist(), and vec_roll_to_mat3().
Referenced by applyarmature_set_edit_position(), BKE_pchan_bbone_handles_compute(), mat3_to_vec_roll(), and blender::bke::tests::TEST().
Definition at line 2212 of file armature.c.
References nor, normalize_v3_v3(), and vec_roll_to_mat3_normalized().
Referenced by applyarmature_adjust_edit_position(), applyarmature_set_edit_position(), armature_transform_recurse(), BKE_armature_where_is_bone(), make_bbone_spline_matrix(), and mat3_vec_to_roll().
Given v = (v.x, v.y, v.z) our (normalized) bone vector, we want the rotation matrix M from the Y axis (so that M * (0, 1, 0) = v).
a = (v.z, 0, -v.x)We know a is eigenvector of M (so M * a = a). Finally, we have w, such that M * w = (0, 1, 0) (i.e. the vector that will be aligned with Y axis once transformed). We know w is symmetric to v by the Y axis.
w = (-v.x, v.y, -v.z)Solving this, we get (x, y and z being the components of v):
┌ (x^2 * y + z^2) / (x^2 + z^2), x, x * z * (y - 1) / (x^2 + z^2) ┐
M = │ x * (y^2 - 1) / (x^2 + z^2), y, z * (y^2 - 1) / (x^2 + z^2) │
└ x * z * (y - 1) / (x^2 + z^2), z, (x^2 + z^2 * y) / (x^2 + z^2) ┘
This is stable as long as v (the bone) is not too much aligned with +/-Y (i.e. x and z components are not too close to 0).
Since v is normalized, we have x^2 + y^2 + z^2 = 1, hence x^2 + z^2 = 1 - y^2 = (1 - y)(1 + y).
This allows to simplifies M like this:
┌ 1 - x^2 / (1 + y), x, -x * z / (1 + y) ┐
M = │ -x, y, -z │
└ -x * z / (1 + y), z, 1 - z^2 / (1 + y) ┘
Written this way, we see the case v = +Y is no more a singularity. The only one remaining is the bone being aligned with -Y.
Let's handle the asymptotic behavior when bone vector is reaching the limit of y = -1. Each of the four corner elements can vary from -1 to 1, depending on the axis a chosen for doing the rotation. And the "rotation" here is in fact established by mirroring XZ plane by that given axis, then inversing the Y-axis. For sufficiently small x and z, and with y approaching -1, all elements but the four corner ones of M will degenerate. So let's now focus on these corner elements.
We rewrite M so that it only contains its four corner elements, and combine the 1 / (1 + y) factor:
┌ 1 + y - x^2, -x * z ┐
M* = 1 / (1 + y) * │ │
└ -x * z, 1 + y - z^2 ┘
When y is close to -1, computing 1 / (1 + y) will cause severe numerical instability, so we ignore it and normalize M instead. We know y^2 = 1 - (x^2 + z^2), and y < 0, hence y = -sqrt(1 - (x^2 + z^2)).
Since x and z are both close to 0, we apply the binomial expansion to the first order: y = -sqrt(1 - (x^2 + z^2)) = -1 + (x^2 + z^2) / 2. Which gives:
┌ z^2 - x^2, -2 * x * z ┐
M* = 1 / (x^2 + z^2) * │ │
└ -2 * x * z, x^2 - z^2 ┘
Definition at line 2155 of file armature.c.
References axis_angle_normalized_to_mat3(), BLI_ASSERT_UNIT_V3, mul_m3_m3m3(), nor, unit_m3(), x, y, and z.
Referenced by ED_armature_ebone_roll_to_vector(), ED_armature_ebone_to_mat3(), blender::bke::tests::TEST(), and vec_roll_to_mat3().