Blender
V3.3
|
#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 |
#define FOREACH_PCHAN_SELECTED_IN_OBJECT_BEGIN | ( | _ob, | |
_pchan | |||
) |
Definition at line 560 of file BKE_armature.h.
#define FOREACH_PCHAN_SELECTED_IN_OBJECT_END |
Definition at line 564 of file BKE_armature.h.
#define FOREACH_PCHAN_VISIBLE_IN_OBJECT_BEGIN | ( | _ob, | |
_pchan | |||
) |
Definition at line 569 of file BKE_armature.h.
#define FOREACH_PCHAN_VISIBLE_IN_OBJECT_END |
Definition at line 572 of file BKE_armature.h.
#define MAX_BBONE_SUBDIV 32 |
Definition at line 461 of file BKE_armature.h.
#define PBONE_SELECTABLE | ( | arm, | |
bone | |||
) | (PBONE_VISIBLE(arm, bone) && !((bone)->flag & BONE_UNSELECTABLE)) |
Definition at line 554 of file BKE_armature.h.
#define PBONE_SELECTED | ( | arm, | |
bone | |||
) | (((bone)->flag & BONE_SELECTED) & PBONE_VISIBLE(arm, bone)) |
Definition at line 557 of file BKE_armature.h.
#define PBONE_VISIBLE | ( | arm, | |
bone | |||
) |
Definition at line 549 of file BKE_armature.h.
typedef struct BBoneSplineParameters BBoneSplineParameters |
typedef struct BoneParentTransform BoneParentTransform |
typedef struct PoseTarget PoseTarget |
Definition at line 334 of file armature.c.
References BKE_id_new(), and ID_AR.
Referenced by BKE_object_obdata_add_from_type().
Referenced by snap_selected_to_location().
Definition at line 636 of file armature.c.
References BLI_ghash_free(), bArmature::bonehash, and NULL.
Referenced by armature_free_data(), and ED_armature_from_edit().
Definition at line 629 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 | ( | const struct ListBase * | lb | ) |
Referenced by ED_object_data_xform_create_ex().
Definition at line 360 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 2657 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().
Definition at line 374 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 594 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 342 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 2740 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] | ||
) |
Convert Pose-Space Location to Bone-Space Location
Definition at line 1870 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().
Convert World-Space Location to Pose-Space Location
Definition at line 1605 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] | ||
) |
Convert Bone-Space Matrix to Pose-Space Matrix.
Definition at line 1860 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] | ||
) |
Convert Pose-Space Matrix to Bone-Space Matrix.
Definition at line 1849 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_apply_for_pose(), BKE_constraint_mat_convertspace(), BKE_pchan_bbone_spline_params_get(), 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 1892 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 1965 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] | ||
) |
Convert World-Space Matrix to Pose-Space Matrix.
Definition at line 1589 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 675 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 2761 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 556 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().
Updates vectors and matrices on rest-position level, only needed after editing armature itself, now only on reading file.
Definition at line 2263 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, | ||
bool | use_recursion | ||
) |
Recursive part, calculates rest-position of entire tree of children.
Referenced by armature_finalize_restpose().
Simple helper, computes the offset bone matrix: offs_bone = yoffs(b-1) + root(b) + bonemat(b)
.
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 1836 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 | ||
) |
Compute the parent transform using data decoupled from specific data structures.
bone_flag | Bone.flag containing settings. |
offs_bone | delta from parent to current arm_mat (or just arm_mat if no parent). |
parent_arm_mat | arm_mat of parent, or NULL. |
parent_pose_mat | pose_mat of parent, or NULL. |
r_bpt | OUTPUT parent transform. |
Definition at line 1668 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 | ||
) |
Get the current parent transformation for the given pose bone.
Construct the matrices (rot/scale and loc) to apply the PoseChannels into the armature (object) space. I.e. (roughly) the pose_mat(b-1) * yoffs(b-1) * d_root(b) * bone_mat(b)
in the pose_mat(b)= pose_mat(b-1) * yoffs(b-1) * d_root(b) * bone_mat(b) * chan_mat(b)
...function.
This allows to get the transformations of a bone in its object space, before constraints (and IK) get applied (used by pose evaluation code). And reverse: to find pchan transformations needed to place a bone at a given loc/rot/scale in object space (used by interactive transform, and snapping code).
Note that, with the HINGE/NO_SCALE/NO_LOCAL_LOCATION options, the location matrix will differ from the rotation/scale matrix...
Referenced by add_pose_transdata().
void BKE_bone_parent_transform_clear | ( | struct BoneParentTransform * | bpt | ) |
Definition at line 1813 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 1827 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 1820 of file armature.c.
References invert_m4(), invert_v3_safe(), 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 | ( | struct 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 1958 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(), BKE_constraint_apply_for_pose(), 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 | ||
) |
Calculate index and blend factor for the two B-Bone segment nodes affecting the point at 0 <= pos <= 1.
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 | ||
) |
Computes the bezier handle vectors and rolls coming from custom handles.
Definition at line 1190 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_z, BBoneSplineParameters::curve_out_x, BBoneSplineParameters::curve_out_z, BBoneSplineParameters::do_scale, e, BBoneSplineParameters::ease1, BBoneSplineParameters::ease2, blender::robust_pred::epsilon, BBoneSplineParameters::length, blender::math::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 | ||
) |
Get "next" and "prev" bones - these are used for handle calculations.
Definition at line 907 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 | ( | struct bPoseChannel * | pchan | ) |
Compute and cache the B-Bone shape in the channel runtime struct.
Definition at line 1484 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 | ( | struct bPoseChannel * | pchan, |
struct bPoseChannel * | pchan_from | ||
) |
Copy cached B-Bone segments from one channel to another.
Definition at line 1535 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().
int BKE_pchan_bbone_spline_compute | ( | struct BBoneSplineParameters * | param, |
bool | for_deform, | ||
Mat4 * | result_array | ||
) |
Fills the array with the desired amount of bone->segments
elements. This calculation is done within unit bone space.
Definition at line 1350 of file armature.c.
References Freestyle::a, add_v3_v3v3(), BKE_pchan_bbone_handles_compute(), CLAMP_MAX, CLAMP_MIN, copy_v3_fl3(), copy_v3_v3(), BBoneSplineParameters::do_scale, ease_handle_axis(), equalize_cubic_bezier(), evaluate_cubic_bezier(), expf, float(), interpf(), invert_m4_m4(), BBoneSplineParameters::length, blender::math::length(), logf, make_bbone_spline_matrix(), Mat4::mat, MAX_BBONE_SUBDIV, negate_v3(), blender::meshintersect::prev(), BBoneSplineParameters::scale, BBoneSplineParameters::scale_in, BBoneSplineParameters::scale_out, 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, |
bool | rest, | ||
struct BBoneSplineParameters * | r_param | ||
) |
Compute B-Bone spline parameters for the given channel.
Definition at line 933 of file armature.c.
References add_v3_v3v3(), Bone::arm_head, Bone::arm_mat, Bone::arm_tail, BBONE_ADD_PARENT_END_ROLL, Bone::bbone_flag, BBONE_HANDLE_RELATIVE, BBONE_HANDLE_SCALE_ANY, BBONE_HANDLE_SCALE_EASE, BBONE_HANDLE_SCALE_X, BBONE_HANDLE_SCALE_Y, BBONE_HANDLE_SCALE_Z, BBONE_HANDLE_TANGENT, Bone::bbone_next_flag, Bone::bbone_next_type, Bone::bbone_prev_flag, Bone::bbone_prev_type, BBONE_SCALE_EASING, BKE_armature_mat_pose_to_bone(), BKE_pchan_bbone_handles_get(), bPoseChannel::bone, copy_m4_m4(), copy_v3_fl(), copy_v3_fl3(), copy_v3_v3(), BBoneSplineParameters::curve_in_x, bPoseChannel::curve_in_x, Bone::curve_in_x, BBoneSplineParameters::curve_in_z, bPoseChannel::curve_in_z, Bone::curve_in_z, BBoneSplineParameters::curve_out_x, bPoseChannel::curve_out_x, Bone::curve_out_x, BBoneSplineParameters::curve_out_z, bPoseChannel::curve_out_z, Bone::curve_out_z, BBoneSplineParameters::do_scale, BBoneSplineParameters::ease1, bPoseChannel::ease1, Bone::ease1, BBoneSplineParameters::ease2, bPoseChannel::ease2, Bone::ease2, fabsf, invert_m4_m4(), BBoneSplineParameters::length, Bone::length, mat4_to_size(), mul_m4_m4m4(), mul_v3_m4v3(), mul_v3_v3(), next, BBoneSplineParameters::next_bbone, BBoneSplineParameters::next_h, BBoneSplineParameters::next_mat, normalize_m4(), bPoseChannel::pose_head, bPoseChannel::pose_mat, bPoseChannel::pose_tail, blender::meshintersect::prev(), 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, bPoseChannel::scale_in, Bone::scale_in, BBoneSplineParameters::scale_out, bPoseChannel::scale_out, Bone::scale_out, 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, |
bool | rest, | ||
bool | for_deform, | ||
Mat4 * | result_array | ||
) |
Fills the array with the desired amount of bone->segments elements. This calculation is done within unit bone space.
Definition at line 1178 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 | ) |
Convert the loc/rot/size to mat4 (pchan.chan_mat
), used in constraint.c
too.
Definition at line 2457 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 | ( | struct bPoseChannel * | pchan, |
const float | mat[3][3], | ||
bool | use_compat | ||
) |
Same as BKE_object_mat3_to_rot().
Definition at line 1912 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_minmax | ( | const struct Object * | ob, |
const struct bPoseChannel * | pchan, | ||
const bool | use_empty_drawtype, | ||
float | r_min[3], | ||
float | r_max[3] | ||
) |
Calculate the axis-aligned bounds of pchan
in world-space, taking into account custom transform when set.
r_min
and r_max
are expanded to fit pchan
so the caller must initialize them (typically using INIT_MINMAX).
use_empty_drawtype | When enabled, the draw type of empty custom-objects is taken into account when calculating the bounds. |
Referenced by pchan_culling_calc_bsphere().
void BKE_pchan_rebuild_bbone_handles | ( | struct bPose * | pose, |
struct bPoseChannel * | pchan | ||
) |
Update the links for the B-Bone handles from Bone data.
Definition at line 2345 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] | ||
) |
Same as BKE_object_rot_to_mat3().
Referenced by apply_targetless_ik().
void BKE_pchan_to_mat4 | ( | const struct bPoseChannel * | pchan, |
float | r_chanmat[4][4] | ||
) |
Convert the loc/rot/size to r_chanmat (typically bPoseChannel.chan_mat).
Referenced by action_flip_pchan(), pose_mirror_info_init(), and pose_transform_mirror_update().
void BKE_pose_apply_action_all_bones | ( | struct Object * | ob, |
struct bAction * | action, | ||
struct AnimationEvalContext * | anim_eval_context | ||
) |
Evaluate the action and apply it to the pose. Ignore selection state of the bones.
Definition at line 53 of file armature_pose.cc.
References animsys_evaluate_action(), Object::id, and RNA_id_pointer_create().
Referenced by action_preview_render_prepare().
void BKE_pose_apply_action_blend | ( | struct Object * | ob, |
struct bAction * | action, | ||
struct AnimationEvalContext * | anim_eval_context, | ||
float | blend_factor | ||
) |
Definition at line 62 of file armature_pose.cc.
References animsys_blend_in_action(), and ptr.
Referenced by poselib_blend_apply().
void BKE_pose_apply_action_selected_bones | ( | struct Object * | ob, |
struct bAction * | action, | ||
struct AnimationEvalContext * | anim_eval_context | ||
) |
Evaluate the action and apply it to the pose. If any pose bones are selected, only FCurves that relate to those bones are evaluated.
Definition at line 41 of file armature_pose.cc.
References animsys_evaluate_action(), and ptr.
Definition at line 936 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.
Definition at line 2351 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().
Clear pointers of object's pose (needed in remap case, since we cannot always wait for a complete pose rebuild).
Definition at line 2324 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_ob().
void BKE_pose_constraints_evaluate | ( | struct Depsgraph * | depsgraph, |
struct Scene * | scene, | ||
struct Object * | object, | ||
int | pchan_index | ||
) |
Definition at line 890 of file armature_update.c.
References ARM_RESTPOS, BKE_pose_where_is_bone(), BKE_scene_ctime_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.
void BKE_pose_ensure | ( | struct Main * | bmain, |
struct Object * | ob, | ||
struct bArmature * | arm, | ||
bool | do_id_user | ||
) |
Ensures object's pose is rebuilt if needed.
bmain | May be NULL, only used to tag depsgraph as being dirty. |
Definition at line 2419 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 962 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 854 of file armature_update.c.
References Bone::arm_head, Bone::arm_mat, ARM_RESTPOS, Bone::arm_tail, BKE_pose_where_is_bone(), BKE_scene_ctime_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 1039 of file armature_update.c.
References BIK_release_tree(), BKE_scene_ctime_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 1030 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 837 of file armature_update.c.
References ARM_RESTPOS, BIK_init_tree(), BKE_pose_splineik_init_tree(), BKE_scene_ctime_get(), BLI_assert, Object::data, DEG_debug_print_eval(), depsgraph, bArmature::flag, Object::id, if(), ID::name, OB_ARMATURE, scene, and Object::type.
void BKE_pose_iktree_evaluate | ( | struct Depsgraph * | depsgraph, |
struct Scene * | scene, | ||
struct Object * | object, | ||
int | rootchan_index | ||
) |
Definition at line 981 of file armature_update.c.
References ARM_RESTPOS, BIK_execute_tree(), BKE_scene_ctime_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 | ||
) |
Calculate the axis aligned bounds of the pose of ob
in world-space.
r_min
and r_max
are expanded to fit ob->pose
so the caller must initialize them (typically using INIT_MINMAX).
Definition at line 2711 of file armature.c.
References BKE_pchan_minmax(), bPoseChannel::bone, BONE_SELECTED, bPose::chanbase, Object::data, ListBase::first, Bone::flag, bPoseChannel::next, PBONE_VISIBLE, and Object::pose.
Referenced by BKE_object_minmax(), and viewselected_exec().
Definition at line 787 of file armature_update.c.
References BLI_listbase_count(), bPose::chan_array, bPose::chanbase, ListBase::first, MEM_malloc_arrayN, MEM_SAFE_FREE, and NULL.
void BKE_pose_rebuild | ( | struct Main * | bmain, |
struct Object * | ob, | ||
struct bArmature * | arm, | ||
bool | do_id_user | ||
) |
Only after leave edit-mode, duplicating, validating older files, library syncing.
bmain | May be NULL, only used to tag depsgraph as being dirty. |
Definition at line 2362 of file armature.c.
References animviz_settings_init(), bPose::avs, BKE_pchan_rebuild_bbone_handles(), BKE_pose_channels_clear_with_null_bone(), BKE_pose_channels_hash_ensure(), BKE_pose_clear_pointers(), BKE_pose_update_constraint_flags(), BLI_findindex(), bArmature::bonebase, bPose::chanbase, counter, bPoseChannel::custom_tx, DEG_relations_tag_update(), ListBase::first, bPose::flag, MEM_callocN, bPoseChannel::next, Bone::next, NULL, Object::pose, POSE_RECALC, POSE_WAS_REBUILT, and rebuild_pose_bone().
Referenced by BKE_library_make_local(), BKE_object_handle_update_ex(), 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 2332 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 1001 of file armature_update.c.
References ARM_RESTPOS, BKE_scene_ctime_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 774 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 2538 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_ctime_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 | ||
) |
The main armature solver, does all constraints excluding IK.
pchan | pose-channel - validated, as having bone and parent pointer. |
do_extra | when zero skips loc/size/rot, constraints and strip modifiers. |
Definition at line 2474 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 | ) |
Calculate tail of pose-channel.
Definition at line 2465 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 | ||
) |
Rotation Mode Conversions - Used for Pose-Channels + Objects.
Called from RNA when rotation mode changes
Definition at line 1983 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 779 of file armature_update.c.
References depsgraph, scene, and splineik_execute_tree().
Referenced by BKE_pose_splineik_evaluate(), and BKE_pose_where_is().
Finds the best possible extension to the name on a particular axis. (For renaming, check for unique names afterwards)
strip_number | removes number extensions (TODO: not used). |
axis | The axis to name on. |
head | The head co-ordinate of the bone on the specified axis. |
tail | The tail co-ordinate of the bone on the specified axis. |
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 | ||
) |
Using vec
with dist to bone b1 - b2
.
Definition at line 108 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().
Computes vector and roll based on a rotation. "mat" must contain only a rotation, and no scaling.
Definition at line 2056 of file armature.c.
References copy_v3_v3(), and mat3_vec_to_roll().
Referenced by armature_transform_recurse(), correct_bone_roll_value(), do_version_bone_roll_256(), ED_armature_ebone_from_mat3(), and ED_armature_edit_transform().
Computes roll around the vector that best approximates the matrix. If vec
is the Y vector from purely rotational mat
, result should be exact.
Definition at line 2067 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 2211 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(), correct_bone_roll_value(), make_bbone_spline_matrix(), and mat3_vec_to_roll().
Calculates the rest matrix of a bone based on its vector and a roll around that vector.
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 use a different approach based on x and z as inputs. 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 second order: y = -sqrt(1 - (x^2 + z^2)) = -1 + (x^2 + z^2) / 2 + (x^2 + z^2)^2 / 8
, which allows eliminating the problematic 1
constant.
A first order expansion allows simplifying to this, but second order is more precise:
┌ z^2 - x^2, -2 * x * z ┐ M* = 1 / (x^2 + z^2) * │ │ └ -2 * x * z, x^2 - z^2 ┘
P.S. In the end, this basically is a heavily optimized version of Damped Track +Y.
Definition at line 2082 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::find_flip_boundary(), blender::bke::tests::test_vec_roll_to_mat3_normalized(), and vec_roll_to_mat3().