|
Blender
V2.93
|
#include <ctype.h>#include <float.h>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "MEM_guardedalloc.h"#include "BLI_alloca.h"#include "BLI_ghash.h"#include "BLI_listbase.h"#include "BLI_math.h"#include "BLI_string.h"#include "BLI_utildefines.h"#include "BLT_translation.h"#include "DNA_defaults.h"#include "DNA_armature_types.h"#include "DNA_constraint_types.h"#include "DNA_listBase.h"#include "DNA_object_types.h"#include "DNA_scene_types.h"#include "BKE_action.h"#include "BKE_anim_data.h"#include "BKE_anim_visualization.h"#include "BKE_armature.h"#include "BKE_constraint.h"#include "BKE_curve.h"#include "BKE_idprop.h"#include "BKE_idtype.h"#include "BKE_lib_id.h"#include "BKE_lib_query.h"#include "BKE_main.h"#include "BKE_object.h"#include "BKE_scene.h"#include "DEG_depsgraph_build.h"#include "DEG_depsgraph_query.h"#include "BIK_api.h"#include "BLO_read_write.h"#include "CLG_log.h"Go to the source code of this file.
Functions | |
Prototypes | |
| static void | copy_bonechildren (Bone *bone_dst, const Bone *bone_src, const Bone *bone_src_act, Bone **r_bone_dst_act, const int flag) |
| static void | copy_bonechildren_custom_handles (Bone *bone_dst, bArmature *arm_dst) |
Generic Data-Level Functions | |
| bArmature * | BKE_armature_add (Main *bmain, const char *name) |
| bArmature * | BKE_armature_from_object (Object *ob) |
| int | BKE_armature_bonelist_count (ListBase *lb) |
| void | BKE_armature_bonelist_free (ListBase *lb, const bool do_id_user) |
| void | BKE_armature_editbonelist_free (ListBase *lb, const bool do_id_user) |
Armature Transform Copy | |
| static void | copy_bone_transform (Bone *bone_dst, const Bone *bone_src) |
| void | BKE_armature_copy_bone_transforms (bArmature *armature_dst, const bArmature *armature_src) |
Armature Transform by 4x4 Matrix | |
| |
| static void | armature_transform_recurse (ListBase *bonebase, const float mat[4][4], const bool do_props, const float mat3[3][3], const float scale, const Bone *bone_parent, const float arm_mat_parent_inv[4][4]) |
| void | BKE_armature_transform (bArmature *arm, const float mat[4][4], const bool do_props) |
Armature Bone Find by Name | |
Using fast GHash lookups when available. | |
| static Bone * | get_named_bone_bonechildren (ListBase *lb, const char *name) |
| Bone * | BKE_armature_find_bone_name (bArmature *arm, const char *name) |
| static void | armature_bone_from_name_insert_recursive (GHash *bone_hash, ListBase *lb) |
| static GHash * | armature_bone_from_name_map (bArmature *arm) |
| void | BKE_armature_bone_hash_make (bArmature *arm) |
| void | BKE_armature_bone_hash_free (bArmature *arm) |
Armature Bone Flags | |
| bool | BKE_armature_bone_flag_test_recursive (const Bone *bone, int flag) |
Armature Layer Refresh Used | |
| static void | armature_refresh_layer_used_recursive (bArmature *arm, ListBase *bones) |
| void | BKE_armature_refresh_layer_used (struct Depsgraph *depsgraph, struct bArmature *arm) |
| bool | bone_autoside_name (char name[MAXBONENAME], int UNUSED(strip_number), short axis, float head, float tail) |
Armature B-Bone Support | |
| static void | equalize_cubic_bezier (const float control[4][3], int temp_segments, int final_segments, float *r_t_points) |
| static void | evaluate_cubic_bezier (const float control[4][3], float t, float r_pos[3], float r_tangent[3]) |
| void | BKE_pchan_bbone_handles_get (bPoseChannel *pchan, bPoseChannel **r_prev, bPoseChannel **r_next) |
| void | BKE_pchan_bbone_spline_params_get (struct bPoseChannel *pchan, const bool rest, struct BBoneSplineParameters *param) |
| void | BKE_pchan_bbone_spline_setup (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) |
| static void | make_bbone_spline_matrix (BBoneSplineParameters *param, const float scalemats[2][4][4], const float pos[3], const float axis[3], float roll, float scalex, float scaley, float result[4][4]) |
| static void | ease_handle_axis (const float deriv1[3], const float deriv2[3], float r_axis[3]) |
| int | BKE_pchan_bbone_spline_compute (BBoneSplineParameters *param, const bool for_deform, Mat4 *result_array) |
| static void | allocate_bbone_cache (bPoseChannel *pchan, int segments) |
| void | BKE_pchan_bbone_segments_cache_compute (bPoseChannel *pchan) |
| void | BKE_pchan_bbone_segments_cache_copy (bPoseChannel *pchan, bPoseChannel *pchan_from) |
| void | BKE_pchan_bbone_deform_segment_index (const bPoseChannel *pchan, float pos, int *r_index, float *r_blend_next) |
Bone Space to Space Conversion API | |
| void | BKE_armature_mat_world_to_pose (Object *ob, const float inmat[4][4], float outmat[4][4]) |
| void | BKE_armature_loc_world_to_pose (Object *ob, const float inloc[3], float outloc[3]) |
Bone Matrix Calculation API | |
| void | BKE_bone_offset_matrix_get (const Bone *bone, float offs_bone[4][4]) |
| void | BKE_bone_parent_transform_calc_from_pchan (const bPoseChannel *pchan, 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], BoneParentTransform *r_bpt) |
| 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_armature_mat_pose_to_bone (bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4]) |
| void | BKE_armature_mat_bone_to_pose (bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4]) |
| void | BKE_armature_loc_pose_to_bone (bPoseChannel *pchan, const float inloc[3], float outloc[3]) |
Bone Matrix Read/Write API | |
High level functions for transforming bones and reading the transform values. | |
| void | BKE_armature_mat_pose_to_bone_ex (struct Depsgraph *depsgraph, Object *ob, bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4]) |
| void | BKE_pchan_mat3_to_rot (bPoseChannel *pchan, const float mat[3][3], bool use_compat) |
| void | BKE_pchan_rot_to_mat3 (const bPoseChannel *pchan, float r_mat[3][3]) |
| void | BKE_pchan_apply_mat4 (bPoseChannel *pchan, const float mat[4][4], bool use_compat) |
| void | BKE_armature_mat_pose_to_delta (float delta_mat[4][4], float pose_mat[4][4], float arm_mat[4][4]) |
Rotation Mode Conversions | |
Used for Objects and Pose Channels, since both can have multiple rotation representations. | |
| void | BKE_rotMode_change_values (float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode) |
Bone Vector, Roll Conversion | |
Used for Objects and Pose Channels, since both can have multiple rotation representations. How it WorksThis is the bone transformation trick; they're hierarchical so each bone(b) is in the coord system of bone(b-1): arm_mat(b)= arm_mat(b-1) * yoffs(b-1) * d_root(b) * bone_mat(b) -> yoffs is just the y axis translation in parent's coord system -> d_root is the translation of the bone root, also in parent's coord system pose_mat(b)= pose_mat(b-1) * yoffs(b-1) * d_root(b) * bone_mat(b) * chan_mat(b) we then - in init deform - store the deform in chan_mat, such that: pose_mat(b)= arm_mat(b) * chan_mat(b) | |
| 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 | vec_roll_to_mat3_normalized (const float nor[3], const float roll, float r_mat[3][3]) |
| void | vec_roll_to_mat3 (const float vec[3], const float roll, float r_mat[3][3]) |
Armature Bone Matrix Calculation (Recursive) | |
| void | BKE_armature_where_is_bone (Bone *bone, const Bone *bone_parent, const bool use_recursion) |
| void | BKE_armature_where_is (bArmature *arm) |
Pose Rebuild | |
| static void | pose_proxy_sync (Object *ob, Object *from, int layer_protected) |
| static int | rebuild_pose_bone (bPose *pose, Bone *bone, bPoseChannel *parchan, int counter, Bone **r_last_visited_bone_p) |
| void | BKE_pose_clear_pointers (bPose *pose) |
| void | BKE_pose_remap_bone_pointers (bArmature *armature, bPose *pose) |
| static bPoseChannel * | pose_channel_find_bone (bPose *pose, Bone *bone) |
| void | BKE_pchan_rebuild_bbone_handles (bPose *pose, bPoseChannel *pchan) |
| void | BKE_pose_channels_clear_with_null_bone (bPose *pose, const bool do_id_user) |
| void | BKE_pose_rebuild (Main *bmain, Object *ob, bArmature *arm, const bool do_id_user) |
| void | BKE_pose_ensure (Main *bmain, Object *ob, bArmature *arm, const bool do_id_user) |
Pose Solver | |
| void | BKE_pchan_to_mat4 (const bPoseChannel *pchan, float r_chanmat[4][4]) |
| void | BKE_pchan_calc_mat (bPoseChannel *pchan) |
| void | BKE_pose_where_is_bone_tail (bPoseChannel *pchan) |
| void | BKE_pose_where_is_bone (struct Depsgraph *depsgraph, Scene *scene, Object *ob, bPoseChannel *pchan, float ctime, bool do_extra) |
| void | BKE_pose_where_is (struct Depsgraph *depsgraph, Scene *scene, Object *ob) |
Calculate Bounding Box (Armature & Pose) | |
| static int | minmax_armature (Object *ob, float r_min[3], float r_max[3]) |
| static void | boundbox_armature (Object *ob) |
| BoundBox * | BKE_armature_boundbox_get (Object *ob) |
| bool | BKE_pose_minmax (Object *ob, float r_min[3], float r_max[3], bool use_hidden, bool use_select) |
Graph Evaluation | |
| bPoseChannel * | BKE_armature_ik_solver_find_root (bPoseChannel *pchan, bKinematicConstraint *data) |
| bPoseChannel * | BKE_armature_splineik_solver_find_root (bPoseChannel *pchan, bSplineIKConstraint *data) |
Variables | |
| static CLG_LogRef | LOG = {"bke.armature"} |
|
static |
Definition at line 1405 of file armature.c.
References 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(), MEM_malloc_arrayN, and bPoseChannel::runtime.
Referenced by BKE_pchan_bbone_segments_cache_compute(), and BKE_pchan_bbone_segments_cache_copy().
|
static |
Definition at line 255 of file armature.c.
References bArmature::act_bone, bArmature::act_edbone, bArmature::adt, BKE_animdata_blend_read_data(), BKE_armature_bone_hash_make(), BLO_read_data_address, BLO_read_list(), bArmature::bonebase, bArmature::bonehash, direct_link_bones(), bArmature::edbo, LISTBASE_FOREACH, bArmature::needs_flush_to_id, and NULL.
|
static |
Definition at line 303 of file armature.c.
References bArmature::bonebase, expand_bones(), and LISTBASE_FOREACH.
|
static |
Definition at line 286 of file armature.c.
References bArmature::bonebase, lib_link_bones(), and LISTBASE_FOREACH.
|
static |
Definition at line 212 of file armature.c.
References bArmature::act_edbone, bArmature::adt, BKE_animdata_blend_write(), BKE_id_blend_write(), BLO_write_id_struct, BLO_write_is_undo(), bArmature::bonebase, bArmature::bonehash, bArmature::edbo, bArmature::id, LISTBASE_FOREACH, bArmature::needs_flush_to_id, NULL, ID::us, and write_bone().
Definition at line 622 of file armature.c.
References BLI_ghash_insert(), and LISTBASE_FOREACH.
Referenced by armature_bone_from_name_map().
Create a (name -> bone) map.
Definition at line 636 of file armature.c.
References armature_bone_from_name_insert_recursive(), BKE_armature_bonelist_count(), BLI_ghash_str_new_ex(), and bArmature::bonebase.
Referenced by BKE_armature_bone_hash_make().
|
static |
Only copy internal data of Armature ID from source to already allocated/initialized destination. You probably never want to use that directly, use BKE_id_copy or BKE_id_copy_ex for typical needs.
WARNING! This function will not handle ID user count!
| flag | Copying options (see BKE_lib_id.h's LIB_ID_COPY_... flags for more). |
Definition at line 110 of file armature.c.
References bArmature::act_bone, bArmature::act_edbone, BKE_armature_bone_hash_make(), BLI_duplicatelist(), bArmature::bonebase, bArmature::bonehash, copy_bonechildren(), copy_bonechildren_custom_handles(), bArmature::edbo, ListBase::first, LIB_ID_CREATE_NO_USER_REFCOUNT, Bone::next, NULL, and Bone::parent.
|
static |
Definition at line 178 of file armature.c.
References armature_foreach_id_bone(), armature_foreach_id_editbone(), bArmature::bonebase, data, bArmature::edbo, LISTBASE_FOREACH, and NULL.
|
static |
Definition at line 162 of file armature.c.
References BKE_lib_query_idpropertiesForeachIDLink_callback(), Bone::childbase, data, IDP_foreach_property(), IDP_TYPE_FILTER_ID, LISTBASE_FOREACH, and Bone::prop.
Referenced by armature_foreach_id().
|
static |
Definition at line 172 of file armature.c.
References BKE_lib_query_idpropertiesForeachIDLink_callback(), data, IDP_foreach_property(), IDP_TYPE_FILTER_ID, and EditBone::prop.
Referenced by armature_foreach_id().
|
static |
Free (or release) any data used by this armature (does not free the armature itself).
Definition at line 147 of file armature.c.
References BKE_armature_bone_hash_free(), BKE_armature_bonelist_free(), BKE_armature_editbonelist_free(), bArmature::bonebase, bArmature::edbo, MEM_freeN, and NULL.
|
static |
Definition at line 92 of file armature.c.
References BLI_assert, DNA_struct_default_get, MEMCMP_STRUCT_AFTER_IS_ZERO, and MEMCPY_STRUCT_AFTER.
Definition at line 682 of file armature.c.
References bArmature::layer_used, and LISTBASE_FOREACH.
Referenced by BKE_armature_refresh_layer_used().
|
static |
Helper for ED_armature_transform
Definition at line 485 of file armature.c.
References Bone::arm_tail, atan2f, BKE_armature_where_is_bone(), BLI_listbase_is_empty(), copy_m3_m4(), copy_v3_v3(), invert_m3(), invert_m4_m4(), LISTBASE_FOREACH, mat3_to_vec_roll(), mul_m3_m3m3(), mul_m4_v3(), mul_mat3_m4_v3(), NULL, sub_v3_v3v3(), and vec_roll_to_mat3().
Referenced by BKE_armature_transform().
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 Bone * | bone, |
| int | flag | ||
| ) |
Definition at line 665 of file armature.c.
References Bone::flag, and Bone::parent.
| void BKE_armature_bone_hash_free | ( | 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 | ( | 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 | ( | 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 | ( | 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().
Definition at line 464 of file armature.c.
References BLI_assert, bArmature::bonebase, copy_bone_transform(), ListBase::first, Bone::next, and NULL.
| void BKE_armature_editbonelist_free | ( | 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().
| bPoseChannel* BKE_armature_ik_solver_find_root | ( | bPoseChannel * | pchan, |
| 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 | ( | 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 | ( | 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 | ( | 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, |
| Object * | ob, | ||
| 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().
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.
| bPoseChannel* BKE_armature_splineik_solver_find_root | ( | bPoseChannel * | pchan, |
| 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 | ( | 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().
Recursive part, calculates rest-position of entire tree of children.
Definition at line 2230 of file armature.c.
References Bone::arm_mat, BKE_bone_offset_matrix_get(), Bone::bone_mat, Bone::childbase, copy_m4_m3(), copy_v3_v3(), ListBase::first, Bone::head, len_v3(), Bone::length, mul_m4_m4m4(), Bone::next, Bone::roll, Bone::segments, sub_v3_v3v3(), Bone::tail, vec_roll_to_mat3(), Bone::xwidth, and Bone::zwidth.
Referenced by armature_transform_recurse(), and BKE_armature_where_is().
Definition at line 1577 of file armature.c.
References BLI_assert, Bone::bone_mat, copy_m4_m3(), copy_v3_v3(), Bone::head, Bone::length, NULL, and Bone::parent.
Referenced by BKE_armature_where_is_bone(), and BKE_bone_parent_transform_calc_from_pchan().
| 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], | ||
| 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 bPoseChannel * | pchan, |
| BoneParentTransform * | r_bpt | ||
| ) |
Definition at line 1609 of file armature.c.
References Bone::arm_mat, BKE_bone_offset_matrix_get(), BKE_bone_parent_transform_calc_from_matrices(), bPoseChannel::bone, Bone::flag, Bone::inherit_scale_mode, NULL, bPoseChannel::parent, Bone::parent, and bPoseChannel::pose_mat.
Referenced by BKE_armature_mat_bone_to_pose(), and BKE_armature_mat_pose_to_bone().
| 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 bPoseChannel * | pchan, |
| float | pos, | ||
| int * | r_index, | ||
| float * | r_blend_next | ||
| ) |
Calculate index and blend factor for the two B-Bone segment nodes affecting the point at 0 <= pos <= 1.
Definition at line 1504 of file armature.c.
References blend(), bPoseChannel::bone, CLAMP, float(), floorf, pos, and Bone::segments.
| 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 | ( | bPoseChannel * | pchan, |
| bPoseChannel ** | r_prev, | ||
| 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 | ( | 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 * | 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 | ( | 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 | ( | 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 bPoseChannel * | pchan, |
| float | r_mat[3][3] | ||
| ) |
Same as BKE_object_rot_to_mat3().
Definition at line 1923 of file armature.c.
References axis_angle_to_mat3(), bPoseChannel::eul, eulO_to_mat3(), normalize_qt_qt(), bPoseChannel::quat, quat_to_mat3(), ROT_MODE_AXISANGLE, bPoseChannel::rotAngle, bPoseChannel::rotAxis, and bPoseChannel::rotmode.
Referenced by BKE_pchan_to_mat4().
| void BKE_pchan_to_mat4 | ( | const bPoseChannel * | pchan, |
| float | r_chanmat[4][4] | ||
| ) |
Convert the loc/rot/size to r_chanmat (typically bPoseChannel.chan_mat).
Definition at line 2626 of file armature.c.
References BKE_pchan_rot_to_mat3(), bPoseChannel::bone, BONE_CONNECTED, copy_m4_m3(), copy_v3_v3(), Bone::flag, bPoseChannel::loc, mul_m3_m3m3(), NULL, bPoseChannel::size, and size_to_mat3().
Referenced by BKE_pchan_calc_mat().
| void BKE_pose_channels_clear_with_null_bone | ( | 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().
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().
| bool BKE_pose_minmax | ( | 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().
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.
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, |
| Scene * | scene, | ||
| Object * | ob, | ||
| 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 | ( | 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().
| bool bone_autoside_name | ( | char | name[MAXBONENAME], |
| int | UNUSEDstrip_number, | ||
| short | axis, | ||
| float | head, | ||
| float | tail | ||
| ) |
Definition at line 717 of file armature.c.
References basename(), BLI_snprintf(), BLI_strncpy(), ELEM, IS_EQF, len, and MAXBONENAME.
|
static |
Definition at line 2837 of file armature.c.
References Object_Runtime::bb, BKE_boundbox_init_from_minmax(), BOUNDBOX_DIRTY, BoundBox::flag, INIT_MINMAX, max, MEM_callocN, min, minmax_armature(), NULL, and Object::runtime.
Referenced by BKE_armature_boundbox_get().
Definition at line 447 of file armature.c.
References Bone::arm_head, Bone::arm_mat, Bone::arm_roll, Bone::arm_tail, Bone::bone_mat, copy_m3_m3(), copy_m4_m4(), copy_v3_v3(), Bone::head, Bone::roll, and Bone::tail.
Referenced by BKE_armature_copy_bone_transforms().
|
static |
Definition at line 396 of file armature.c.
References BLI_duplicatelist(), Bone::childbase, ListBase::first, IDP_CopyProperty_ex(), Bone::next, Bone::parent, and Bone::prop.
Referenced by armature_copy_data().
Definition at line 424 of file armature.c.
References Bone::bbone_next, Bone::bbone_prev, BKE_armature_find_bone_name(), Bone::childbase, ListBase::first, Bone::name, and Bone::next.
Referenced by armature_copy_data().
|
static |
Definition at line 237 of file armature.c.
References Bone::bbone_next, Bone::bbone_prev, BLO_read_data_address, BLO_read_list(), BONE_DRAW_ACTIVE, BONE_DRAW_LOCKED_WEIGHT, Bone::childbase, Bone::flag, IDP_BlendDataRead, LISTBASE_FOREACH, Bone::parent, and Bone::prop.
Referenced by armature_blend_read_data().
|
static |
Definition at line 1290 of file armature.c.
References copy_v3_v3(), len_squared_v3(), madd_v3_v3fl(), and sqrtf.
Referenced by BKE_pchan_bbone_spline_compute().
|
static |
Definition at line 853 of file armature.c.
References BKE_curve_forward_diff_bezier(), BLI_array_alloca, float(), and len_v3v3().
Referenced by BKE_pchan_bbone_spline_compute().
|
static |
Definition at line 902 of file armature.c.
References interp_v3_v3v3(), madd_v3_v3v3fl(), sub_v3_v3v3(), and t.
Referenced by BKE_pchan_bbone_spline_compute().
|
static |
Definition at line 294 of file armature.c.
References Bone::childbase, IDP_BlendReadExpand(), LISTBASE_FOREACH, and Bone::prop.
Referenced by armature_blend_read_expand().
Definition at line 587 of file armature.c.
References Bone::childbase, ListBase::first, Bone::name, Bone::next, NULL, and STREQ.
Referenced by BKE_armature_find_bone_name().
|
static |
Definition at line 277 of file armature.c.
References Bone::childbase, IDP_BlendReadLib(), LISTBASE_FOREACH, and Bone::prop.
Referenced by armature_blend_read_lib().
|
static |
Definition at line 1263 of file armature.c.
References copy_m4_m3(), copy_v3_v3(), BBoneSplineParameters::do_scale, mul_m4_series, mul_v3_fl(), pos, result, and vec_roll_to_mat3().
Referenced by BKE_pchan_bbone_spline_compute().
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 2823 of file armature.c.
References BLI_listbase_is_empty(), bPose::chanbase, ListBase::first, minmax_v3v3_v3(), bPoseChannel::next, Object::pose, bPoseChannel::pose_head, and bPoseChannel::pose_tail.
Referenced by boundbox_armature().
|
static |
Find the matching pose channel using the bone name, if not NULL.
Definition at line 2506 of file armature.c.
References BKE_pose_channel_find_name(), Bone::name, and NULL.
Referenced by BKE_pchan_rebuild_bbone_handles().
Definition at line 2288 of file armature.c.
References bPose::active_group, bPose::agroups, bPoseChannel::bbone_next, bPoseChannel::bbone_prev, BKE_constraint_typeinfo_get(), BKE_constraints_copy(), BKE_constraints_proxylocal_extract(), BKE_pose_channel_find_name(), BKE_pose_channel_free(), BKE_pose_channel_runtime_reset_on_copy(), BKE_pose_rest(), BLI_duplicatelist(), BLI_freelistN(), BLI_movelisttolist(), bPoseChannel::bone, bPose::chanbase, bPoseChannel::child, CLOG_ERROR, bPoseChannel::constraints, bPoseChannel::custom, bPoseChannel::custom_tx, error(), ListBase::first, bConstraintTypeInfo::flush_constraint_targets, from, bConstraintTypeInfo::get_constraint_targets, Object::id, id_us_plus(), IDP_CopyProperty(), IDP_FreeProperty(), IDP_SyncGroupValues(), Bone::layer, LOG, bPoseChannel::mpath, bPoseChannel::name, bPoseChannel::next, bConstraint::next, bConstraintTarget::next, NULL, bPoseChannel::parent, Object::pose, bPoseChannel::prev, bPoseChannel::prop, bPoseChannel::runtime, bConstraintTarget::tar, and UNLIKELY.
Referenced by BKE_pose_rebuild().
|
static |
| r_last_visited_bone_p | The last bone handled by the last call to this function. |
Definition at line 2444 of file armature.c.
References BKE_pose_channel_find_name(), BKE_pose_channel_verify(), BLI_insertlinkafter(), BLI_remlink(), bPoseChannel::bone, BONE_CONNECTED, bPose::chanbase, bPoseChannel::child, Bone::childbase, ListBase::first, Bone::flag, Bone::name, Bone::next, NULL, bPoseChannel::parent, and bPoseChannel::prev.
Referenced by BKE_pose_rebuild().
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().
|
static |
Definition at line 192 of file armature.c.
References BLO_write_struct, Bone::childbase, IDP_BlendWrite(), LISTBASE_FOREACH, Bone::prop, and Bone::size.
Referenced by armature_blend_write().
| IDTypeInfo IDType_ID_AR |
Definition at line 311 of file armature.c.
|
static |
Definition at line 72 of file armature.c.
Referenced by pose_proxy_sync().