80 const Bone *bone_src_act,
81 Bone **r_bone_dst_act,
115 Bone *bone_src, *bone_dst;
127 for (bone_src = armature_src->
bonebase.
first; bone_src; bone_src = bone_src->
next) {
130 bone_dst = bone_dst->
next;
133 armature_dst->
act_bone = bone_dst_act;
138 for (bone_dst = armature_dst->
bonebase.
first; bone_dst; bone_dst = bone_dst->
next) {
155 if (armature->
edbo) {
317 .name_plural =
"armatures",
326 .foreach_cache =
NULL,
334 .blend_read_undo_preserve =
NULL,
336 .lib_override_apply_post =
NULL,
375 for (bone = lb->
first; bone; bone = bone->
next) {
388 if (edit_bone->prop) {
397 const Bone *bone_src,
398 const Bone *bone_src_act,
399 Bone **r_bone_dst_act,
402 Bone *bone_src_child, *bone_dst_child;
404 if (bone_src == bone_src_act) {
405 *r_bone_dst_act = bone_dst;
408 if (bone_src->
prop) {
418 bone_src_child = bone_src_child->
next, bone_dst_child = bone_dst_child->
next) {
419 bone_dst_child->
parent = bone_dst;
420 copy_bonechildren(bone_dst_child, bone_src_child, bone_src_act, r_bone_dst_act, flag);
426 Bone *bone_dst_child;
436 bone_dst_child = bone_dst_child->
next) {
468 while (bone_dst !=
NULL) {
471 bone_dst = bone_dst->
next;
472 bone_src = bone_src->
next;
486 const float mat[4][4],
489 const float mat3[3][3],
492 const Bone *bone_parent,
493 const float arm_mat_parent_inv[4][4])
502 float roll_mat3_pre[3][3];
507 if (bone->parent ==
NULL) {
532 float roll_mat3_post[3][3], delta_mat3[3][3];
537 mul_m3_m3m3(delta_mat3, roll_mat3_post, roll_mat3_pre);
538 bone->roll =
atan2f(delta_mat3[2][0], delta_mat3[2][2]);
544 float arm_mat3[3][3];
550 bone->rad_head *= scale;
551 bone->rad_tail *= scale;
555 bone->xwidth *= scale;
556 bone->zwidth *= scale;
560 float arm_mat_inv[4][4];
589 Bone *curBone, *rbone;
591 for (curBone = lb->
first; curBone; curBone = curBone->
next) {
667 if (bone->
flag & flag) {
718 char name[
MAXBONENAME],
int UNUSED(strip_number),
short axis,
float head,
float tail)
722 char extension[5] =
"";
742 strcpy(extension,
"Bot");
745 strcpy(extension,
"Top");
750 strcpy(extension,
"Bot");
753 strcpy(extension,
"Top");
757 else if (axis == 1) {
761 strcpy(extension,
"Fr");
764 strcpy(extension,
"Bk");
769 strcpy(extension,
"Fr");
772 strcpy(extension,
"Bk");
780 strcpy(extension,
"R");
783 strcpy(extension,
"L");
788 strcpy(extension,
"R");
792 strcpy(extension,
"L");
862 for (
int i = 0; i < 3; i++) {
875 for (
int i = 0; i < temp_segments; i++) {
876 pdist[i + 1] = pdist[i] +
len_v3v3(coords[i], coords[i + 1]);
880 float dist_step = pdist[temp_segments] / final_segments;
882 r_t_points[0] = 0.0f;
884 for (
int i = 1, nr = 1; i <= final_segments; i++) {
885 float dist = i * dist_step;
888 while ((nr < temp_segments) && (dist >= pdist[nr])) {
892 float fac = (pdist[nr] - dist) / (pdist[nr] - pdist[nr - 1]);
894 r_t_points[i] = (nr - fac) / temp_segments;
897 r_t_points[final_segments] = 1.0f;
939 *r_next = pchan->
child;
954 float imat[4][4], posemat[4][4];
957 memset(param, 0,
sizeof(*param));
968 if (
fabsf(scale[0] - scale[1]) > 1e-6f ||
fabsf(scale[1] - scale[2]) > 1e-6f) {
1136 const bool for_deform,
1163 *r_roll1 = *r_roll2 = 0.0f;
1219 const float hlength1 = param->
ease1 * circle_factor;
1220 const float hlength2 = param->
ease2 * circle_factor;
1243 *r_roll1 += param->
roll1;
1244 *r_roll2 += param->
roll2;
1252 const float xscale_correction = (param->
do_scale) ? param->
scale[0] : 1.0f;
1253 const float yscale_correction = (param->
do_scale) ? param->
scale[2] : 1.0f;
1255 h1[0] += param->
curve_in_x * xscale_correction;
1256 h1[2] += param->
curve_in_y * yscale_correction;
1264 const float scalemats[2][4][4],
1266 const float axis[3],
1292 const float gap = 0.1f;
1297 float ratio = len1 / len2;
1299 if (ratio < gap * gap) {
1307 const bool for_deform,
1310 float scalemats[2][4][4];
1311 float bezt_controls[4][3];
1312 float h1[3], roll1, h2[3], roll2, prev[3], cur[3], axis[3];
1328 add_v3_v3v3(bezt_controls[2], bezt_controls[3], h2);
1339 float bezt_deriv1[3][3], bezt_deriv2[2][3];
1341 for (
int i = 0; i < 3; i++) {
1342 sub_v3_v3v3(bezt_deriv1[i], bezt_controls[i + 1], bezt_controls[i]);
1344 for (
int i = 0; i < 2; i++) {
1345 sub_v3_v3v3(bezt_deriv2[i], bezt_deriv1[i + 1], bezt_deriv1[i]);
1357 result_array[0].
mat);
1363 float roll =
interpf(roll2, roll1, fac);
1368 param, scalemats, cur, axis, roll, scalex, scaley, result_array[
a].mat);
1391 float fac = (
a + 0.5f) / param->
segments;
1392 float roll =
interpf(roll2, roll1, fac);
1397 param, scalemats, prev, axis, roll, scalex, scaley, result_array[
a].mat);
1414 sizeof(
Mat4), 1 + (
uint)segments,
"bPoseChannel_Runtime::bbone_rest_mats");
1416 sizeof(
Mat4), 1 + (
uint)segments,
"bPoseChannel_Runtime::bbone_pose_mats");
1418 sizeof(
Mat4), 2 + (
uint)segments,
"bPoseChannel_Runtime::bbone_deform_mats");
1420 sizeof(
DualQuat), 1 + (
uint)segments,
"bPoseChannel_Runtime::bbone_dual_quats");
1466 b_bone_mats[0].
mat);
1483 if (segments <= 1) {
1493 sizeof(
Mat4) * (2 + segments));
1496 sizeof(
DualQuat) * (1 + segments));
1507 float *r_blend_next)
1517 float pre_blend =
pos * (
float)segments;
1519 int index = (int)
floorf(pre_blend);
1520 CLAMP(index, 0, segments - 1);
1522 float blend = pre_blend - index;
1526 *r_blend_next =
blend;
1557 float xLocMat[4][4];
1558 float nLocMat[4][4];
1612 const Bone *bone, *parbone;
1621 float offs_bone[4][4];
1645 int inherit_scale_mode,
1646 const float offs_bone[4][4],
1647 const float parent_arm_mat[4][4],
1648 const float parent_pose_mat[4][4],
1653 if (parent_pose_mat) {
1654 const bool use_rotation = (bone_flag &
BONE_HINGE) == 0;
1658 if (full_transform) {
1663 float tmat[4][4], tscale[3];
1670 switch (inherit_scale_mode) {
1702 switch (inherit_scale_mode) {
1749 float bone_loc[4][4], bone_rotscale[3][3], tmat4[4][4], tmat3[3][3];
1754 mul_v3_m4v3(bone_loc[3], parent_pose_mat, offs_bone[3]);
1764 else if (!full_transform) {
1813 const float inmat[4][4],
1829 const float inmat[4][4],
1841 const float inmat[4][4],
1855 float xLocMat[4][4];
1856 float nLocMat[4][4];
1878 const float inmat[4][4],
1964 float pose_mat[4][4],
1965 float arm_mat[4][4])
1985 float quat[4],
float eul[3],
float axis[3],
float *
angle,
short oldMode,
short newMode)
2005 else if (oldMode > 0) {
2024 if (
IS_EQF(axis[0], axis[1]) &&
IS_EQF(axis[1], axis[2])) {
2074 float vecmat[3][3], vecmatinv[3][3], rollmat[3][3], q[4];
2157 const float THETA_SAFE = 1.0e-5f;
2158 const float THETA_CRITICAL = 1.0e-9f;
2160 const float x =
nor[0];
2161 const float y =
nor[1];
2162 const float z =
nor[2];
2164 const float theta = 1.0f +
y;
2165 const float theta_alt =
x *
x +
z *
z;
2166 float rMatrix[3][3], bMatrix[3][3];
2175 if (theta > THETA_SAFE || ((
x ||
z) && theta > THETA_CRITICAL)) {
2186 if (theta > THETA_SAFE) {
2188 bMatrix[0][0] = 1 -
x *
x / theta;
2189 bMatrix[2][2] = 1 -
z *
z / theta;
2190 bMatrix[2][0] = bMatrix[0][2] = -
x *
z / theta;
2194 bMatrix[0][0] = (
x +
z) * (
x -
z) / -theta_alt;
2195 bMatrix[2][2] = -bMatrix[0][0];
2196 bMatrix[2][0] = bMatrix[0][2] = 2.0f *
x *
z / theta_alt;
2202 bMatrix[0][0] = bMatrix[1][1] = -1.0;
2240 if (bone->
xwidth == 0.0f) {
2247 float offs_bone[4][4];
2260 if (use_recursion) {
2295 if (frompose ==
NULL) {
2302 if (pchan->
bone->
layer & layer_protected) {
2305 "failed to sync proxy armature because '%s' is missing pose channel '%s'",
2336 else if (pchan->
bone->
layer & layer_protected) {
2389 for (ct = targets.
first; ct; ct = ct->
next) {
2462 const Bone *last_visited_bone = *r_last_visited_bone_p;
2463 if ((pchan_prev ==
NULL && last_visited_bone !=
NULL) ||
2464 (pchan_prev !=
NULL && pchan_prev->
bone != last_visited_bone)) {
2465 pchan_prev = last_visited_bone !=
NULL ?
2472 *r_last_visited_bone_p = pchan->
bone;
2494 pchan->child =
NULL;
2521 if (pchan->bone ==
NULL) {
2598 if (bmain !=
NULL) {
2867 bool changed =
false;
2883 float mat[4][4], smat[4][4];
2915 rootchan = rootchan->
parent;
2917 if (rootchan !=
NULL) {
2919 while (rootchan->
parent) {
2922 if (segcount ==
data->rootbone) {
2925 rootchan = rootchan->
parent;
2937 while (rootchan->
parent) {
2940 if (segcount ==
data->chainlen) {
2943 rootchan = rootchan->
parent;
typedef float(TangentPoint)[2]
void BIK_init_tree(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, float ctime)
void BIK_release_tree(struct Scene *scene, struct Object *ob, float ctime)
void BIK_execute_tree(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime)
Blender kernel action and pose functionality.
void BKE_pose_channels_hash_free(struct bPose *pose)
void BKE_pose_channel_runtime_reset_on_copy(struct bPoseChannel_Runtime *runtime)
struct bPoseChannel * BKE_pose_channel_find_name(const struct bPose *pose, const char *name)
void BKE_pose_channels_hash_make(struct bPose *pose)
void BKE_pose_channel_free(struct bPoseChannel *pchan)
void BKE_pose_channel_free_ex(struct bPoseChannel *pchan, bool do_id_user)
struct bPoseChannel * BKE_pose_channel_verify(struct bPose *pose, const char *name)
void BKE_pose_update_constraint_flags(struct bPose *pose)
void BKE_pose_channel_free_bbone_cache(struct bPoseChannel_Runtime *runtime)
void BKE_pose_rest(struct bPose *pose, bool selected_bones_only)
void BKE_animdata_blend_read_data(struct BlendDataReader *reader, struct AnimData *adt)
void BKE_animdata_blend_write(struct BlendWriter *writer, struct AnimData *adt)
void animviz_settings_init(struct bAnimVizSettings *avs)
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)
#define PBONE_VISIBLE(arm, bone)
void BKE_constraints_solve(struct Depsgraph *depsgraph, struct ListBase *conlist, struct bConstraintOb *cob, float ctime)
void BKE_constraints_proxylocal_extract(struct ListBase *dst, struct ListBase *src)
void BKE_constraints_copy(struct ListBase *dst, const struct ListBase *src, bool do_extern)
struct bConstraintOb * BKE_constraints_make_evalob(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, void *subdata, short datatype)
const bConstraintTypeInfo * BKE_constraint_typeinfo_get(struct bConstraint *con)
void BKE_constraints_clear_evalob(struct bConstraintOb *cob)
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
void IDP_BlendReadExpand(struct BlendExpander *expander, struct IDProperty *prop)
void IDP_FreeProperty_ex(struct IDProperty *prop, const bool do_id_user)
void IDP_BlendWrite(struct BlendWriter *writer, const struct IDProperty *prop)
void IDP_BlendReadLib(struct BlendLibReader *reader, struct IDProperty *prop)
#define IDP_BlendDataRead(reader, prop)
void IDP_foreach_property(struct IDProperty *id_property_root, const int type_filter, IDPForeachPropertyCallback callback, void *user_data)
void IDP_FreeProperty(struct IDProperty *prop)
void IDP_SyncGroupValues(struct IDProperty *dest, const struct IDProperty *src) ATTR_NONNULL()
struct IDProperty * IDP_CopyProperty_ex(const struct IDProperty *prop, const int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
struct IDProperty * IDP_CopyProperty(const struct IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
@ LIB_ID_CREATE_NO_USER_REFCOUNT
void id_us_plus(struct ID *id)
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
void * BKE_id_new(struct Main *bmain, const short type, const char *name)
void BKE_lib_query_idpropertiesForeachIDLink_callback(struct IDProperty *id_prop, void *user_data)
General operations, lookup, etc. for blender objects.
void BKE_object_copy_proxy_drivers(struct Object *ob, struct Object *target)
void BKE_boundbox_init_from_minmax(struct BoundBox *bb, const float min[3], const float max[3])
struct BoundBox * BKE_object_boundbox_get(struct Object *ob)
void BKE_boundbox_minmax(const struct BoundBox *bb, const float obmat[4][4], float r_min[3], float r_max[3])
float BKE_scene_frame_get(const struct Scene *scene)
#define BLI_array_alloca(arr, realsize)
#define BLI_assert_unreachable()
GHash * BLI_ghash_str_new_ex(const char *info, const unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void * BLI_ghash_lookup(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
bool BLI_remlink_safe(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define BLI_ASSERT_UNIT_M3(m)
MINLINE float interpf(float a, float b, float t)
#define BLI_ASSERT_UNIT_V3(v)
float cubic_tangent_factor_circle_v3(const float tan_l[3], const float tan_r[3])
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void mul_mat3_m4_fl(float R[4][4], float f)
void size_to_mat3(float R[3][3], const float size[3])
bool invert_m4(float R[4][4])
void copy_m3_m3(float m1[3][3], const float m2[3][3])
void unit_m3(float m[3][3])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void unit_m4(float m[4][4])
void copy_m4_m3(float m1[4][4], const float m2[3][3])
void mul_mat3_m4_v3(const float M[4][4], float r[3])
void mat4_to_size_fix_shear(float size[3], const float M[4][4])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], const float wmat[4][4])
void normalize_m3(float R[3][3]) ATTR_NONNULL()
void rescale_m4(float mat[4][4], const float scale[3])
void size_to_mat4(float R[4][4], const float size[3])
void mul_m4_v3(const float M[4][4], float r[3])
void orthogonalize_m4_stable(float R[4][4], int axis, bool normalize)
#define mul_m4_series(...)
void scale_m4_fl(float R[4][4], float scale)
void normalize_m4_ex(float R[4][4], float r_scale[3]) ATTR_NONNULL()
bool invert_m3_m3(float R[3][3], const float A[3][3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
float mat4_to_scale(const float M[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
bool invert_m3(float R[3][3])
void mat4_to_size(float size[3], const float M[4][4])
float mat4_to_volume_scale(const float M[4][4])
void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
void normalize_m4(float R[4][4]) ATTR_NONNULL()
void quat_to_eulO(float eul[3], const short order, const float quat[4])
void eulO_to_quat(float quat[4], const float eul[3], const short order)
void eulO_to_axis_angle(float axis[3], float *angle, const float eul[3], const short order)
void mat3_to_quat(float q[4], const float mat[3][3])
void axis_angle_to_quat(float r[4], const float axis[3], const float angle)
float normalize_qt(float q[4])
void axis_angle_normalized_to_mat3(float R[3][3], const float axis[3], const float angle)
float normalize_qt_qt(float r[4], const float q[4])
void mat3_normalized_to_axis_angle(float axis[3], float *angle, const float M[3][3])
void quat_to_axis_angle(float axis[3], float *angle, const float q[4])
void mat3_normalized_to_compatible_eulO(float eul[3], const float old[3], const short order, const float mat[3][3])
void mat4_to_dquat(DualQuat *dq, const float basemat[4][4], const float mat[4][4])
void axis_angle_to_eulO(float eul[3], const short order, const float axis[3], const float angle)
void eulO_to_mat3(float mat[3][3], const float eul[3], const short order)
void axis_angle_to_mat3(float R[3][3], const float axis[3], const float angle)
void mat3_normalized_to_eulO(float eul[3], const short order, const float mat[3][3])
void quat_to_mat3(float mat[3][3], const float q[4])
float quat_split_swing_and_twist(const float q[4], int axis, float r_swing[4], float r_twist[4])
void mat3_normalized_to_quat(float q[4], const float mat[3][3])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], const float t)
MINLINE float len_squared_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void mul_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void copy_v3_fl3(float v[3], float x, float y, float z)
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void negate_v3(float r[3])
MINLINE void invert_v3(float r[3])
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
#define INIT_MINMAX(min, max)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define BLO_read_data_address(reader, ptr_p)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_list(BlendDataReader *reader, struct ListBase *list)
bool BLO_write_is_undo(BlendWriter *writer)
#define BLT_I18NCONTEXT_ID_ARMATURE
#define CLOG_ERROR(clg_ref,...)
struct Depsgraph Depsgraph
bool DEG_is_active(const struct Depsgraph *depsgraph)
void DEG_relations_tag_update(struct Main *bmain)
struct ID * DEG_get_original_id(struct ID *id)
#define PCHAN_CUSTOM_DRAW_SIZE(pchan)
@ BONE_DRAW_LOCKED_WEIGHT
@ BONE_ADD_PARENT_END_ROLL
struct bArmature bArmature
@ BONE_INHERIT_SCALE_FULL
@ BONE_INHERIT_SCALE_NONE
@ BONE_INHERIT_SCALE_FIX_SHEAR
@ BONE_INHERIT_SCALE_NONE_LEGACY
@ BONE_INHERIT_SCALE_ALIGNED
@ BONE_INHERIT_SCALE_AVERAGE
#define DNA_struct_default_get(struct_name)
These structs are the foundation for all linked lists in the library system.
Object is a sort of wrapper for general info.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
Group RGB to Bright Vector Camera CLAMP
static void armature_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int flag)
void BKE_pchan_rot_to_mat3(const bPoseChannel *pchan, float r_mat[3][3])
void BKE_armature_bone_hash_make(bArmature *arm)
void BKE_pose_where_is(struct Depsgraph *depsgraph, Scene *scene, Object *ob)
static void copy_bone_transform(Bone *bone_dst, const Bone *bone_src)
void vec_roll_to_mat3(const float vec[3], const float roll, float r_mat[3][3])
bArmature * BKE_armature_from_object(Object *ob)
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])
static void allocate_bbone_cache(bPoseChannel *pchan, int segments)
void BKE_pchan_bbone_deform_segment_index(const bPoseChannel *pchan, float pos, int *r_index, float *r_blend_next)
bool bone_autoside_name(char name[MAXBONENAME], int UNUSED(strip_number), short axis, float head, float tail)
static int minmax_armature(Object *ob, float r_min[3], float r_max[3])
static bPoseChannel * pose_channel_find_bone(bPose *pose, Bone *bone)
static void equalize_cubic_bezier(const float control[4][3], int temp_segments, int final_segments, float *r_t_points)
void BKE_armature_refresh_layer_used(struct Depsgraph *depsgraph, struct bArmature *arm)
void BKE_armature_loc_pose_to_bone(bPoseChannel *pchan, const float inloc[3], float outloc[3])
void BKE_armature_bonelist_free(ListBase *lb, const bool do_id_user)
void BKE_pose_channels_clear_with_null_bone(bPose *pose, const bool do_id_user)
void BKE_pose_ensure(Main *bmain, Object *ob, bArmature *arm, const bool do_id_user)
void BKE_armature_where_is_bone(Bone *bone, const Bone *bone_parent, const bool use_recursion)
void BKE_pose_rebuild(Main *bmain, Object *ob, bArmature *arm, const bool do_id_user)
void mat3_vec_to_roll(const float mat[3][3], const float vec[3], float *r_roll)
static void write_bone(BlendWriter *writer, Bone *bone)
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_mat_bone_to_pose(bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
bArmature * BKE_armature_add(Main *bmain, const char *name)
void BKE_pchan_calc_mat(bPoseChannel *pchan)
int BKE_armature_bonelist_count(ListBase *lb)
void BKE_pose_where_is_bone_tail(bPoseChannel *pchan)
static void expand_bones(BlendExpander *expander, Bone *bone)
void BKE_pchan_apply_mat4(bPoseChannel *pchan, const float mat[4][4], bool use_compat)
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_armature_mat_pose_to_bone(bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
void BKE_bone_parent_transform_combine(const struct BoneParentTransform *in1, const struct BoneParentTransform *in2, struct BoneParentTransform *result)
static void armature_foreach_id_bone(Bone *bone, LibraryForeachIDData *data)
Bone * BKE_armature_find_bone_name(bArmature *arm, const char *name)
void BKE_pchan_rebuild_bbone_handles(bPose *pose, bPoseChannel *pchan)
static void boundbox_armature(Object *ob)
void BKE_bone_parent_transform_invert(struct BoneParentTransform *bpt)
void BKE_pose_clear_pointers(bPose *pose)
bool BKE_armature_bone_flag_test_recursive(const Bone *bone, int flag)
void BKE_pchan_to_mat4(const bPoseChannel *pchan, float r_chanmat[4][4])
bool BKE_pose_minmax(Object *ob, float r_min[3], float r_max[3], bool use_hidden, bool use_select)
static void pose_proxy_sync(Object *ob, Object *from, int layer_protected)
static void copy_bonechildren(Bone *bone_dst, const Bone *bone_src, const Bone *bone_src_act, Bone **r_bone_dst_act, const int flag)
void BKE_armature_copy_bone_transforms(bArmature *armature_dst, const bArmature *armature_src)
static void armature_blend_write(BlendWriter *writer, ID *id, const void *id_address)
bPoseChannel * BKE_armature_splineik_solver_find_root(bPoseChannel *pchan, bSplineIKConstraint *data)
static void armature_foreach_id_editbone(EditBone *edit_bone, LibraryForeachIDData *data)
static int rebuild_pose_bone(bPose *pose, Bone *bone, bPoseChannel *parchan, int counter, Bone **r_last_visited_bone_p)
void BKE_rotMode_change_values(float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode)
static void copy_bonechildren_custom_handles(Bone *bone_dst, bArmature *arm_dst)
void BKE_bone_parent_transform_clear(struct BoneParentTransform *bpt)
void BKE_pchan_bbone_segments_cache_copy(bPoseChannel *pchan, bPoseChannel *pchan_from)
void BKE_armature_mat_pose_to_delta(float delta_mat[4][4], float pose_mat[4][4], float arm_mat[4][4])
static void lib_link_bones(BlendLibReader *reader, Bone *bone)
BoundBox * BKE_armature_boundbox_get(Object *ob)
void BKE_bone_parent_transform_calc_from_pchan(const bPoseChannel *pchan, BoneParentTransform *r_bpt)
static void armature_refresh_layer_used_recursive(bArmature *arm, ListBase *bones)
int BKE_pchan_bbone_spline_compute(BBoneSplineParameters *param, const bool for_deform, Mat4 *result_array)
void BKE_pchan_mat3_to_rot(bPoseChannel *pchan, const float mat[3][3], bool use_compat)
void mat3_to_vec_roll(const float mat[3][3], float r_vec[3], float *r_roll)
static void armature_blend_read_lib(BlendLibReader *reader, ID *id)
static void armature_bone_from_name_insert_recursive(GHash *bone_hash, ListBase *lb)
static void armature_free_data(struct ID *id)
void BKE_armature_transform(bArmature *arm, const float mat[4][4], const bool do_props)
void BKE_pchan_bbone_segments_cache_compute(bPoseChannel *pchan)
void BKE_armature_editbonelist_free(ListBase *lb, const bool do_id_user)
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_pchan_bbone_handles_get(bPoseChannel *pchan, bPoseChannel **r_prev, bPoseChannel **r_next)
static void armature_foreach_id(ID *id, LibraryForeachIDData *data)
void BKE_bone_offset_matrix_get(const Bone *bone, float offs_bone[4][4])
static void armature_init_data(ID *id)
void BKE_armature_bone_hash_free(bArmature *arm)
void BKE_armature_where_is(bArmature *arm)
static void direct_link_bones(BlendDataReader *reader, Bone *bone)
static Bone * get_named_bone_bonechildren(ListBase *lb, const char *name)
void BKE_armature_mat_world_to_pose(Object *ob, const float inmat[4][4], float outmat[4][4])
void BKE_pchan_bbone_spline_setup(bPoseChannel *pchan, const bool rest, const bool for_deform, Mat4 *result_array)
void BKE_bone_parent_transform_apply(const struct BoneParentTransform *bpt, const float inmat[4][4], float outmat[4][4])
static GHash * armature_bone_from_name_map(bArmature *arm)
static void armature_blend_read_data(BlendDataReader *reader, ID *id)
bPoseChannel * BKE_armature_ik_solver_find_root(bPoseChannel *pchan, bKinematicConstraint *data)
static void evaluate_cubic_bezier(const float control[4][3], float t, float r_pos[3], float r_tangent[3])
void BKE_pose_remap_bone_pointers(bArmature *armature, bPose *pose)
void BKE_armature_loc_world_to_pose(Object *ob, const float inloc[3], float outloc[3])
static void armature_blend_read_expand(BlendExpander *expander, ID *id)
void BKE_pose_where_is_bone(struct Depsgraph *depsgraph, Scene *scene, Object *ob, bPoseChannel *pchan, float ctime, bool do_extra)
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)
void BKE_pchan_bbone_spline_params_get(struct bPoseChannel *pchan, const bool rest, struct BBoneSplineParameters *param)
void vec_roll_to_mat3_normalized(const float nor[3], const float roll, float r_mat[3][3])
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
static char * basename(char *string)
const Depsgraph * depsgraph
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static void error(const char *str)
struct EditBone * act_edbone
unsigned int layer_protected
struct bConstraintTarget * next
int(* get_constraint_targets)(struct bConstraint *con, struct ListBase *list)
void(* flush_constraint_targets)(struct bConstraint *con, struct ListBase *list, bool no_copy)
struct bConstraint * next
struct Mat4 * bbone_deform_mats
struct DualQuat * bbone_dual_quats
struct Mat4 * bbone_pose_mats
struct Mat4 * bbone_rest_mats
struct bPoseChannel * parent
struct bPoseChannel * custom_tx
struct bPoseChannel * bbone_next
struct bPoseChannel * prev
struct bPoseChannel * next
struct bPoseChannel_Runtime runtime
struct bPoseChannel * bbone_prev
struct bPoseChannel * child
static int blend(const Tex *tex, const float texvec[3], TexResult *texres)