25 #define DNA_DEPRECATED_ALLOW
102 #define VALID_CONS_TARGET(ct) ((ct) && (ct->tar))
151 cob->
type = datatype;
180 cob->
type = datatype;
213 float delta[4][4], imat[4][4];
270 const bool keep_scale)
272 float diff_mat[4][4];
476 float imat[3][3], tmat[3][3];
483 if (defgroup == -1) {
487 float vec[3] = {0.0f, 0.0f, 0.0f};
488 float normal[3] = {0.0f, 0.0f, 0.0f};
489 float weightsum = 0.0f;
492 int numVerts = me_eval->
totvert;
500 for (
int i = 0; i < numVerts; i++, dv++,
mv++) {
503 if (dw && dw->
weight > 0.0f) {
522 if (dw && dw->
weight > 0.0f) {
578 const float *co = dl ? dl->verts :
NULL;
583 float vec[3] = {0.0f, 0.0f, 0.0f}, tvec[3];
592 if (defgroup == -1) {
602 for (i = 0; i < tot_verts; i++, dv++) {
605 if (dw && dw->
weight > 0.0f) {
607 memcpy(tvec, co ? co : bp->
vec,
sizeof(
float[3]));
636 const char *substring,
645 if (substring[0] ==
'\0') {
679 if (headtail < 0.000001f && !(is_bbone && full_bbone)) {
695 interp_m4_m4m4(tempmat, bbone[index].mat, bbone[index + 1].mat, fac);
701 interp_v3_v3v3(loc, bbone[index].mat[3], bbone[index + 1].mat[3], fac);
710 float tempmat[4][4], loc[3];
750 CONSTRAINT_TYPE_CONSTRNAME,
751 sizeof(bConstrNameConstraint),
753 "bConstrNameConstraint",
755 constrname_id_looper,
759 constrname_flush_tars,
760 constrname_get_tarmat,
818 #define SINGLETARGET_GET_TARS(con, datatar, datasubtarget, ct, list) \
820 ct = MEM_callocN(sizeof(bConstraintTarget), "tempConstraintTarget"); \
823 BLI_strncpy(ct->subtarget, datasubtarget, sizeof(ct->subtarget)); \
824 ct->space = con->tarspace; \
825 ct->flag = CONSTRAINT_TAR_TEMP; \
828 if ((ct->tar->type == OB_ARMATURE) && (ct->subtarget[0])) { \
829 bPoseChannel *pchan = BKE_pose_channel_find_name(ct->tar->pose, ct->subtarget); \
830 ct->type = CONSTRAINT_OBTYPE_BONE; \
831 ct->rotOrder = (pchan) ? (pchan->rotmode) : EULER_ORDER_DEFAULT; \
833 else if (OB_TYPE_SUPPORT_VGROUP(ct->tar->type) && (ct->subtarget[0])) { \
834 ct->type = CONSTRAINT_OBTYPE_VERT; \
835 ct->rotOrder = EULER_ORDER_DEFAULT; \
838 ct->type = CONSTRAINT_OBTYPE_OBJECT; \
839 ct->rotOrder = ct->tar->rotmode; \
843 BLI_addtail(list, ct); \
853 #define SINGLETARGETNS_GET_TARS(con, datatar, ct, list) \
855 ct = MEM_callocN(sizeof(bConstraintTarget), "tempConstraintTarget"); \
858 ct->space = con->tarspace; \
859 ct->flag = CONSTRAINT_TAR_TEMP; \
862 ct->type = CONSTRAINT_OBTYPE_OBJECT; \
864 BLI_addtail(list, ct); \
874 #define SINGLETARGET_FLUSH_TARS(con, datatar, datasubtarget, ct, list, no_copy) \
877 bConstraintTarget *ctn = ct->next; \
878 if (no_copy == 0) { \
880 BLI_strncpy(datasubtarget, ct->subtarget, sizeof(datasubtarget)); \
881 con->tarspace = (char)ct->space; \
884 BLI_freelinkN(list, ct); \
896 #define SINGLETARGETNS_FLUSH_TARS(con, datatar, ct, list, no_copy) \
899 bConstraintTarget *ctn = ct->next; \
900 if (no_copy == 0) { \
902 con->tarspace = (char)ct->space; \
905 BLI_freelinkN(list, ct); \
954 func(con, (
ID **)&
data->tar,
false, userdata);
994 float inverse_matrix[4][4];
1002 float loc[3], eul[3],
size[3];
1003 float loco[3], eulo[3], sizeo[3];
1016 loc[0] = loco[0] = 0.0f;
1019 loc[1] = loco[1] = 0.0f;
1022 loc[2] = loco[2] = 0.0f;
1025 eul[0] = eulo[0] = 0.0f;
1028 eul[1] = eulo[1] = 0.0f;
1031 eul[2] = eulo[2] = 0.0f;
1034 size[0] = sizeo[0] = 1.0f;
1037 size[1] = sizeo[1] = 1.0f;
1040 size[2] = sizeo[2] = 1.0f;
1062 if (orig_con !=
NULL) {
1073 float orig_cob_matrix[4][4];
1081 cob->
matrix[3][0] = orig_cob_matrix[3][0];
1084 cob->
matrix[3][1] = orig_cob_matrix[3][1];
1087 cob->
matrix[3][2] = orig_cob_matrix[3][2];
1096 "bChildOfConstraint",
1122 func(con, (
ID **)&
data->tar,
false, userdata);
1171 const float target_up[3],
1226 if (axis != upflag) {
1227 right_index = 3 - axis - upflag;
1231 m[right_index][0] = neg *
right[0];
1232 m[right_index][1] = neg *
right[1];
1233 m[right_index][2] = neg *
right[2];
1251 float size[3], vec[3];
1274 vec, ct->
matrix[2], (
short)
data->reserved1, (
short)
data->reserved2,
data->flags, totmat);
1284 "bTrackToConstraint",
1301 data->weight = 1.0f;
1302 data->orientweight = 1.0f;
1303 data->iterations = 500;
1313 func(con, (
ID **)&
data->tar,
false, userdata);
1316 func(con, (
ID **)&
data->poletar,
false, userdata);
1390 "bKinematicConstraint",
1410 data->followflag = 0;
1418 func(con, (
ID **)&
data->tar,
false, userdata);
1457 float vec[4], dir[3], radius;
1483 CLAMP(curvetime, 0.0f, 1.0f);
1488 curvetime =
data->offset_fac;
1507 float tmat[4][4], rmat[4][4];
1568 "bFollowPathConstraint",
1621 "bLocLimitConstraint",
1650 if (eul[0] <
data->xmin) {
1651 eul[0] =
data->xmin;
1654 if (eul[0] >
data->xmax) {
1655 eul[0] =
data->xmax;
1659 if (eul[1] <
data->ymin) {
1660 eul[1] =
data->ymin;
1663 if (eul[1] >
data->ymax) {
1664 eul[1] =
data->ymax;
1668 if (eul[2] <
data->zmin) {
1669 eul[2] =
data->zmin;
1672 if (eul[2] >
data->zmax) {
1673 eul[2] =
data->zmax;
1684 "bRotLimitConstraint",
1700 float obsize[3],
size[3];
1751 "bSizeLimitConstraint",
1776 func(con, (
ID **)&
data->tar,
false, userdata);
1814 float offset[3] = {0.0f, 0.0f, 0.0f};
1826 cob->
matrix[3][0] += offset[0];
1834 cob->
matrix[3][1] += offset[1];
1842 cob->
matrix[3][2] += offset[2];
1851 "bLocateLikeConstraint",
1876 func(con, (
ID **)&
data->tar,
false, userdata);
1914 float loc[3],
size[3], oldrot[3][3], newrot[3][3];
1915 float eul[3], obeul[3], defeul[3];
1923 rot_order =
data->euler_order;
1939 bool legacy_offset =
false;
1941 switch (
data->mix_mode) {
1943 legacy_offset =
true;
1959 if (legacy_offset) {
1972 if (legacy_offset) {
1985 if (legacy_offset) {
2005 switch (
data->mix_mode) {
2031 "bRotateLikeConstraint",
2057 func(con, (
ID **)&
data->tar,
false, userdata);
2095 float obsize[3],
size[3];
2105 if ((
data->flag & all_axes) == all_axes) {
2130 for (
int i = 0; i < 3; i++) {
2164 "bSizeLikeConstraint",
2182 func(con, (
ID **)&
data->tar,
false, userdata);
2220 switch (
data->mix_mode) {
2234 BLI_assert(!
"Unknown Copy Transforms mix mode");
2243 "bTransLikeConstraint",
2261 data->volume = 1.0f;
2268 float volume =
data->volume;
2269 float fac = 1.0f, total_scale = 1.0f;
2275 switch (
data->mode) {
2277 total_scale = obsize[0] * obsize[1] * obsize[2];
2280 total_scale =
pow3f(obsize[
data->free_axis]);
2283 total_scale = obsize[
data->free_axis];
2287 if (total_scale != 0) {
2288 fac =
sqrtf(volume / total_scale);
2292 switch (
data->free_axis) {
2312 "bSameVolumeConstraint",
2362 return data->tarnum;
2374 func(con, (
ID **)&ct->
tar,
false, userdata);
2378 func(con, (
ID **)&
data->text,
true, userdata);
2444 "bPythonConstraint",
2478 *list =
data->targets;
2492 func(con, (
ID **)&ct->
tar,
false, userdata);
2507 if (pchan !=
NULL) {
2518 const float iobmat[4][4],
2519 const float basemat[4][4],
2520 const float bonemat[4][4],
2522 float r_sum_mat[4][4],
2525 if (weight == 0.0f) {
2534 if (r_sum_dq !=
NULL) {
2535 float basemat_world[4][4];
2554 bool force_envelope,
2556 float r_sum_mat[4][4],
2559 float iobmat[4][4], co[3];
2561 float weight = ct->
weight;
2577 float(*iamat)[4] = b_bone_mats[0].
mat;
2578 float basemat[4][4];
2583 float y = iamat[0][1] * co[0] + iamat[1][1] * co[1] + iamat[2][1] * co[2] + iamat[3][1];
2590 if (r_sum_dq !=
NULL) {
2598 b_bone_mats[index + 1].
mat,
2599 weight * (1.0f -
blend),
2603 if (r_sum_dq !=
NULL) {
2611 b_bone_mats[index + 2].
mat,
2623 *r_totweight += weight;
2630 float sum_mat[4][4], input_co[3];
2632 float weight = 0.0f;
2636 memset(&sum_dq, 0,
sizeof(sum_dq));
2654 if (ct->
weight <= 0.0f) {
2673 if (weight > 0.0f) {
2691 "bArmatureConstraint",
2720 func(con, (
ID **)&
data->tar,
false, userdata);
2723 func(con, (
ID **)&
data->act,
true, userdata);
2764 float tempmat[4][4], vec[3];
2773 s =
data->eval_time;
2792 if (
data->type < 10) {
2798 else if (
data->type < 20) {
2801 axis =
data->type - 10;
2806 axis =
data->type - 20;
2821 printf(
"do Action Constraint %s - Ob %s Pchan %s\n",
2861 puts(
"Error: unknown owner type for Action Constraint");
2872 switch (
data->mix_mode) {
2895 "bActionConstraint",
2921 func(con, (
ID **)&
data->tar,
false, userdata);
2956 float vec[3], vec2[3];
2964 switch (
data->lockflag) {
2967 switch (
data->trackflag) {
3035 switch (
data->trackflag) {
3103 switch (
data->trackflag) {
3179 totmat[0][0] = tmpmat[0][0];
3180 totmat[0][1] = tmpmat[0][1];
3181 totmat[0][2] = tmpmat[0][2];
3182 totmat[1][0] = tmpmat[1][0];
3183 totmat[1][1] = tmpmat[1][1];
3184 totmat[1][2] = tmpmat[1][2];
3185 totmat[2][0] = tmpmat[2][0];
3186 totmat[2][1] = tmpmat[2][1];
3187 totmat[2][2] = tmpmat[2][2];
3211 "bLockTrackConstraint",
3236 func(con, (
ID **)&
data->tar,
false, userdata);
3275 float dvec[3], dist, sfac = 1.0f;
3276 short clamp_surf = 0;
3282 if (
data->dist == 0) {
3288 if (orig_con !=
NULL) {
3298 if (dist <= data->dist) {
3301 sfac =
data->dist / dist;
3306 if (dist <= (
data->dist +
data->soft)) {
3313 if (dist >=
data->dist) {
3316 sfac =
data->dist / dist;
3322 if (dist >= (
data->dist -
data->soft)) {
3337 sfac =
data->dist / dist;
3357 "bDistLimitConstraint",
3376 data->orglength = 0.0;
3378 data->bulge_max = 1.0f;
3379 data->bulge_min = 1.0f;
3387 func(con, (
ID **)&
data->tar,
false, userdata);
3423 float size[3], scale[3], vec[3], xx[3], zz[3],
orth[3];
3450 if (
data->orglength == 0) {
3451 data->orglength = dist;
3456 if (orig_con !=
NULL) {
3463 scale[1] = dist /
data->orglength;
3469 float bulge_max =
max_ff(
data->bulge_max, 1.0f);
3470 float hard =
min_ff(bulge, bulge_max);
3472 float range = bulge_max - 1.0f;
3473 float scale_fac = (range > 0.0f) ? 1.0f / range : 0.0f;
3474 float soft = 1.0f + range *
atanf((bulge - 1.0f) * scale_fac) / (
float)
M_PI_2;
3481 float bulge_min =
CLAMPIS(
data->bulge_min, 0.0f, 1.0f);
3482 float hard =
max_ff(bulge, bulge_min);
3484 float range = 1.0f - bulge_min;
3485 float scale_fac = (range > 0.0f) ? 1.0f / range : 0.0f;
3486 float soft = 1.0f - range *
atanf((1.0f - bulge) * scale_fac) / (
float)
M_PI_2;
3492 switch (
data->volmode) {
3495 scale[0] =
sqrtf(bulge);
3496 scale[2] = scale[0];
3518 switch (
data->plane) {
3565 "bStretchToConstraint",
3583 data->offset = 0.0f;
3592 func(con, (
ID **)&
data->tar,
false, userdata);
3631 float obmat[4][4], imat[4][4], tarmat[4][4], tmat[4][4];
3646 switch (
data->minmaxflag) {
3648 val1 = tarmat[3][2];
3649 val2 = obmat[3][2] -
data->offset;
3653 val1 = tarmat[3][1];
3654 val2 = obmat[3][1] -
data->offset;
3658 val1 = tarmat[3][0];
3659 val2 = obmat[3][0] -
data->offset;
3663 val2 = tarmat[3][2];
3664 val1 = obmat[3][2] -
data->offset;
3668 val2 = tarmat[3][1];
3669 val1 = obmat[3][1] -
data->offset;
3673 val2 = tarmat[3][0];
3674 val1 = obmat[3][0] -
data->offset;
3682 obmat[3][index] = tarmat[3][index] +
data->offset;
3699 "bMinMaxConstraint",
3717 func(con, (
ID **)&
data->tar,
false, userdata);
3767 float obmat[4][4], ownLoc[3];
3768 float curveMin[3], curveMax[3];
3769 float targetMatrix[4][4];
3780 if (
data->tar->runtime.curve_cache &&
data->tar->runtime.curve_cache->anim_path_accum_length) {
3781 float vec[4], dir[3], totmat[4][4];
3806 clamp_axis =
data->flag - 1;
3812 float len = (curveMax[clamp_axis] - curveMin[clamp_axis]);
3818 if (ownLoc[clamp_axis] < curveMin[clamp_axis]) {
3820 offset = curveMin[clamp_axis] -
3821 ceilf((curveMin[clamp_axis] - ownLoc[clamp_axis]) /
len) *
len;
3825 curvetime = (ownLoc[clamp_axis] - offset) / (
len);
3827 else if (ownLoc[clamp_axis] > curveMax[clamp_axis]) {
3829 offset = curveMax[clamp_axis] +
3830 (int)((ownLoc[clamp_axis] - curveMax[clamp_axis]) /
len) *
len;
3834 curvetime = (ownLoc[clamp_axis] - offset) / (
len);
3838 curvetime = (ownLoc[clamp_axis] - curveMin[clamp_axis]) / (
len);
3848 if (ownLoc[clamp_axis] <= curveMin[clamp_axis]) {
3851 else if (ownLoc[clamp_axis] >= curveMax[clamp_axis]) {
3854 else if (
IS_EQF((curveMax[clamp_axis] - curveMin[clamp_axis]), 0.0f) ==
false) {
3855 curvetime = (ownLoc[clamp_axis] - curveMin[clamp_axis]) /
3856 (curveMax[clamp_axis] - curveMin[clamp_axis]);
3881 "bClampToConstraint",
3902 for (
int i = 0; i < 3; i++) {
3903 data->from_min_scale[i] =
data->from_max_scale[i] = 1.0f;
3904 data->to_min_scale[i] =
data->to_max_scale[i] = 1.0f;
3913 func(con, (
ID **)&
data->tar,
false, userdata);
3952 float *from_min, *from_max, *to_min, *to_max;
3953 float loc[3],
rot[3][3], oldeul[3],
size[3];
3954 float newloc[3], newrot[3][3], neweul[3], newsize[3];
3955 float dbuf[4], sval[3];
3956 float *
const dvec = dbuf + 1;
3959 switch (
data->from) {
3970 from_min =
data->from_min_scale;
3971 from_max =
data->from_max_scale;
3976 from_min =
data->from_min_rot;
3977 from_max =
data->from_max_rot;
3982 from_min =
data->from_min;
3983 from_max =
data->from_max;
3991 rot_order =
data->to_euler_order;
3999 for (
int i = 0; i < 3; i++) {
4000 if (from_max[i] - from_min[i]) {
4001 sval[i] = (dvec[i] - from_min[i]) / (from_max[i] - from_min[i]);
4010 for (
int i = 0; i < 3; i++) {
4011 CLAMP(dvec[i], from_min[i], from_max[i]);
4012 if (from_max[i] - from_min[i]) {
4013 sval[i] = (dvec[i] - from_min[i]) / (from_max[i] - from_min[i]);
4024 to_min =
data->to_min_scale;
4025 to_max =
data->to_max_scale;
4026 for (
int i = 0; i < 3; i++) {
4027 newsize[i] = to_min[i] + (sval[(int)
data->map[i]] * (to_max[i] - to_min[i]));
4029 switch (
data->mix_mode_scale) {
4040 to_min =
data->to_min_rot;
4041 to_max =
data->to_max_rot;
4042 for (
int i = 0; i < 3; i++) {
4043 neweul[i] = to_min[i] + (sval[(int)
data->map[i]] * (to_max[i] - to_min[i]));
4045 switch (
data->mix_mode_rot) {
4067 to_min =
data->to_min;
4068 to_max =
data->to_max;
4069 for (
int i = 0; i < 3; i++) {
4070 newloc[i] = (to_min[i] + (sval[(int)
data->map[i]] * (to_max[i] - to_min[i])));
4072 switch (
data->mix_mode_loc) {
4093 "bTransformConstraint",
4111 func(con, (
ID **)&
data->target,
false, userdata);
4157 float co[3] = {0.0f, 0.0f, 0.0f};
4158 bool track_normal =
false;
4159 float track_no[3] = {0.0f, 0.0f, 0.0f};
4186 if (nearest.
index < 0) {
4192 if (do_track_normal) {
4193 track_normal =
true;
4214 co, co, nearest.
co, (dist - scon->
dist) / dist);
4225 float no[3] = {0.0f, 0.0f, 0.0f};
4274 if (hit.
index < 0) {
4279 if (do_track_normal) {
4280 track_normal =
true;
4324 "bShrinkwrapConstraint",
4349 func(con, (
ID **)&
data->tar,
false, userdata);
4409 float obvec[3], obloc[3];
4410 float raxis[3], rangle;
4411 float rmat[3][3], tmat[4][4];
4446 if (
norm < FLT_EPSILON) {
4467 else if (
norm < 0.1f) {
4489 "bDampTrackConstraint",
4525 data->bulge_max = 1.0f;
4526 data->bulge_min = 1.0f;
4537 func(con, (
ID **)&
data->tar,
false, userdata);
4584 "bSplineIKConstraint",
4602 func(con, (
ID **)&
data->tar,
false, userdata);
4636 float pivot[3], vec[3];
4640 float axis[3],
angle;
4652 if (
rot[
data->rotAxis] > 0.0f) {
4734 func(con, (
ID **)&
data->clip,
true, userdata);
4735 func(con, (
ID **)&
data->camera,
false, userdata);
4736 func(con, (
ID **)&
data->depth_ob,
false, userdata);
4757 if (
data->object[0]) {
4772 return data->camera;
4845 float camera_obmat[4][4];
4849 float reconstructed_camera_mat[4][4];
4851 tracking, tracking_object,
context->clip_frame, reconstructed_camera_mat);
4852 float reconstructed_camera_mat_inv[4][4];
4853 invert_m4_m4(reconstructed_camera_mat_inv, reconstructed_camera_mat);
4869 float reconstructed_camera_mat[4][4];
4893 const int clip_width,
4894 const int clip_height,
4895 float marker_position[2])
4902 marker_position[0] *= clip_width;
4903 marker_position[1] *= clip_height;
4906 context->tracking, clip_width, clip_height, marker_position, marker_position);
4909 marker_position[0] /= clip_width;
4910 marker_position[1] /= clip_height;
4915 const int clip_width,
4916 const int clip_height,
4917 float marker_position[2])
4927 const float w_src = clip_width * clip->
aspx;
4928 const float h_src = clip_height * clip->
aspy;
4933 const float asp_src = w_src / h_src;
4934 const float asp_dst = w_dst / h_dst;
4936 if (
fabsf(asp_src - asp_dst) < FLT_EPSILON) {
4942 float div = asp_src / asp_dst;
4943 float cent = (
float)clip_width / 2.0f;
4945 marker_position[0] = (((marker_position[0] * clip_width - cent) * div) + cent) / clip_width;
4949 float div = asp_dst / asp_src;
4950 float cent = (
float)clip_height / 2.0f;
4952 marker_position[1] = (((marker_position[1] * clip_height - cent) * div) + cent) / clip_height;
4963 float camera_matrix[4][4];
4966 const float z_axis[3] = {0.0f, 0.0f, 1.0f};
4969 float camera_axis[3];
4977 float projection[3];
4980 return len_v3(projection);
4993 if (depth_mesh ==
NULL) {
4997 float depth_object_mat_inv[4][4];
5000 float ray_start[3], ray_end[3];
5004 float ray_direction[3];
5036 const float clip_frame =
context->clip_frame;
5040 if (object_depth < FLT_EPSILON) {
5044 int clip_width, clip_height;
5047 float marker_position[2];
5060 vec[0] =
params.ortho_scale * (marker_position[0] - 0.5f +
params.shiftx);
5061 vec[1] =
params.ortho_scale * (marker_position[1] - 0.5f +
params.shifty);
5062 vec[2] = -object_depth;
5064 if (aspect > 1.0f) {
5081 const float d = (object_depth *
params.sensor_x) / (2.0f *
params.lens);
5084 vec[0] = d * (2.0f * (marker_position[0] +
params.shiftx) - 1.0f);
5085 vec[1] = d * (2.0f * (marker_position[1] +
params.shifty) - 1.0f);
5086 vec[2] = -object_depth;
5088 if (aspect > 1.0f) {
5129 "bFollowTrackConstraint",
5154 func(con, (
ID **)&
data->clip,
true, userdata);
5169 float mat[4][4], obmat[4][4];
5187 "bCameraSolverConstraint",
5213 func(con, (
ID **)&
data->clip,
false, userdata);
5214 func(con, (
ID **)&
data->camera,
false, userdata);
5228 if (!camob || !clip) {
5240 float mat[4][4], obmat[4][4], imat[4][4], parmat[4][4];
5260 if (orig_con !=
NULL) {
5275 "bObjectSolverConstraint",
5291 func(con, (
ID **)&
data->cache_file,
true, userdata);
5339 data->reader_object_path[0] =
'\0';
5354 "bTransformCacheConstraint",
5427 CLOG_WARN(&
LOG,
"No valid constraint type-info data available. Type = %i",
type);
5460 if (*idpoin && is_reference) {
5552 const char *newName;
5577 newName = (name && name[0]) ? name :
DATA_(cti->
name);
5582 newName = (name && name[0]) ? name :
DATA_(
"Const");
5664 if (pchan ==
NULL) {
5698 bool UNUSED(is_reference),
5716 if ((*idpoin) && (is_reference)) {
5725 const bool do_extern)
5767 if (pchan ==
NULL) {
5792 for (con = dst->
first, srccon = src->
first; con && srccon;
5793 srccon = srccon->
next, con = con->
next) {
5834 if (con_iter == con) {
5869 if (r_pchan !=
NULL) {
5884 if (r_pchan !=
NULL) {
5911 if (pchan !=
NULL) {
5914 if (orig_pchan ==
NULL) {
5934 if (r_orig_ob !=
NULL) {
5935 *r_orig_ob = orig_ob;
5955 if (orig_con !=
NULL) {
5983 for (con = src->
first; con; con =
next) {
5998 if (ob && ob->
proxy) {
5999 if (ob->
pose && pchan) {
6042 cob->
type = ownertype;
6045 switch (ownertype) {
6128 for (ct = targets->
first; ct; ct = ct->
next) {
6133 for (ct = targets->
first; ct; ct = ct->
next) {
6192 for (con = conlist->
first; con; con = con->
next) {
6255 float solution[4][4];
6268 if (cti && con->
data) {
6273 switch (con->
type) {
6320 switch (con->
type) {
6363 data->reader_object_path[0] =
'\0';
6377 bool UNUSED(is_reference),
6414 bool UNUSED(is_reference),
void ABC_get_transform(struct CacheReader *reader, float r_mat_world[4][4], float time, float scale)
typedef float(TangentPoint)[2]
void BIK_clear_data(struct bPose *pose)
Blender kernel action and pose functionality.
struct bPoseChannel * BKE_pose_channel_find_name(const struct bPose *pose, const char *name)
void what_does_obaction(struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, char groupname[], const struct AnimationEvalContext *anim_eval_context)
struct bPoseChannel * BKE_pose_channel_verify(struct bPose *pose, const char *name)
void BKE_pose_free_data(struct bPose *pose)
bool BKE_where_on_path(const struct Object *ob, float ctime, float r_vec[4], float r_dir[3], float r_quat[4], float *r_radius, float *r_weight)
AnimationEvalContext BKE_animsys_eval_context_construct(struct Depsgraph *depsgraph, float eval_time)
void BKE_pchan_bbone_deform_segment_index(const struct bPoseChannel *pchan, float pos, int *r_index, float *r_blend_next)
float distfactor_to_bone(const float vec[3], const float b1[3], const float b2[3], float rad1, float rad2, float rdist)
void BKE_armature_mat_pose_to_bone(struct bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
void BKE_armature_mat_bone_to_pose(struct bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
void BKE_pchan_calc_mat(struct bPoseChannel *pchan)
BVHTree * BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data, struct Mesh *mesh, const BVHCacheType bvh_cache_type, const int tree_type)
void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data)
void BKE_cachefile_reader_open(struct CacheFile *cache_file, struct CacheReader **reader, struct Object *object, const char *object_path)
void BKE_cachefile_reader_free(struct CacheFile *cache_file, struct CacheReader **reader)
float BKE_cachefile_time_offset(const struct CacheFile *cache_file, const float time, const float fps)
Camera data-block and utility functions.
void BKE_camera_params_init(CameraParams *params)
void BKE_camera_params_from_object(CameraParams *params, const struct Object *cam_ob)
void(* ConstraintIDFunc)(struct bConstraint *con, struct ID **idpoin, bool is_reference, void *userdata)
bool CustomData_has_layer(const struct CustomData *data, int type)
void * CustomData_get_layer(const struct CustomData *data, int type)
void * CustomData_bmesh_get(const struct CustomData *data, void *block, int type)
display list (or rather multi purpose list) stuff.
DispList * BKE_displist_find(struct ListBase *lb, int type)
BMEditMesh * BKE_editmesh_from_object(struct Object *ob)
Return the BMEditMesh for a given object.
void BKE_driver_target_matrix_to_rot_channels(float mat[4][4], int auto_order, int rotation_mode, int channel, bool angles, float r_buf[4])
void IDP_BlendWrite(struct BlendWriter *writer, const struct IDProperty *prop)
#define IDP_BlendDataRead(reader, prop)
void IDP_FreeProperty(struct IDProperty *prop)
struct IDProperty * IDP_CopyProperty(const struct IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void id_us_min(struct ID *id)
void id_lib_extern(struct ID *id)
@ LIB_ID_CREATE_NO_USER_REFCOUNT
void id_us_plus(struct ID *id)
float BKE_movieclip_remap_scene_to_clip_frame(const struct MovieClip *clip, float framenr)
void BKE_movieclip_get_size(struct MovieClip *clip, struct MovieClipUser *user, int *width, int *height)
General operations, lookup, etc. for blender objects.
struct Mesh * BKE_object_get_evaluated_mesh(struct Object *object)
void BKE_object_where_is_calc_mat4(struct Object *ob, float r_obmat[4][4])
void BKE_object_to_mat4(struct Object *ob, float r_mat[4][4])
void BKE_object_minmax(struct Object *ob, float r_min[3], float r_max[3], const bool use_hidden)
bool BKE_shrinkwrap_project_normal(char options, const float vert[3], const float dir[3], const float ray_radius, const struct SpaceTransform *transf, struct ShrinkwrapTreeData *tree, BVHTreeRayHit *hit)
void BKE_shrinkwrap_find_nearest_surface(struct ShrinkwrapTreeData *tree, struct BVHTreeNearest *nearest, float co[3], int type)
#define NULL_BVHTreeFromMesh
void BKE_shrinkwrap_compute_smooth_normal(const struct ShrinkwrapTreeData *tree, const struct SpaceTransform *transform, int looptri_idx, const float hit_co[3], const float hit_no[3], float r_no[3])
bool BKE_shrinkwrap_init_tree(struct ShrinkwrapTreeData *data, Mesh *mesh, int shrinkType, int shrinkMode, bool force_normals)
void BKE_shrinkwrap_free_tree(struct ShrinkwrapTreeData *data)
void BKE_shrinkwrap_snap_point_to_surface(const struct ShrinkwrapTreeData *tree, const struct SpaceTransform *transform, int mode, int hit_idx, const float hit_co[3], const float hit_no[3], float goal_dist, const float point_co[3], float r_point_co[3])
void BKE_tracking_get_camera_object_matrix(struct Object *camera_object, float mat[4][4])
void BKE_tracking_camera_get_reconstructed_interpolate(struct MovieTracking *tracking, struct MovieTrackingObject *object, float framenr, float mat[4][4])
struct MovieTrackingTrack * BKE_tracking_track_get_named(struct MovieTracking *tracking, struct MovieTrackingObject *object, const char *name)
struct MovieTrackingObject * BKE_tracking_object_get_named(struct MovieTracking *tracking, const char *name)
struct MovieTrackingObject * BKE_tracking_object_get_camera(struct MovieTracking *tracking)
void BKE_tracking_marker_get_subframe_position(struct MovieTrackingTrack *track, float framenr, float pos[2])
void BKE_tracking_undistort_v2(struct MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
#define BVH_RAYCAST_DIST_MAX
int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], float radius, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata)
#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
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) 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)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
MINLINE float square_f(float a)
MINLINE float interpf(float a, float b, float t)
MINLINE float pow3f(float x)
void BLI_space_transform_from_matrices(struct SpaceTransform *data, const float local[4][4], const float target[4][4])
void mul_m3_v3(const float M[3][3], float r[3])
void zero_m4(float m[4][4])
void mul_m4_fl(float R[4][4], float f)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void BLI_space_transform_apply(const struct SpaceTransform *data, float co[3])
bool invert_m4(float R[4][4])
void madd_m4_m4m4fl(float R[4][4], const float A[4][4], const float B[4][4], const float f)
void unit_m3(float m[3][3])
void loc_eulO_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3], const short order)
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void unit_m4(float m[4][4])
void mul_mat3_m4_v3(const float M[4][4], float r[3])
void translate_m4(float mat[4][4], float tx, float ty, float tz)
void loc_rot_size_to_mat4(float R[4][4], const float loc[3], const float rot[3][3], const float size[3])
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 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])
void interp_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4], const float t)
void invert_m4_m4_safe(float Ainv[4][4], const float A[4][4])
bool is_negative_m4(const float mat[4][4])
void mul_m4_m4m4_aligned_scale(float R[4][4], const float A[4][4], const float B[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
void BLI_space_transform_invert_normal(const struct SpaceTransform *data, float no[3])
void mat4_to_size(float size[3], const float M[4][4])
void transpose_m3(float R[3][3])
void BLI_space_transform_invert(const struct SpaceTransform *data, float co[3])
float determinant_m3(float a1, float a2, float a3, float b1, float b2, float b3, float c1, float c2, float c3)
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 mul_m4_m3m4(float R[4][4], const float A[3][3], const float B[4][4])
void mul_v3_mat3_m4v3(float r[3], const float M[4][4], const float v[3])
void normalize_m4(float R[4][4]) ATTR_NONNULL()
void rotate_eulO(float eul[3], const short order, char axis, float angle)
void add_weighted_dq_dq(DualQuat *dq_sum, const DualQuat *dq, float weight)
void mat4_to_eul(float eul[3], const float mat[4][4])
void mat3_to_eulO(float eul[3], const short order, const float mat[3][3])
void mat4_to_compatible_eulO(float eul[3], const float old[3], const short order, const float mat[4][4])
void dquat_to_mat4(float R[4][4], const DualQuat *dq)
void axis_angle_normalized_to_mat3(float R[3][3], const float axis[3], const float angle)
void mat3_normalized_to_axis_angle(float axis[3], float *angle, const float M[3][3])
void mat4_to_dquat(DualQuat *dq, const float basemat[4][4], const float mat[4][4])
void eulO_to_mat3(float mat[3][3], const float eul[3], const short order)
void quat_apply_track(float quat[4], short axis, short upflag)
void compatible_eul(float eul[3], const float old[3])
void normalize_dq(DualQuat *dq, float totw)
void mat4_to_eulO(float eul[3], const short order, const float mat[4][4])
void quat_to_mat4(float mat[4][4], const float q[4])
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
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v3_fl(float r[3], float f)
MINLINE float normalize_v3(float r[3])
MINLINE void mul_v3_v3(float r[3], const float a[3])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void normal_short_to_float_v3(float r[3], const short n[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 negate_v3_v3(float r[3], const float a[3])
void project_v3_v3v3(float out[3], const float p[3], const float v_proj[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void negate_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 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
#define STRNCPY(dst, src)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
bool BLI_uniquename(struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t len)
#define INIT_MINMAX(min, max)
#define BLO_read_data_address(reader, ptr_p)
void BLO_write_struct_by_name(BlendWriter *writer, const char *struct_name, const void *data_ptr)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_list(BlendDataReader *reader, struct ListBase *list)
void BLO_write_float_array(BlendWriter *writer, uint num, const float *data_ptr)
#define BLO_read_id_address(reader, lib, id_ptr_p)
#define BLO_expand(expander, id)
void BPY_pyconstraint_target(struct bPythonConstraint *con, struct bConstraintTarget *ct)
void BPY_pyconstraint_exec(struct bPythonConstraint *con, struct bConstraintOb *cob, struct ListBase *targets)
#define CLOG_WARN(clg_ref,...)
struct Depsgraph Depsgraph
bool DEG_is_active(const struct Depsgraph *depsgraph)
void DEG_id_tag_update(struct ID *id, int flag)
float DEG_get_ctime(const Depsgraph *graph)
struct ID * DEG_get_original_id(struct ID *id)
@ ID_RECALC_COPY_ON_WRITE
#define ID_IS_LINKED(_id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
struct bStretchToConstraint bStretchToConstraint
@ CONSTRAINT_OVERRIDE_LIBRARY_LOCAL
@ CONSTRAINT_BBONE_SHAPE_FULL
struct bFollowTrackConstraint bFollowTrackConstraint
struct bActionConstraint bActionConstraint
@ CONSTRAINT_TYPE_TRACKTO
@ CONSTRAINT_TYPE_CHILDOF
@ CONSTRAINT_TYPE_TRANSFORM
@ CONSTRAINT_TYPE_FOLLOWTRACK
@ CONSTRAINT_TYPE_OBJECTSOLVER
@ CONSTRAINT_TYPE_ARMATURE
@ CONSTRAINT_TYPE_LOCLIKE
@ CONSTRAINT_TYPE_SHRINKWRAP
@ CONSTRAINT_TYPE_ROTLIMIT
@ CONSTRAINT_TYPE_CAMERASOLVER
@ CONSTRAINT_TYPE_ROTLIKE
@ CONSTRAINT_TYPE_SPLINEIK
@ CONSTRAINT_TYPE_KINEMATIC
@ CONSTRAINT_TYPE_DISTLIMIT
@ CONSTRAINT_TYPE_TRANSLIKE
@ CONSTRAINT_TYPE_LOCLIMIT
@ CONSTRAINT_TYPE_CLAMPTO
@ CONSTRAINT_TYPE_LOCKTRACK
@ CONSTRAINT_TYPE_SIZELIMIT
@ CONSTRAINT_TYPE_FOLLOWPATH
@ CONSTRAINT_TYPE_STRETCHTO
@ CONSTRAINT_TYPE_SIZELIKE
@ CONSTRAINT_TYPE_SAMEVOL
@ CONSTRAINT_TYPE_DAMPTRACK
@ CONSTRAINT_TYPE_TRANSFORM_CACHE
@ CONSTRAINT_OBTYPE_OBJECT
struct bShrinkwrapConstraint bShrinkwrapConstraint
@ CONSTRAINT_ARMATURE_QUATERNION
@ CONSTRAINT_ARMATURE_ENVELOPE
@ CONSTRAINT_ARMATURE_CUR_LOCATION
struct bLocateLikeConstraint bLocateLikeConstraint
struct bChildOfConstraint bChildOfConstraint
@ CAMERASOLVER_ACTIVECLIP
struct bSplineIKConstraint bSplineIKConstraint
@ FOLLOWTRACK_USE_UNDISTORTION
@ FOLLOWTRACK_USE_3D_POSITION
struct bLockTrackConstraint bLockTrackConstraint
@ ACTCON_BONE_USE_OBJECT_ACTION
struct bTransformConstraint bTransformConstraint
struct bSizeLimitConstraint bSizeLimitConstraint
struct bArmatureConstraint bArmatureConstraint
struct bDistLimitConstraint bDistLimitConstraint
#define CON_SHRINKWRAP_PROJECT_CULL_MASK
struct bMinMaxConstraint bMinMaxConstraint
@ TRANS_MIXSCALE_MULTIPLY
@ CONSTRAINT_SPLINEIK_YS_FIT_CURVE
@ CONSTRAINT_SPACE_CUSTOM
@ CONSTRAINT_SPACE_PARLOCAL
struct bTrackToConstraint bTrackToConstraint
struct bSizeLikeConstraint bSizeLikeConstraint
struct bClampToConstraint bClampToConstraint
struct bSameVolumeConstraint bSameVolumeConstraint
@ CONSTRAINT_SPLINEIK_USE_ORIGINAL_SCALE
struct bTransLikeConstraint bTransLikeConstraint
struct bLocLimitConstraint bLocLimitConstraint
struct bRotateLikeConstraint bRotateLikeConstraint
@ OBJECTSOLVER_ACTIVECLIP
@ OBJECTSOLVER_SET_INVERSE
@ CON_SHRINKWRAP_PROJECT_INVERT_CULL
@ CON_SHRINKWRAP_PROJECT_OPPOSITE
@ CON_SHRINKWRAP_TRACK_NORMAL
struct bTransformCacheConstraint bTransformCacheConstraint
@ PIVOTCON_FLAG_OFFSET_ABS
@ STRETCHTOCON_USE_BULGE_MAX
@ STRETCHTOCON_USE_BULGE_MIN
struct bObjectSolverConstraint bObjectSolverConstraint
struct bKinematicConstraint bKinematicConstraint
struct bRotLimitConstraint bRotLimitConstraint
struct bPythonConstraint bPythonConstraint
struct bFollowPathConstraint bFollowPathConstraint
struct bCameraSolverConstraint bCameraSolverConstraint
struct bPivotConstraint bPivotConstraint
struct bDampTrackConstraint bDampTrackConstraint
@ FOLLOWTRACK_FRAME_STRETCH
@ MOD_SHRINKWRAP_TARGET_PROJECT
@ MOD_SHRINKWRAP_NEAREST_VERTEX
@ MOD_SHRINKWRAP_NEAREST_SURFACE
Object is a sort of wrapper for general info.
@ UI_PANEL_DATA_EXPAND_ROOT
@ UI_SUBPANEL_DATA_EXPAND_2
@ UI_SUBPANEL_DATA_EXPAND_1
_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 type
_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 right
_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.
Group RGB to Bright Vector Camera CLAMP
#define BM_ITER_MESH(ele, iter, bm, itype)
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
btVector3 orth(const btVector3 &v)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint ** constraints
SIMD_FORCE_INLINE btScalar norm() const
Return the norm (length) of the vector.
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
static bConstraint * add_new_constraint(Object *ob, bPoseChannel *pchan, const char *name, short type)
static void add_new_constraint_to_list(Object *ob, bPoseChannel *pchan, bConstraint *con)
bConstraint * BKE_constraint_copy_for_object(Object *ob, bConstraint *src)
static void minmax_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void minmax_new_data(void *cdata)
static bConstraint * constraint_find_original_for_update(bConstraintOb *cob, bConstraint *con)
static void stretchto_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void minmax_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void followtrack_fit_frame(FollowTrackContext *context, const int clip_width, const int clip_height, float marker_position[2])
static void samevolume_new_data(void *cdata)
static float followtrack_distance_from_viewplane_get(FollowTrackContext *context, bConstraintOb *cob)
void BKE_constraint_blend_read_expand(BlendExpander *expander, ListBase *lb)
static void pycon_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void rotlimit_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *UNUSED(targets))
void BKE_constraints_id_loop(ListBase *conlist, ConstraintIDFunc func, void *userdata)
static Object * followtrack_camera_object_get(bConstraint *con, bConstraintOb *cob)
static void damptrack_do_transform(float matrix[4][4], const float tarvec[3], int track_axis)
static int kinematic_get_tars(bConstraint *con, ListBase *list)
static bConstraintTypeInfo CTI_TRANSFORM_CACHE
static void stretchto_new_data(void *cdata)
bool BKE_constraint_is_nonlocal_in_liboverride(const Object *ob, const bConstraint *con)
void BKE_constraints_copy(ListBase *dst, const ListBase *src, bool do_extern)
static bConstraintTypeInfo CTI_ROTLIKE
static void locktrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void sizelike_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
bool BKE_constraint_remove_ex(ListBase *list, Object *ob, bConstraint *con, bool clear_dep)
static void transformcache_new_data(void *cdata)
static int followpath_get_tars(bConstraint *con, ListBase *list)
static void kinematic_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void loclike_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static void actcon_get_tarmat(struct Depsgraph *depsgraph, bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
static bConstraintTypeInfo CTI_ROTLIMIT
static void followtrack_evaluate_using_3d_position_object(FollowTrackContext *context, bConstraintOb *cob)
static void sizelike_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static int loclike_get_tars(bConstraint *con, ListBase *list)
bConstraint * BKE_constraint_add_for_object(Object *ob, const char *name, short type)
static void transform_new_data(void *cdata)
bConstraint * BKE_constraint_copy_for_pose(Object *ob, bPoseChannel *pchan, bConstraint *src)
static void transformcache_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void rotlike_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void translike_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void transformcache_copy(bConstraint *con, bConstraint *srccon)
static int minmax_get_tars(bConstraint *con, ListBase *list)
static void followpath_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
bConstraint * BKE_constraints_find_name(ListBase *list, const char *name)
static void followtrack_evaluate_using_3d_position_camera(FollowTrackContext *context, bConstraintOb *cob)
static bConstraintTypeInfo CTI_STRETCHTO
static void camerasolver_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *UNUSED(targets))
static bConstraintTypeInfo CTI_TRANSFORM
static void vectomat(const float vec[3], const float target_up[3], short axis, short upflag, short flags, float m[3][3])
bool BKE_constraint_target_uses_bbone(struct bConstraint *con, struct bConstraintTarget *UNUSED(ct))
static bConstraintTypeInfo CTI_DAMPTRACK
static int pycon_get_tars(bConstraint *con, ListBase *list)
static int stretchto_get_tars(bConstraint *con, ListBase *list)
static void rotlike_new_data(void *cdata)
static void splineik_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstraint *UNUSED(con), bConstraintOb *UNUSED(cob), bConstraintTarget *ct, float UNUSED(ctime))
static void followtrack_evaluate_using_3d_position(FollowTrackContext *context, bConstraintOb *cob)
static void pycon_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
static void shrinkwrap_evaluate(bConstraint *UNUSED(con), bConstraintOb *cob, ListBase *targets)
static void childof_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void followpath_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static bConstraintTypeInfo CTI_CLAMPTO
static void pivotcon_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static bConstraintTypeInfo CTI_SAMEVOL
static MovieTrackingObject * followtrack_tracking_object_get(bConstraint *con, bConstraintOb *cob)
static void con_extern_cb(bConstraint *UNUSED(con), ID **idpoin, bool UNUSED(is_reference), void *UNUSED(userData))
static void splineik_copy(bConstraint *con, bConstraint *srccon)
static int damptrack_get_tars(bConstraint *con, ListBase *list)
static void clampto_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static int basis_cross(int n, int m)
void BKE_constraint_target_matrix_get(struct Depsgraph *depsgraph, Scene *scene, bConstraint *con, int index, short ownertype, void *ownerdata, float mat[4][4], float ctime)
static bConstraintTypeInfo CTI_TRACKTO
static void childof_new_data(void *cdata)
void BKE_constraint_free_data_ex(bConstraint *con, bool do_id_user)
static bConstraintTypeInfo CTI_KINEMATIC
static int splineik_get_tars(bConstraint *con, ListBase *list)
static void actcon_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
bConstraint * BKE_constraint_find_from_target(Object *ob, bConstraintTarget *tgt, bPoseChannel **r_pchan)
static void distlimit_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
void BKE_constraint_unique_name(bConstraint *con, ListBase *list)
static bConstraintTypeInfo CTI_TRANSLIKE
static bConstraintTypeInfo CTI_FOLLOWPATH
static void shrinkwrap_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
void BKE_constraints_active_set(ListBase *list, bConstraint *con)
void BKE_constraint_blend_read_lib(BlendLibReader *reader, ID *id, ListBase *conlist)
static bConstraintTypeInfo CTI_SIZELIKE
static void armdef_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstraint *UNUSED(con), bConstraintOb *UNUSED(cob), bConstraintTarget *ct, float UNUSED(ctime))
static void actcon_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void splineik_new_data(void *cdata)
void BKE_constraints_clear_evalob(bConstraintOb *cob)
static void pycon_new_data(void *cdata)
static bConstraint * add_new_constraint_internal(const char *name, short type)
static void con_unlink_refs_cb(bConstraint *UNUSED(con), ID **idpoin, bool is_reference, void *UNUSED(userData))
static void kinematic_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
static void locktrack_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static bConstraintTypeInfo CTI_CHILDOF
static void armdef_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void shrinkwrap_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
static void actcon_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void sizelimit_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *UNUSED(targets))
static int get_space_tar(bConstraint *con, ListBase *list)
static void followpath_new_data(void *cdata)
static void pycon_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void transform_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
void BKE_constraints_proxylocal_extract(ListBase *dst, ListBase *src)
static void camerasolver_new_data(void *cdata)
static int translike_get_tars(bConstraint *con, ListBase *list)
static bConstraintTypeInfo CTI_SIZELIMIT
const bConstraintTypeInfo * BKE_constraint_typeinfo_from_type(int type)
static void clampto_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static bConstraintTypeInfo CTI_DISTLIMIT
static bConstraintTypeInfo CTI_CAMERASOLVER
static bConstraintTypeInfo CTI_LOCLIKE
static void stretchto_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void trackto_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static bConstraint * constraint_list_find_from_target(ListBase *constraints, bConstraintTarget *tgt)
static void objectsolver_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static bConstraintTypeInfo CTI_LOCLIMIT
static void trackto_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static void flush_space_tar(bConstraint *con, ListBase *list, bool no_copy)
static void camerasolver_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void armdef_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void followtrack_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void loclike_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void clampto_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstraint *UNUSED(con), bConstraintOb *UNUSED(cob), bConstraintTarget *ct, float UNUSED(ctime))
static void constraint_copy_data_ex(bConstraint *dst, bConstraint *src, const int flag, const bool do_extern)
static bool followtrack_context_init(FollowTrackContext *context, bConstraint *con, bConstraintOb *cob)
void BKE_constraint_mat_convertspace(Object *ob, bPoseChannel *pchan, bConstraintOb *cob, float mat[4][4], short from, short to, const bool keep_scale)
static void loclike_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static int childof_get_tars(bConstraint *con, ListBase *list)
void BKE_constraint_panel_expand(bConstraint *con)
static int actcon_get_tars(bConstraint *con, ListBase *list)
static void shrinkwrap_new_data(void *cdata)
static void objectsolver_new_data(void *cdata)
static void contarget_get_mesh_mat(Object *ob, const char *substring, float mat[4][4])
static void splineik_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static void distlimit_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void default_get_tarmat_full_bbone(struct Depsgraph *UNUSED(depsgraph), bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
static void rotlike_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static bConstraintTypeInfo CTI_FOLLOWTRACK
static void armdef_copy(bConstraint *con, bConstraint *srccon)
bConstraint * BKE_constraints_active_get(ListBase *list)
static bConstraintTypeInfo CTI_SHRINKWRAP
static void kinematic_new_data(void *cdata)
static bConstraintTypeInfo CTI_ARMATURE
static void sizelike_new_data(void *cdata)
void BKE_constraints_copy_ex(ListBase *dst, const ListBase *src, const int flag, bool do_extern)
static void childof_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static void lib_link_constraint_cb(bConstraint *UNUSED(con), ID **idpoin, bool UNUSED(is_reference), void *userdata)
static int sizelike_get_tars(bConstraint *con, ListBase *list)
static void stretchto_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
void BKE_constraints_free_ex(ListBase *list, bool do_id_user)
static int rotlike_get_tars(bConstraint *con, ListBase *list)
static void translike_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
bool BKE_constraint_remove(ListBase *list, bConstraint *con)
static void objectsolver_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *UNUSED(targets))
void BKE_constraints_solve(struct Depsgraph *depsgraph, ListBase *conlist, bConstraintOb *cob, float ctime)
static void translike_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void armdef_accumulate_bone(bConstraintTarget *ct, bPoseChannel *pchan, const float wco[3], bool force_envelope, float *r_totweight, float r_sum_mat[4][4], DualQuat *r_sum_dq)
static void rotlike_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void default_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
static void followpath_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void pycon_copy(bConstraint *con, bConstraint *srccon)
static void transformcache_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
struct tConstraintLinkData tConstraintLinkData
bConstraint * BKE_constraint_duplicate_ex(bConstraint *src, const int flag, const bool do_extern)
static void locktrack_new_data(void *cdata)
static void constraints_init_typeinfo(void)
static int locktrack_get_tars(bConstraint *con, ListBase *list)
static void loclimit_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *UNUSED(targets))
void BKE_constraint_custom_object_space_get(float r_mat[4][4], bConstraint *con)
static void shrinkwrap_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static void samevolume_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *UNUSED(targets))
#define SINGLETARGETNS_GET_TARS(con, datatar, ct, list)
static int distlimit_get_tars(bConstraint *con, ListBase *list)
static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *UNUSED(targets))
static bConstraintTypeInfo CTI_SPLINEIK
static void splineik_free(bConstraint *con)
static int pivotcon_get_tars(bConstraint *con, ListBase *list)
static void trackto_new_data(void *cdata)
static void followtrack_undistort_if_needed(FollowTrackContext *context, const int clip_width, const int clip_height, float marker_position[2])
struct FollowTrackContext FollowTrackContext
static void damptrack_new_data(void *cdata)
static void damptrack_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
bConstraint * BKE_constraint_add_for_pose(Object *ob, bPoseChannel *pchan, const char *name, short type)
static void trackto_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void damptrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static void followtrack_evaluate_using_2d_position(FollowTrackContext *context, bConstraintOb *cob)
static void constraint_target_to_mat4(Object *ob, const char *substring, bConstraintOb *cob, float mat[4][4], short from, short to, short flag, float headtail)
static void contarget_get_lattice_mat(Object *ob, const char *substring, float mat[4][4])
static bConstraintTypeInfo CTI_MINMAX
static int shrinkwrap_get_tars(bConstraint *con, ListBase *list)
void BKE_constraints_free(ListBase *list)
static void pivotcon_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
const bConstraintTypeInfo * BKE_constraint_typeinfo_get(bConstraint *con)
static bConstraint * constraint_find_original(Object *ob, bPoseChannel *pchan, bConstraint *con, Object **r_orig_ob)
static bConstraintTypeInfo * constraintsTypeInfo[NUM_CONSTRAINT_TYPES]
static void sizelike_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *targets)
static int armdef_get_tars(bConstraint *con, ListBase *list)
static void pycon_free(bConstraint *con)
static void followtrack_project_to_depth_object_if_needed(FollowTrackContext *context, bConstraintOb *cob)
static void transformcache_free(bConstraint *con)
static void pivotcon_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
void BKE_constraint_blend_read_data(BlendDataReader *reader, ListBase *lb)
static const float track_dir_vecs[6][3]
bool BKE_constraints_proxylocked_owner(Object *ob, bPoseChannel *pchan)
bConstraintOb * BKE_constraints_make_evalob(Depsgraph *depsgraph, Scene *scene, Object *ob, void *subdata, short datatype)
static int trackto_get_tars(bConstraint *con, ListBase *list)
#define SINGLETARGETNS_FLUSH_TARS(con, datatar, ct, list, no_copy)
static void locktrack_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void splineik_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void minmax_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
void BKE_constraint_free_data(bConstraint *con)
#define VALID_CONS_TARGET(ct)
static void actcon_new_data(void *cdata)
static void loclike_new_data(void *cdata)
static void armdef_free(bConstraint *con)
static void damptrack_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void followpath_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstraint *con, bConstraintOb *UNUSED(cob), bConstraintTarget *ct, float UNUSED(ctime))
#define SINGLETARGET_GET_TARS(con, datatar, datasubtarget, ct, list)
static bConstraintTypeInfo CTI_LOCKTRACK
void BKE_constraint_blend_write(BlendWriter *writer, ListBase *conlist)
static void con_fix_copied_refs_cb(bConstraint *UNUSED(con), ID **idpoin, bool is_reference, void *UNUSED(userData))
static int transform_get_tars(bConstraint *con, ListBase *list)
static bConstraintTypeInfo CTI_OBJECTSOLVER
static bConstraintTypeInfo CTI_PIVOT
static void expand_constraint_cb(bConstraint *UNUSED(con), ID **idpoin, bool UNUSED(is_reference), void *userdata)
static bConstraintTypeInfo CTI_PYTHON
static bConstraintTypeInfo CTI_ACTION
static void custom_space_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static int clampto_get_tars(bConstraint *con, ListBase *list)
static void armdef_accumulate_matrix(const float obmat[4][4], const float iobmat[4][4], const float basemat[4][4], const float bonemat[4][4], float weight, float r_sum_mat[4][4], DualQuat *r_sum_dq)
static void kinematic_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static void distlimit_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
static void clampto_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
static void followtrack_new_data(void *cdata)
#define SINGLETARGET_FLUSH_TARS(con, datatar, datasubtarget, ct, list, no_copy)
static MovieClip * followtrack_tracking_clip_get(bConstraint *con, bConstraintOb *cob)
static void childof_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
void BKE_constraint_targets_for_solving_get(struct Depsgraph *depsgraph, bConstraint *con, bConstraintOb *cob, ListBase *targets, float ctime)
static void distlimit_new_data(void *cdata)
static void transform_id_looper(bConstraint *con, ConstraintIDFunc func, void *userdata)
const Depsgraph * depsgraph
IconTextureDrawCall normal
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
struct SELECTID_Context context
BVHTree_RayCastCallback raycast_callback
const float * anim_path_accum_length
MovieTrackingObject * tracking_object
MovieTrackingTrack * track
struct MDeformVert * dvert
struct MovieTracking tracking
struct CurveCache * curve_cache
unsigned int layer_protected
float space_obj_world_matrix[4][4]
struct bPoseChannel * pchan
struct Depsgraph * depsgraph
struct bConstraintTarget * next
void(* id_looper)(struct bConstraint *con, ConstraintIDFunc func, void *userdata)
int(* get_constraint_targets)(struct bConstraint *con, struct ListBase *list)
void(* evaluate_constraint)(struct bConstraint *con, struct bConstraintOb *cob, struct ListBase *targets)
void(* flush_constraint_targets)(struct bConstraint *con, struct ListBase *list, bool no_copy)
void(* copy_data)(struct bConstraint *con, struct bConstraint *src)
void(* get_target_matrix)(struct Depsgraph *depsgraph, struct bConstraint *con, struct bConstraintOb *cob, struct bConstraintTarget *ct, float ctime)
void(* free_data)(struct bConstraint *con)
void(* new_data)(void *cdata)
struct Object * space_object
struct bConstraint * prev
struct bConstraint * next
struct Mat4 * bbone_deform_mats
struct Mat4 * bbone_pose_mats
struct Mat4 * bbone_rest_mats
struct bPoseChannel_Runtime runtime
struct bPoseChannel * orig_pchan
static int blend(const Tex *tex, const float texvec[3], TexResult *texres)