115 if (use_autokey_mode) {
147 printf(
"ERROR: Couldn't add AnimData (ID = %s)\n", (
id) ? (
id->
name) :
"<None>");
155 char actname[
sizeof(
id->name) - 2];
198 const char rna_path[],
199 const int array_index)
302 int old_flag = fcu->
flag;
305 BKE_report(reports,
RPT_ERROR,
"No RNA pointer available to retrieve values for this fcurve");
316 "Could not update flags for this fcurve, as RNA path is invalid for the given ID "
317 "(ID = %s, path = %s)",
326 if (old_flag != fcu->
flag) {
351 float start = first->
vec[1][0], end = last->vec[1][0];
357 if (*px < start || *px > end) {
358 float period = end - start;
359 float step =
floorf((*px - start) / period);
360 *px -= step * period;
365 short mode = (step >= 0) ?
data->after_mode :
data->before_mode;
368 *py -= step * (last->vec[1][1] - first->
vec[1][1]);
382 float dy = bezt->
vec[1][1] - dst->
vec[1][1];
385 dst->
vec[0][1] += dy;
386 dst->
vec[1][1] += dy;
387 dst->
vec[2][1] += dy;
415 if ((i >= 0) && (i < fcu->totvert)) {
417 fcu->
bezt[i] = *bezt;
426 if ((i == 0 || i == fcu->
totvert - 1) &&
448 if (i < fcu->totvert) {
471 *(fcu->
bezt) = *bezt;
509 if (bezt_auto && prev_auto && next_auto) {
524 const float hx = bezt->
vec[1][0] - bezt->
vec[0][0];
525 const float dx = bezt->
vec[1][0] - prev->
vec[1][0];
528 const bool auto_works_well =
fabsf(hx - dx / 3.0f) < 0.001f;
529 if (auto_works_well) {
557 beztr.
vec[0][0] =
x - 1.0f;
561 beztr.
vec[2][0] =
x + 1.0f;
575 beztr.
h1 = beztr.
h2 =
U.keyhandles_new;
578 beztr.
ipo =
U.ipo_new;
600 beztr.
back = 1.70158f;
629 bezt->
ipo = (bezt - 1)->ipo;
631 else if (a < fcu->totvert - 1) {
632 bezt->
ipo = (bezt + 1)->ipo;
682 for (
int i = 0; i < totCount; i++) {
683 float prevPosi = 0.0f, prevVal = 0.0f;
684 float beztPosi = 0.0f, beztVal = 0.0f;
687 beztPosi = bezt->
vec[1][0];
688 beztVal = bezt->
vec[1][1];
694 prevPosi = prev->
vec[1][0];
695 prevVal = prev->
vec[1][1];
698 if (
IS_EQF(prevPosi, cFrame) &&
IS_EQF(beztPosi, cFrame) &&
IS_EQF(beztPosi, prevPosi)) {
703 if ((prevPosi <= cFrame) && (cFrame <= beztPosi)) {
715 if (
IS_EQF(realVal, nValue)) {
722 if (cFrame < prevPosi) {
738 if ((cFrame < beztPosi) && (totCount == 1)) {
744 if (i < (totCount - 1)) {
761 float valA = bezt->
vec[1][1];
764 valB = prev->
vec[1][1];
767 valB = bezt->
vec[1][1] + 1.0f;
792 if (
length > buffer_size) {
800 for (
int i = 0; i <
length; i++) {
801 values[i] = (
float)tmp_bool[i];
808 for (
int i = 0; i <
length; i++) {
809 values[i] = (
float)tmp_int[i];
817 memset(values, 0,
sizeof(
float) *
length);
864 bool has_rigidbody =
false;
865 bool has_parent =
false;
866 const char *identifier =
NULL;
900 if (
ELEM(
NULL, con, identifier) && (has_parent ==
false) && (has_rigidbody ==
false)) {
905 if (identifier ==
NULL) {
906 printf(
"%s failed: NULL identifier\n", __func__);
910 if (strstr(identifier,
"location")) {
913 else if (strstr(identifier,
"rotation")) {
916 else if (strstr(identifier,
"scale")) {
920 printf(
"%s failed: identifier - '%s'\n", __func__, identifier);
927 if (has_parent || has_rigidbody) {
932 for (; con; con = con->
next) {
1045 if (strstr(identifier,
"location")) {
1061 if (strstr(identifier,
"location")) {
1075 if (strstr(identifier,
"rotation_euler")) {
1082 if (strstr(identifier,
"rotation_quaternion")) {
1092 if (strstr(identifier,
"rotation_axis_angle")) {
1100 if (strstr(identifier,
"scale")) {
1144 nla_context, &
ptr, prop, values, *r_count, index, r_force_all)) {
1146 reports,
RPT_ERROR,
"Could not insert keyframe due to zero NLA influence or base value");
1172 "F-Curve with path '%s[%d]' cannot be keyframed, ensure that it is not locked or sampled, "
1173 "and try removing F-Modifiers",
1179 float cfra = anim_eval_context->
eval_time;
1220 switch (insert_mode) {
1258 float curval = 0.0f;
1269 reports,
RPT_ERROR,
"No RNA pointer available to retrieve values for keyframing from");
1282 "Could not insert keyframe, as RNA path is invalid for the given ID (ID = %s, "
1312 if (values ==
NULL) {
1317 if (index >= 0 && index < value_count) {
1318 curval = values[index];
1321 if (values != value_buffer) {
1335 const char rna_path[],
1347 FCurve *fcu = can_create_curve ?
1372 reports,
ptr, prop, fcu, anim_eval_context, curval, keytype, flag);
1385 if (adt && adt->
action == act) {
1388 nla_cache, id_ptr, adt, anim_eval_context);
1396 *r_nla_context =
NULL;
1397 return *anim_eval_context;
1418 const char rna_path[],
1443 "Could not insert keyframe, as RNA path is invalid for the given ID (ID = %s, path = %s)",
1444 (
id) ?
id->
name :
TIP_(
"<Missing ID block>"),
1457 "Could not insert keyframe, as this type does not support animation data (ID = "
1468 anim_eval_context, &id_ptr, adt, act, nla_cache ? nla_cache : &tmp_nla_cache, &nla_context);
1486 if (values !=
NULL) {
1488 if (array_index == -1 || force_all) {
1493 for (array_index = 0; array_index < value_count; array_index++) {
1503 values[array_index],
1507 exclude = array_index;
1512 if (exclude != -1) {
1515 for (array_index = 0; array_index < value_count; array_index++) {
1516 if (array_index != exclude) {
1526 values[array_index],
1535 for (array_index = 0; array_index < value_count; array_index++) {
1545 values[array_index],
1553 if (array_index >= 0 && array_index < value_count) {
1563 values[array_index],
1569 if (values != value_buffer) {
1646 const char rna_path[],
1653 int array_index_max = array_index + 1;
1668 "Could not delete keyframe, as RNA path is invalid for the given ID (ID = %s, path = %s)",
1695 if (array_index == -1) {
1703 if (array_index_max == array_index) {
1709 for (; array_index < array_index_max; array_index++) {
1720 "Not deleting keyframe for locked F-Curve '%s' for %s '%s'",
1753 const char rna_path[],
1760 int array_index_max = array_index + 1;
1775 "Could not clear keyframe, as RNA path is invalid for the given ID (ID = %s, path = %s)",
1799 if (array_index == -1) {
1807 if (array_index_max == array_index) {
1813 for (; array_index < array_index_max; array_index++) {
1824 "Not clearing all keyframes from locked F-Curve '%s' for %s '%s'",
1876 bool ob_edit_mode =
false;
1891 ob_edit_mode =
true;
1899 "Keying set '%s' - successfully added %d keyframes",
1910 if (num_channels < 0) {
1915 if (num_channels > 0) {
1920 "Successfully added %d keyframes for keying set '%s'",
1940 ot->
name =
"Insert Keyframe";
1941 ot->
idname =
"ANIM_OT_keyframe_insert";
1943 "Insert keyframes on the current frame for all properties in the specified Keying Set";
1965 "Confirm Successful Insert",
1966 "Show a popup when the keyframes get successfully added");
1976 ot->
name =
"Insert Keyframe (by name)";
1977 ot->
idname =
"ANIM_OT_keyframe_insert_by_name";
1978 ot->
description =
"Alternate access to 'Insert Keyframe' for keymaps to use";
1998 "Confirm Successful Insert",
1999 "Show a popup when the keyframes get successfully added");
2020 uiItemsEnumO(layout,
"ANIM_OT_keyframe_insert_menu",
"type");
2038 ot->
name =
"Insert Keyframe Menu";
2039 ot->
idname =
"ANIM_OT_keyframe_insert_menu";
2041 "Insert Keyframes for specified Keying Set, with menu of available Keying Sets if undefined";
2065 "Confirm Successful Insert",
2066 "Show a popup when the keyframes get successfully added");
2122 printf(
"KeyingSet '%s' - Successfully removed %d Keyframes\n", ks->
name, num_channels);
2126 if (num_channels < 0) {
2131 if (num_channels > 0) {
2136 "Successfully removed %d keyframes for keying set '%s'",
2156 ot->
name =
"Delete Keying-Set Keyframe";
2157 ot->
idname =
"ANIM_OT_keyframe_delete";
2159 "Delete keyframes on the current frame for all properties in the specified Keying Set";
2181 "Confirm Successful Delete",
2182 "Show a popup when the keyframes get successfully removed");
2190 ot->
name =
"Delete Keying-Set Keyframe (by name)";
2191 ot->
idname =
"ANIM_OT_keyframe_delete_by_name";
2192 ot->
description =
"Alternate access to 'Delete Keyframe' for keymaps to use";
2212 "Confirm Successful Delete",
2213 "Show a popup when the keyframes get successfully removed");
2223 bool changed =
false;
2227 if ((ob->adt) && (ob->adt->action)) {
2233 bool can_delete =
false;
2248 if ((pchan) && (pchan->
bone)) {
2290 ot->
name =
"Remove Animation";
2291 ot->
description =
"Remove all keyframe animation for selected objects";
2292 ot->
idname =
"ANIM_OT_keyframe_clear_v3d";
2309 int selected_objects_len = 0;
2310 int selected_objects_success_len = 0;
2311 int success_multi = 0;
2317 selected_objects_len += 1;
2320 if ((ob->adt) && (ob->adt->action)) {
2333 "Not deleting keyframe for locked F-Curve '%s', object '%s'",
2354 if ((pchan) && (pchan->
bone)) {
2384 selected_objects_success_len += 1;
2385 success_multi += success;
2393 if (selected_objects_success_len) {
2396 "%d object(s) successfully had %d keyframes removed",
2397 selected_objects_success_len,
2402 op->
reports,
RPT_ERROR,
"No keyframes removed from %d object(s)", selected_objects_len);
2414 ot->
name =
"Delete Keyframe";
2415 ot->
description =
"Remove keyframes on current frame for selected objects and bones";
2416 ot->
idname =
"ANIM_OT_keyframe_delete_v3d";
2441 bool changed =
false;
2471 "This property cannot be animated as it will not get updated correctly");
2477 bool driven, special;
2481 if (fcu && driven) {
2498 const char *group =
NULL;
2509 group = pchan->
name;
2512 (strstr(identifier,
"location") || strstr(identifier,
"rotation") ||
2513 strstr(identifier,
"scale"))) {
2517 group =
"Object Transforms";
2542 "Failed to resolve path to property, "
2543 "try manually specifying this using a Keying Set instead");
2551 "\"%s\" property cannot be animated",
2557 "Button doesn't appear to have any property information attached (ptr.data = "
2585 ot->
name =
"Insert Keyframe (Buttons)";
2586 ot->
idname =
"ANIM_OT_keyframe_insert_button";
2587 ot->
description =
"Insert a keyframe for current UI-active property";
2610 bool changed =
false;
2635 "Not deleting keyframe for locked F-Curve for NLA Strip influence on %s - %s '%s'",
2672 printf(
"Button Delete-Key: no path to property\n");
2677 printf(
"ptr.data = %p, prop = %p\n",
ptr.
data, (
void *)prop);
2694 ot->
name =
"Delete Keyframe (Buttons)";
2695 ot->
idname =
"ANIM_OT_keyframe_delete_button";
2696 ot->
description =
"Delete current keyframe of current UI-active property";
2717 bool changed =
false;
2740 printf(
"Button Clear-Key: no path to property\n");
2744 printf(
"ptr.data = %p, prop = %p\n",
ptr.
data, (
void *)prop);
2761 ot->
name =
"Clear Keyframe (Buttons)";
2762 ot->
idname =
"ANIM_OT_keyframe_clear_button";
2763 ot->
description =
"Clear all keyframes on the currently active property";
2830 if ((i >= 0) && (i < fcu->totvert)) {
2847 anim_rna.
prop = prop;
2855 float cur_val = (index >= 0 && index <
count) ? values[index] : 0.0f;
3059 bool changed =
false;
3063 const int rnaindex_check = (rnaindex == -1) ? 0 : rnaindex;
3065 C,
ptr, prop, rnaindex_check,
NULL, &action, &driven, &special);
typedef float(TangentPoint)[2]
Blender kernel action and pose functionality.
struct bActionGroup * action_groups_add_new(struct bAction *act, const char name[])
struct bPoseChannel * BKE_pose_channel_find_name(const struct bPose *pose, const char *name)
void action_group_colors_sync(struct bActionGroup *grp, const struct bActionGroup *ref_grp)
struct bActionGroup * BKE_action_group_find_name(struct bAction *act, const char name[])
struct bAction * BKE_action_add(struct Main *bmain, const char name[])
void action_groups_add_channel(struct bAction *act, struct bActionGroup *agrp, struct FCurve *fcurve)
bool BKE_animdata_action_ensure_idroot(const struct ID *owner, struct bAction *action)
struct AnimData * BKE_animdata_from_id(struct ID *id)
struct AnimData * BKE_animdata_add_id(struct ID *id)
void BKE_animsys_free_nla_keyframing_context_cache(struct ListBase *cache)
bool BKE_animsys_nla_remap_keyframe_values(struct NlaKeyframingContext *context, struct PointerRNA *prop_ptr, struct PropertyRNA *prop, float *values, int count, int index, bool *r_force_all)
AnimationEvalContext BKE_animsys_eval_context_construct(struct Depsgraph *depsgraph, float eval_time)
struct NlaKeyframingContext * BKE_animsys_get_nla_keyframing_context(struct ListBase *cache, struct PointerRNA *ptr, struct AnimData *adt, const struct AnimationEvalContext *anim_eval_context)
AnimationEvalContext BKE_animsys_eval_context_construct_at(const AnimationEvalContext *anim_eval_context, float eval_time)
void BKE_armature_mat_pose_to_bone(struct bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
struct ScrArea * CTX_wm_area(const bContext *C)
struct Scene * CTX_data_scene(const bContext *C)
struct Object * CTX_data_edit_object(const bContext *C)
#define CTX_DATA_BEGIN(C, Type, instance, member)
struct ReportList * CTX_wm_reports(const bContext *C)
struct Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
void BKE_fcurve_active_keyframe_set(struct FCurve *fcu, const struct BezTriple *active_bezt)
float evaluate_fcurve(struct FCurve *fcu, float evaltime)
bool BKE_fcurve_bezt_subdivide_handles(struct BezTriple *bezt, struct BezTriple *prev, struct BezTriple *next, float *r_pdelta)
float calculate_fcurve(struct PathResolvedRNA *anim_rna, struct FCurve *fcu, const struct AnimationEvalContext *anim_eval_context)
bool BKE_fcurve_is_empty(struct FCurve *fcu)
struct FCurve * BKE_fcurve_find_by_rna_context_ui(struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA *prop, int rnaindex, struct AnimData **r_animdata, struct bAction **r_action, bool *r_driven, bool *r_special)
bool BKE_fcurve_is_keyframable(struct FCurve *fcu)
bool BKE_fcurve_is_protected(struct FCurve *fcu)
struct FCurve * BKE_fcurve_find(ListBase *list, const char rna_path[], const int array_index)
eFCU_Cycle_Type BKE_fcurve_get_cycle_type(struct FCurve *fcu)
void calchandles_fcurve(struct FCurve *fcu)
struct FCurve * BKE_fcurve_create(void)
int BKE_fcurve_bezt_binarysearch_index(struct BezTriple array[], float frame, int arraylen, bool *r_replace)
float evaluate_driver(struct PathResolvedRNA *anim_rna, struct ChannelDriver *driver, struct ChannelDriver *driver_orig, const struct AnimationEvalContext *anim_eval_context)
const char * BKE_idtype_idcode_to_name(const short idcode)
struct Key * BKE_key_from_object(const struct Object *ob)
General operations, lookup, etc. for materials.
struct Material * BKE_object_material_get(struct Object *ob, short act)
bool BKE_nlastrip_has_curves_for_property(const struct PointerRNA *ptr, const struct PropertyRNA *prop)
float BKE_nla_tweakedit_remap(struct AnimData *adt, float cframe, short mode)
void BKE_report(ReportList *reports, ReportType type, const char *message)
void BKE_reportf(ReportList *reports, ReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int compare_ff_relative(float a, float b, const float max_diff, const int max_ulps)
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mat4_to_size(float size[3], const float M[4][4])
void mat4_to_axis_angle(float axis[3], float *angle, const float M[4][4])
void mat3_to_quat_is_ok(float q[4], const float mat[3][3])
void mat4_to_eulO(float eul[3], const short order, const float mat[4][4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
char * BLI_str_quoted_substrN(const char *__restrict str, const char *__restrict prefix) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
struct Depsgraph Depsgraph
void DEG_id_tag_update_ex(struct Main *bmain, struct ID *id, int flag)
void DEG_id_tag_update(struct ID *id, int flag)
void DEG_relations_tag_update(struct Main *bmain)
@ ID_RECALC_ANIMATION_NO_FLUSH
@ FCM_EXTRAPOLATE_CYCLIC_OFFSET
@ INSERTKEY_OVERWRITE_FULL
@ FCURVE_SMOOTH_CONT_ACCEL
@ CONSTRAINT_TYPE_TRACKTO
@ CONSTRAINT_TYPE_CHILDOF
@ CONSTRAINT_TYPE_TRANSFORM
@ CONSTRAINT_TYPE_ARMATURE
@ CONSTRAINT_TYPE_LOCLIKE
@ CONSTRAINT_TYPE_ROTLIMIT
@ CONSTRAINT_TYPE_ROTLIKE
@ CONSTRAINT_TYPE_KINEMATIC
@ CONSTRAINT_TYPE_DISTLIMIT
@ CONSTRAINT_TYPE_TRANSLIKE
@ CONSTRAINT_TYPE_LOCLIMIT
@ CONSTRAINT_TYPE_LOCKTRACK
@ CONSTRAINT_TYPE_SIZELIMIT
@ CONSTRAINT_TYPE_FOLLOWPATH
@ CONSTRAINT_TYPE_SIZELIKE
@ CONSTRAINT_TYPE_DAMPTRACK
#define BEZT_IS_AUTOH(bezt)
Object is a sort of wrapper for general info.
Types and defines for representing Rigid Body entities.
#define IS_AUTOKEY_FLAG(scene, flag)
#define IS_AUTOKEY_MODE(scene, mode)
#define IS_AUTOKEY_ON(scene)
bool ED_object_mode_set(struct bContext *C, eObjectMode mode)
bool ED_operator_areaactive(struct bContext *C)
_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 y
Read Guarded memory(de)allocation.
#define RNA_MAX_ARRAY_LENGTH
struct uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
void uiItemsEnumO(uiLayout *layout, const char *opname, const char *propname)
uiBut * UI_context_active_but_prop_get(const struct bContext *C, struct PointerRNA *r_ptr, struct PropertyRNA **r_prop, int *r_index)
void UI_popup_menu_end(struct bContext *C, struct uiPopupMenu *pup)
void UI_context_update_anim_flag(const struct bContext *C)
uiPopupMenu * UI_popup_menu_begin(struct bContext *C, const char *title, int icon) ATTR_NONNULL()
bool UI_but_flag_is_set(uiBut *but, int flag)
bool ANIM_remove_empty_action_from_animdata(struct AnimData *adt)
void ANIM_fcurve_delete_from_animdata(bAnimContext *ac, AnimData *adt, FCurve *fcu)
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
const Depsgraph * depsgraph
DO_INLINE void filter(lfVector *V, fmatrix3x3 *S)
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
void delete_fcurve_key(FCurve *fcu, int index, bool do_recalc)
static void replace_bezt_keyframe_ypos(BezTriple *dst, const BezTriple *bezt)
void ANIM_OT_keyframe_insert_menu(wmOperatorType *ot)
static void deg_tag_after_keyframe_delete(Main *bmain, ID *id, AnimData *adt)
bool fcurve_is_changed(PointerRNA ptr, PropertyRNA *prop, FCurve *fcu, const AnimationEvalContext *anim_eval_context)
static bool visualkey_can_use(PointerRNA *ptr, PropertyRNA *prop)
int delete_keyframe(Main *bmain, ReportList *reports, ID *id, bAction *act, const char rna_path[], int array_index, float cfra)
static int insert_key_exec(bContext *C, wmOperator *op)
static int delete_key_exec(bContext *C, wmOperator *op)
static float * visualkey_get_values(PointerRNA *ptr, PropertyRNA *prop, float *buffer, int buffer_size, int *r_count)
static int insert_key_button_exec(bContext *C, wmOperator *op)
bool ED_autokeyframe_object(bContext *C, Scene *scene, Object *ob, KeyingSet *ks)
int insert_vert_fcurve(FCurve *fcu, float x, float y, eBezTriple_KeyframeType keyframe_type, eInsertKeyFlags flag)
void ANIM_OT_keyframe_insert(wmOperatorType *ot)
static eFCU_Cycle_Type remap_cyclic_keyframe_location(FCurve *fcu, float *px, float *py)
bAction * ED_id_action_ensure(Main *bmain, ID *id)
bool fcurve_frame_has_keyframe(FCurve *fcu, float frame, short filter)
static int delete_key_button_exec(bContext *C, wmOperator *op)
static bool object_frame_has_keyframe(Object *ob, float frame, short filter)
void ANIM_OT_keyframe_clear_button(wmOperatorType *ot)
bool insert_keyframe_direct(ReportList *reports, PointerRNA ptr, PropertyRNA *prop, FCurve *fcu, const AnimationEvalContext *anim_eval_context, eBezTriple_KeyframeType keytype, struct NlaKeyframingContext *nla_context, eInsertKeyFlags flag)
void ANIM_OT_keyframe_insert_by_name(wmOperatorType *ot)
static int clear_key_button_exec(bContext *C, wmOperator *op)
void ANIM_OT_keyframe_delete(wmOperatorType *ot)
static int insert_key_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static float * get_keyframe_values(ReportList *reports, PointerRNA ptr, PropertyRNA *prop, int index, struct NlaKeyframingContext *nla_context, eInsertKeyFlags flag, float *buffer, int buffer_size, int *r_count, bool *r_force_all)
bool id_frame_has_keyframe(ID *id, float frame, short filter)
static float * setting_get_rna_values(PointerRNA *ptr, PropertyRNA *prop, float *buffer, int buffer_size, int *r_count)
void ANIM_OT_keyframe_clear_v3d(wmOperatorType *ot)
static bool delete_keyframe_fcurve(AnimData *adt, FCurve *fcu, float cfra)
static void update_autoflags_fcurve_direct(FCurve *fcu, PropertyRNA *prop)
FCurve * ED_action_fcurve_ensure(struct Main *bmain, struct bAction *act, const char group[], struct PointerRNA *ptr, const char rna_path[], const int array_index)
static void subdivide_nonauto_handles(const FCurve *fcu, BezTriple *bezt, BezTriple *prev, BezTriple *next)
static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
int insert_bezt_fcurve(FCurve *fcu, const BezTriple *bezt, eInsertKeyFlags flag)
void ANIM_OT_keyframe_insert_button(wmOperatorType *ot)
bool ED_autokeyframe_property(bContext *C, Scene *scene, PointerRNA *ptr, PropertyRNA *prop, int rnaindex, float cfra)
static bool insert_keyframe_fcurve_value(Main *bmain, ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, bAction *act, const char group[], const char rna_path[], int array_index, const AnimationEvalContext *anim_eval_context, float curval, eBezTriple_KeyframeType keytype, eInsertKeyFlags flag)
static KeyingSet * keyingset_get_from_op_with_error(wmOperator *op, PropertyRNA *prop, Scene *scene)
static int clear_keyframe(Main *bmain, ReportList *reports, ID *id, bAction *act, const char rna_path[], int array_index, eInsertKeyFlags UNUSED(flag))
static AnimationEvalContext nla_time_remap(const AnimationEvalContext *anim_eval_context, PointerRNA *id_ptr, AnimData *adt, bAction *act, ListBase *nla_cache, NlaKeyframingContext **r_nla_context)
void update_autoflags_fcurve(FCurve *fcu, bContext *C, ReportList *reports, PointerRNA *ptr)
static short new_key_needed(FCurve *fcu, float cFrame, float nValue)
bool autokeyframe_cfra_can_key(const Scene *scene, ID *id)
static bool modify_key_op_poll(bContext *C)
bool ED_autokeyframe_pchan(bContext *C, Scene *scene, Object *ob, bPoseChannel *pchan, KeyingSet *ks)
void ANIM_OT_keyframe_delete_v3d(wmOperatorType *ot)
eInsertKeyFlags ANIM_get_keyframing_flags(Scene *scene, const bool use_autokey_mode)
static bool action_frame_has_keyframe(bAction *act, float frame, short filter)
static bool insert_keyframe_value(ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, FCurve *fcu, const AnimationEvalContext *anim_eval_context, float curval, eBezTriple_KeyframeType keytype, eInsertKeyFlags flag)
int insert_keyframe(Main *bmain, ReportList *reports, ID *id, bAction *act, const char group[], const char rna_path[], int array_index, const AnimationEvalContext *anim_eval_context, eBezTriple_KeyframeType keytype, ListBase *nla_cache, eInsertKeyFlags flag)
void ANIM_OT_keyframe_delete_button(wmOperatorType *ot)
void ANIM_OT_keyframe_delete_by_name(wmOperatorType *ot)
static int delete_key_v3d_exec(bContext *C, wmOperator *op)
FCurve * ED_action_fcurve_find(struct bAction *act, const char rna_path[], const int array_index)
int ANIM_apply_keyingset(bContext *C, ListBase *dsources, bAction *act, KeyingSet *ks, short mode, float cfra)
KeyingSet * ANIM_keyingset_get_from_enum_type(Scene *scene, int type)
KeyingSet * ANIM_keyingset_get_from_idname(Scene *scene, const char *idname)
void ANIM_relative_keyingset_add_source(ListBase *dsources, ID *id, StructRNA *srna, void *data)
bool ANIM_keyingset_find_id(KeyingSet *ks, ID *id)
const EnumPropertyItem * ANIM_keying_sets_enum_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
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 area(int d1, int d2, int e1, int e2, float weights[2])
float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_array_check(PropertyRNA *prop)
void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
bool RNA_property_animateable(PointerRNA *ptr, PropertyRNA *prop)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
const char * RNA_property_identifier(const PropertyRNA *prop)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
PropertyType RNA_property_type(PropertyRNA *prop)
char * RNA_path_from_ID_to_property(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop, char *value)
int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
bool RNA_path_resolve_property(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
bool RNA_path_resolved_create(PointerRNA *ptr, struct PropertyRNA *prop, const int prop_index, PathResolvedRNA *r_anim_rna)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_string_file_path(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
const EnumPropertyItem DummyRNA_DEFAULT_items[]
struct RigidBodyOb * rigidbody_object
struct PropertyRNA * prop
struct ToolSettings * toolsettings
struct bConstraint * next
struct bPoseChannel * parent
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
struct wmOperatorType * type
__forceinline bool all(const avxb &b)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
const char * WM_operatortype_name(struct wmOperatorType *ot, struct PointerRNA *properties)
int WM_operator_confirm(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))