16 # include <AUD_Special.h>
31 #include "RNA_prototypes.h"
77 "Insert a keyframe on all visible and editable F-Curves using each curve's current value"},
81 "Only Selected Channels",
82 "Insert a keyframe on selected F-Curves using each curve's current value"},
86 "Active Channels at Cursor",
87 "Insert a keyframe for the active F-Curve at the cursor point"},
91 "Selected Channels at Cursor",
92 "Insert a keyframe for selected F-Curves at the cursor point"},
122 if (num_items == 0) {
126 "No active F-Curve to add a keyframe to. Select an editable F-Curve first");
143 for (ale = anim_data.
first; ale; ale = ale->
next) {
182 for (ale = anim_data.
first; ale; ale = ale->
next) {
263 ot->
name =
"Insert Keyframes";
264 ot->
idname =
"GRAPH_OT_keyframe_insert";
265 ot->
description =
"Insert keyframes for the specified channels";
338 val = val * scale -
offset;
390 mval[0] = (
event->xy[0] - region->
winrct.
xmin);
391 mval[1] = (
event->xy[1] - region->
winrct.
ymin);
407 ot->
name =
"Click-Insert Keyframes";
408 ot->
idname =
"GRAPH_OT_click_insert";
409 ot->
description =
"Insert new keyframe at the cursor position for the active F-Curve";
426 "Frame to insert keyframe on",
430 ot->
srna,
"value", 1.0f, -FLT_MAX, FLT_MAX,
"Value",
"Value for keyframe on", 0, 100);
436 "Extend selection instead of deselecting everything first");
530 ot->
name =
"Copy Keyframes";
532 ot->
description =
"Copy selected keyframes to the copy/paste buffer";
584 return BLI_strdup(
TIP_(
"Paste keyframes from mirrored bones if they exist"));
596 ot->
name =
"Paste Keyframes";
599 "Paste keyframes from copy/paste buffer for the selected channels, starting on the current "
618 "Paste time offset of keys");
624 "Method of merging pasted keys and existing");
626 ot->
srna,
"flipped",
false,
"Flipped",
"Paste keyframes from mirrored bones if they exist");
641 bool changed =
false;
649 for (ale = anim_data.
first; ale; ale = ale->
next) {
686 ot->
name =
"Duplicate Keyframes";
712 bool changed_final =
false;
720 for (ale = anim_data.
first; ale; ale = ale->
next) {
730 changed_final =
true;
743 return changed_final;
771 ot->
name =
"Delete Keyframes";
803 for (ale = anim_data.
first; ale; ale = ale->
next) {
841 ot->
name =
"Clean Keyframes";
843 ot->
description =
"Simplify F-Curves by removing closely spaced keyframes";
855 ot->
srna,
"threshold", 0.001f, 0.0f, FLT_MAX,
"Threshold",
"", 0.0f, 1000.0f);
880 for (ale = anim_data.
first; ale; ale = ale->
next) {
934 ot->
description =
"Bake selected F-Curves to a set of sampled points defining a similar curve";
967 for (ale = anim_data.
first; ale; ale = ale->
next) {
1009 ot->
name =
"Un-Bake Curve";
1021 #ifdef WITH_AUDASPACE
1036 typedef struct tSoundBakeInfo {
1049 tSoundBakeInfo *sbi = (tSoundBakeInfo *)
data;
1051 int position =
evaltime - sbi->cfra;
1052 if ((position < 0) || (position >= sbi->length)) {
1056 return sbi->samples[position];
1089 sbi.samples = AUD_readSoundBuffer(path,
1103 if (sbi.samples ==
NULL) {
1118 for (ale = anim_data.
first; ale; ale = ale->
next) {
1166 ot->
name =
"Bake Sound to F-Curves";
1167 ot->
idname =
"GRAPH_OT_sound_bake";
1168 ot->
description =
"Bakes a sound wave to selected F-Curves";
1192 "Cutoff frequency of a high-pass filter that is applied to the audio data",
1200 "Highest Frequency",
1201 "Cutoff frequency of a low-pass filter that is applied to the audio data",
1210 "Value for the hull curve calculation that tells how fast the hull curve can rise "
1211 "(the lower the value the steeper it can rise)",
1220 "Value for the hull curve calculation that tells how fast the hull curve can fall "
1221 "(the lower the value the steeper it can fall)",
1230 "Minimum amplitude value needed to influence the hull curve",
1237 "Only the positive differences of the hull curve amplitudes are summarized to "
1238 "produce the output");
1244 "The amplitudes of the hull curve are summarized (or, when Accumulate is enabled, "
1245 "both positive and negative differences are accumulated)");
1250 "The output is a square curve (negative values always result in -1, and "
1251 "positive ones in 1)");
1258 "Square only: all values with an absolute amplitude lower than that result in 0",
1285 for (ale = anim_data.
first; ale; ale = ale->
next) {
1318 ot->
name =
"Sample Keyframes";
1320 ot->
description =
"Add keyframes on every frame between the selected keyframes";
1340 #define MAKE_CYCLIC_EXPO -1
1341 #define CLEAR_CYCLIC_EXPO -2
1348 "Constant Extrapolation",
1349 "Values on endpoint keyframes are held"},
1353 "Linear Extrapolation",
1354 "Straight-line slope of end segments are extended past the endpoint keyframes"},
1359 "Make Cyclic (F-Modifier)",
1360 "Add Cycles F-Modifier if one doesn't exist already"},
1364 "Clear Cyclic (F-Modifier)",
1365 "Remove Cycles F-Modifier if not needed anymore"},
1382 for (ale = anim_data.
first; ale; ale = ale->
next) {
1451 ot->
name =
"Set Keyframe Extrapolation";
1452 ot->
idname =
"GRAPH_OT_extrapolation_type";
1453 ot->
description =
"Set extrapolation mode for selected F-Curves";
1490 for (ale = anim_data.
first; ale; ale = ale->
next) {
1527 ot->
name =
"Set Keyframe Interpolation";
1528 ot->
idname =
"GRAPH_OT_interpolation_type";
1530 "Set interpolation mode for the F-Curve segments starting from the selected keyframes";
1568 for (ale = anim_data.
first; ale; ale = ale->
next) {
1603 ot->
name =
"Set Keyframe Easing Type";
1604 ot->
idname =
"GRAPH_OT_easing_type";
1606 "Set easing type for the F-Curve segments starting from the selected keyframes";
1646 for (ale = anim_data.
first; ale; ale = ale->
next) {
1688 ot->
name =
"Set Keyframe Handle Type";
1689 ot->
idname =
"GRAPH_OT_handle_type";
1690 ot->
description =
"Set type of handle for selected keyframes";
1732 const float precision = 1
e-5;
1733 return fabs(keyframes[0]->vec[1][0] - keyframes[1]->vec[1][0]) > precision ||
1734 fabs(keyframes[1]->vec[1][0] - keyframes[2]->vec[1][0]) > precision ||
1735 fabs(keyframes[0]->vec[1][0] - keyframes[2]->vec[1][0]) > precision;
1759 "Euler Rotation F-Curve has invalid index (ID='%s', Path='%s', Index=%d)",
1791 return euler_groups;
1803 "Missing %s%s%s component(s) of euler rotation for ID='%s' and RNA-Path='%s'",
1818 "XYZ rotations not equally keyed for ID='%s' and RNA-Path='%s'",
1829 float filtered_euler[3] = {
1835 for (
int keyframe_index = 1; keyframe_index < fcu_rot_x->
totvert; ++keyframe_index) {
1837 &fcu_rot_x->
bezt[keyframe_index],
1838 &fcu_rot_y->
bezt[keyframe_index],
1839 &fcu_rot_z->
bezt[keyframe_index],
1847 const float unfiltered_euler[3] = {
1848 keyframes[0]->
vec[1][1],
1849 keyframes[1]->
vec[1][1],
1850 keyframes[2]->
vec[1][1],
1885 bool is_modified =
false;
1886 for (i = 1,
prev = fcu->
bezt, bezt = fcu->
bezt + 1; i < fcu->totvert; i++,
prev = bezt++) {
1887 const float sign = (
prev->vec[1][1] > bezt->
vec[1][1]) ? 1.0f : -1.0f;
1899 bezt->
vec[0][1] += fac;
1900 bezt->
vec[1][1] += fac;
1901 bezt->
vec[2][1] += fac;
1912 int *r_curves_filtered,
1915 *r_curves_filtered = 0;
1919 int curves_filtered_this_group = 0;
1922 curves_filtered_this_group = 3;
1925 for (
int channel_index = 0; channel_index < 3; channel_index++) {
1926 FCurve *fcu = euf->fcurves[channel_index];
1933 ++curves_filtered_this_group;
1937 *r_curves_filtered +=
min_ii(3, curves_filtered_this_group);
1975 int curves_filtered;
1983 if (curves_filtered == 0) {
1984 if (curves_seen < 3) {
1992 "No Euler Rotations could be corrected, ensure each rotation has keys for all "
1994 "and that F-Curves for these are in consecutive XYZ order and selected");
1999 if (curves_filtered != curves_seen) {
2003 "%d of %d rotation channels were filtered (see the Info window for details)",
2007 else if (curves_seen == 1) {
2024 ot->
name =
"Euler Discontinuity Filter";
2025 ot->
idname =
"GRAPH_OT_euler_filter";
2027 "Fix large jumps and flips in the selected "
2028 "Euler Rotation F-Curves arising from rotation "
2029 "values being clipped when baking physics";
2051 if (
G.is_rendering) {
2073 for (ale = anim_data.
first; ale; ale = ale->
next) {
2081 memset(¤t_ked, 0,
sizeof(current_ked));
2092 ked.
f1 += current_ked.
f1;
2093 ked.
i1 += current_ked.
i1;
2094 ked.
f2 += (current_ked.
f2 +
offset) * unit_scale;
2095 ked.
i2 += current_ked.
i2;
2114 const float sum_time = keyframe_sum.
f1;
2115 const float sum_value = keyframe_sum.
f2;
2116 const int num_keyframes = keyframe_sum.
i1;
2118 if (num_keyframes == 0) {
2147 ot->
name =
"Jump to Keyframes";
2148 ot->
idname =
"GRAPH_OT_frame_jump";
2149 ot->
description =
"Place the cursor on the midpoint of selected keyframes";
2169 const float sum_value = keyframe_sum.
f2;
2170 const int num_keyframes = keyframe_sum.
i1;
2172 if (num_keyframes == 0) {
2177 sipo->
cursorVal = sum_value / (
float)num_keyframes;
2187 ot->
name =
"Snap Cursor Value to Selected";
2188 ot->
idname =
"GRAPH_OT_snap_cursor_value";
2189 ot->
description =
"Place the cursor value on the average value of selected keyframes";
2210 "Selection to Current Frame",
2211 "Snap selected keyframes to the current frame"},
2215 "Selection to Cursor Value",
2216 "Set values of selected keyframes to the cursor value (Y/Horizontal component)"},
2220 "Selection to Nearest Frame",
2221 "Snap selected keyframes to the nearest (whole) frame (use to fix accidental subframe "
2226 "Selection to Nearest Second",
2227 "Snap selected keyframes to the nearest second"},
2231 "Selection to Nearest Marker",
2232 "Snap selected keyframes to the nearest marker"},
2237 "Flatten handles for a smoother transition"},
2251 float cursor_value = 0.0f;
2260 ked.scene = ac->
scene;
2266 cursor_value = (sipo) ? sipo->
cursorVal : 0.0f;
2282 for (ale = anim_data.
first; ale; ale = ale->
next) {
2292 ked.f1 = (cursor_value / unit_scale) -
offset;
2341 ot->
description =
"Snap selected keyframes to the chosen times/values";
2415 ot->
name =
"Equalize Handles";
2416 ot->
idname =
"GRAPH_OT_equalize_handles";
2418 "Ensure selected keyframes' handles have equal length, optionally making them horizontal. "
2419 "Automatic, Automatic Clamped, or Vector handle types will be converted to Aligned";
2434 "Side of the keyframes' bezier handles to affect");
2441 "Length to make selected keyframes' bezier handles",
2449 "Make the values of the selected keyframes' handles the same as their respective keyframes");
2463 "By Times Over Current Frame",
2464 "Flip times of selected keyframes using the current frame as the mirror line"},
2468 "By Values Over Cursor Value",
2469 "Flip values of selected keyframes using the cursor value (Y/Horizontal component) as the "
2474 "By Times Over Zero Time",
2475 "Flip times of selected keyframes, effectively reversing the order they appear in"},
2479 "By Values Over Zero Value",
2480 "Flip values of selected keyframes (i.e. negative values become positive, and vice versa)"},
2484 "By Times Over First Selected Marker",
2485 "Flip times of selected keyframes using the first selected marker as the reference point"},
2499 float cursor_value = 0.0f;
2503 ked.scene = ac->
scene;
2521 cursor_value = (sipo) ? sipo->
cursorVal : 0.0f;
2542 for (ale = anim_data.
first; ale; ale = ale->
next) {
2552 ked.f1 = (cursor_value -
offset) / unit_scale;
2599 ot->
name =
"Mirror Keys";
2601 ot->
description =
"Flip selected keyframes over the selected mirror line";
2639 for (ale = anim_data.
first; ale; ale = ale->
next) {
2661 ot->
name =
"Smooth Keys";
2663 ot->
description =
"Apply weighted moving means to make selected F-Curves less bumpy";
2746 for (ale = anim_data.
first; ale; ale = ale->
next) {
2777 ot->
name =
"Add F-Curve Modifier";
2778 ot->
idname =
"GRAPH_OT_fmodifier_add";
2779 ot->
description =
"Add F-Modifier to the active/selected F-Curves";
2796 ot->
srna,
"only_active", 1,
"Only Active",
"Only add F-Modifier to active F-Curve");
2823 if (ale && ale->
data) {
2844 ot->
name =
"Copy F-Modifiers";
2845 ot->
idname =
"GRAPH_OT_fmodifier_copy";
2846 ot->
description =
"Copy the F-Modifier(s) of the active F-Curve";
2861 "Copy all the F-Modifiers, instead of just the active one");
2903 for (ale = anim_data.
first; ale; ale = ale->
next) {
2935 ot->
name =
"Paste F-Modifiers";
2936 ot->
idname =
"GRAPH_OT_fmodifier_paste";
2937 ot->
description =
"Add copied F-Modifiers to the selected F-Curves";
2948 ot->
srna,
"only_active",
false,
"Only Active",
"Only paste F-Modifiers on active F-Curve");
2954 "Replace existing F-Modifiers, instead of just appending to the end of the existing list");
2989 ot->
name =
"Copy Driver Variables";
2990 ot->
idname =
"GRAPH_OT_driver_variables_copy";
2991 ot->
description =
"Copy the driver variables of the active driver";
3037 ot->
name =
"Paste Driver Variables";
3038 ot->
idname =
"GRAPH_OT_driver_variables_paste";
3039 ot->
description =
"Add copied driver variables to the active driver";
3053 "Replace existing driver variables, instead of just appending to the end of the "
3085 for (ale = anim_data.
first; ale; ale = ale->
next) {
3139 ot->
name =
"Delete Invalid Drivers";
3140 ot->
idname =
"GRAPH_OT_driver_delete_invalid";
3141 ot->
description =
"Delete all visible drivers considered invalid";
typedef float(TangentPoint)[2]
void BKE_animsys_free_nla_keyframing_context_cache(struct ListBase *cache)
AnimationEvalContext BKE_animsys_eval_context_construct(struct Depsgraph *depsgraph, float eval_time)
struct ScrArea * CTX_wm_area(const bContext *C)
struct Scene * CTX_data_scene(const bContext *C)
PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type)
struct ARegion * CTX_wm_region(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
void BKE_fcurve_keyframe_move_value_with_handles(struct BezTriple *keyframe, float new_value)
float evaluate_fcurve_only_curve(struct FCurve *fcu, float evaltime)
bool BKE_fcurve_is_empty(struct FCurve *fcu)
bool BKE_fcurve_delete_keys_selected(struct FCurve *fcu)
void fcurve_samples_to_keyframes(struct FCurve *fcu, int start, int end)
const FModifierTypeInfo * get_fmodifier_typeinfo(int type)
void fcurve_store_samples(struct FCurve *fcu, void *data, int start, int end, FcuSampleFunc sample_cb)
void set_active_fmodifier(ListBase *modifiers, struct FModifier *fcm)
bool BKE_fcurve_is_keyframable(struct FCurve *fcu)
bool remove_fmodifier(ListBase *modifiers, struct FModifier *fcm)
void BKE_fcurve_handles_recalc(struct FCurve *fcu)
struct FModifier * add_fmodifier(ListBase *modifiers, int type, struct FCurve *owner_fcu)
bool list_has_suitable_fmodifier(ListBase *modifiers, int mtype, short acttype)
float fcurve_samplingcb_evalcurve(struct FCurve *fcu, void *data, float evaltime)
float BKE_nla_tweakedit_remap(struct AnimData *adt, float cframe, short mode)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
bool BLI_is_file(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLI_kdtree_nd_() free(KDTree *tree)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int round_fl_to_int(float a)
MINLINE int min_ii(int a, int b)
void eul_to_mat3(float mat[3][3], const float eul[3])
void mat3_normalized_to_compatible_eul(float eul[3], const float old[3], float mat[3][3])
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
#define BLT_I18NCONTEXT_ID_ACTION
void DEG_relations_tag_update(struct Main *bmain)
@ FCURVE_EXTRAPOLATE_CONSTANT
@ FCURVE_EXTRAPOLATE_LINEAR
#define ANIM_UPDATE_DEFAULT_NOHANDLES
#define ANIM_UPDATE_DEFAULT
@ ANIMFILTER_DATA_VISIBLE
@ ANIMFILTER_CURVE_VISIBLE
@ KEYFRAME_PASTE_MERGE_MIX
@ KEYFRAME_PASTE_OFFSET_CFRA_START
short(* KeyframeEditFunc)(KeyframeEditData *ked, struct BezTriple *bezt)
@ KEYFRAME_PASTE_NOTHING_TO_PASTE
@ KEYFRAME_PASTE_NOWHERE_TO_PASTE
void ED_region_tag_redraw(struct ARegion *region)
_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 type
Read Guarded memory(de)allocation.
void UI_view2d_region_to_view(const struct View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
void ANIM_fcurve_delete_from_animdata(bAnimContext *ac, AnimData *adt, FCurve *fcu)
void ANIM_animdata_freelist(ListBase *anim_data)
void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data)
AnimData * ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale)
void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, bool only_keys)
float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short flag, float *r_offset)
short ANIM_get_normalization_flags(bAnimContext *ac)
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, eAnimFilter_Flags filter_mode, void *data, eAnimCont_Types datatype)
TimeMarker * ED_markers_get_first_selected(ListBase *markers)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
bool ANIM_remove_driver(ReportList *UNUSED(reports), ID *id, const char rna_path[], int array_index, short UNUSED(flag))
bool ANIM_driver_vars_copy(ReportList *reports, FCurve *fcu)
bool ANIM_driver_vars_paste(ReportList *reports, FCurve *fcu, bool replace)
bool ANIM_fmodifiers_paste_from_buf(ListBase *modifiers, bool replace, FCurve *curve)
void ANIM_fmodifiers_copybuf_free(void)
bool ANIM_fmodifiers_copy_to_buf(ListBase *modifiers, bool active)
static int graph_fmodifier_paste_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_graphkeys_insertkey_types[]
void GRAPH_OT_delete(wmOperatorType *ot)
static void insert_graph_keys(bAnimContext *ac, eGraphKeys_InsertKey_Types mode)
static int graphkeys_sample_exec(bContext *C, wmOperator *UNUSED(op))
void GRAPH_OT_click_insert(wmOperatorType *ot)
static int graphkeys_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
struct tEulerFilter tEulerFilter
void GRAPH_OT_fmodifier_paste(wmOperatorType *ot)
void GRAPH_OT_smooth(wmOperatorType *ot)
static const EnumPropertyItem prop_graphkeys_equalize_handles_sides[]
static void clean_graph_keys(bAnimContext *ac, float thresh, bool clean_chan)
static void mirror_graph_keys(bAnimContext *ac, short mode)
static KeyframeEditData sum_selected_keyframes(bAnimContext *ac)
void GRAPH_OT_equalize_handles(wmOperatorType *ot)
static int graphkeys_easing_exec(bContext *C, wmOperator *op)
static int graphkeys_expo_exec(bContext *C, wmOperator *op)
static bool euler_filter_multi_channel(tEulerFilter *euf, ReportList *reports)
static bool graph_driver_delete_invalid_poll(bContext *C)
static int graphkeys_insertkey_exec(bContext *C, wmOperator *op)
void GRAPH_OT_snap_cursor_value(wmOperatorType *ot)
static void euler_filter_perform_filter(ListBase *eulers, ReportList *reports, int *r_curves_filtered, int *r_curves_seen)
static int graphkeys_click_insert_exec(bContext *C, wmOperator *op)
static void sethandles_graph_keys(bAnimContext *ac, short mode)
static bool euler_filter_single_channel(FCurve *fcu)
static int graphkeys_framejump_exec(bContext *C, wmOperator *UNUSED(op))
static int graphkeys_mirror_exec(bContext *C, wmOperator *op)
static bool keyframe_time_differs(BezTriple *keyframes[3])
void GRAPH_OT_mirror(wmOperatorType *ot)
void GRAPH_OT_sample(wmOperatorType *ot)
void GRAPH_OT_bake(wmOperatorType *ot)
static void snap_graph_keys(bAnimContext *ac, short mode)
void GRAPH_OT_fmodifier_copy(wmOperatorType *ot)
static const EnumPropertyItem prop_graphkeys_mirror_types[]
void GRAPH_OT_handle_type(wmOperatorType *ot)
static int graphkeys_delete_exec(bContext *C, wmOperator *UNUSED(op))
static void equalize_graph_keys(bAnimContext *ac, int mode, float handle_length, bool flatten)
static void sample_graph_keys(bAnimContext *ac)
void GRAPH_OT_frame_jump(wmOperatorType *ot)
void GRAPH_OT_driver_variables_copy(wmOperatorType *ot)
void GRAPH_OT_extrapolation_type(wmOperatorType *ot)
static bool delete_graph_keys(bAnimContext *ac)
static int graphkeys_ipo_exec(bContext *C, wmOperator *op)
void GRAPH_OT_unbake(wmOperatorType *ot)
static void unbake_graph_curves(bAnimContext *ac, int start, int end)
void GRAPH_OT_driver_variables_paste(wmOperatorType *ot)
static int graphkeys_snap_cursor_value_exec(bContext *C, wmOperator *UNUSED(op))
void GRAPH_OT_interpolation_type(wmOperatorType *ot)
static int graphkeys_bake_exec(bContext *C, wmOperator *UNUSED(op))
static int graph_driver_vars_copy_exec(bContext *C, wmOperator *op)
static void setexpo_graph_keys(bAnimContext *ac, short mode)
eGraphKeys_InsertKey_Types
@ GRAPHKEYS_INSERTKEY_CURSOR
@ GRAPHKEYS_INSERTKEY_ACTIVE
@ GRAPHKEYS_INSERTKEY_ALL
@ GRAPHKEYS_INSERTKEY_SEL
static int graphkeys_equalize_handles_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_graphkeys_expo_types[]
static int graph_fmodifier_copy_exec(bContext *C, wmOperator *op)
static int graph_driver_delete_invalid_exec(bContext *C, wmOperator *op)
static int graphkeys_click_insert_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void GRAPH_OT_easing_type(wmOperatorType *ot)
static int graph_driver_vars_paste_exec(bContext *C, wmOperator *op)
static int graphkeys_euler_filter_exec(bContext *C, wmOperator *op)
static int graph_fmodifier_add_exec(bContext *C, wmOperator *op)
static int graphkeys_smooth_exec(bContext *C, wmOperator *UNUSED(op))
void GRAPH_OT_copy(wmOperatorType *ot)
static int graphkeys_paste_exec(bContext *C, wmOperator *op)
static char * graphkeys_paste_description(bContext *UNUSED(C), wmOperatorType *UNUSED(op), PointerRNA *ptr)
static void setipo_graph_keys(bAnimContext *ac, short mode)
void GRAPH_OT_driver_delete_invalid(wmOperatorType *ot)
static eKeyPasteError paste_graph_keys(bAnimContext *ac, const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode, bool flip)
void GRAPH_OT_keyframe_insert(wmOperatorType *ot)
void GRAPH_OT_sound_bake(wmOperatorType *ot)
static int graphkeys_copy_exec(bContext *C, wmOperator *op)
void GRAPH_OT_duplicate(wmOperatorType *ot)
static void seteasing_graph_keys(bAnimContext *ac, short mode)
static int graphkeys_handletype_exec(bContext *C, wmOperator *op)
static int graphkeys_sound_bake_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void GRAPH_OT_euler_filter(wmOperatorType *ot)
static bool graphkeys_framejump_poll(bContext *C)
static int graphkeys_sound_bake_exec(bContext *UNUSED(C), wmOperator *op)
static short copy_graph_keys(bAnimContext *ac)
void GRAPH_OT_clean(wmOperatorType *ot)
static int graphkeys_clean_exec(bContext *C, wmOperator *op)
static int graphkeys_snap_exec(bContext *C, wmOperator *op)
#define CLEAR_CYCLIC_EXPO
void GRAPH_OT_snap(wmOperatorType *ot)
static const EnumPropertyItem * graph_fmodifier_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
static int graphkeys_unbake_exec(bContext *C, wmOperator *UNUSED(op))
static bool duplicate_graph_keys(bAnimContext *ac)
static void bake_graph_curves(bAnimContext *ac, int start, int end)
static ListBase euler_filter_group_channels(const ListBase *anim_data, ReportList *reports, int *r_num_groups)
void GRAPH_OT_fmodifier_add(wmOperatorType *ot)
static const EnumPropertyItem prop_graphkeys_snap_types[]
void GRAPH_OT_paste(wmOperatorType *ot)
@ GRAPHKEYS_MIRROR_MARKER
bool graphop_active_fcurve_poll(struct bContext *C)
@ GRAPHKEYS_SNAP_NEAREST_MARKER
@ GRAPHKEYS_SNAP_NEAREST_SECOND
@ GRAPHKEYS_SNAP_HORIZONTAL
@ GRAPHKEYS_SNAP_NEAREST_FRAME
bool graphop_active_editable_fcurve_ctx_poll(struct bContext *C)
@ GRAPHKEYS_EQUALIZE_RIGHT
@ GRAPHKEYS_EQUALIZE_BOTH
@ GRAPHKEYS_EQUALIZE_LEFT
struct bAnimListElem * get_active_fcurve_channel(struct bAnimContext *ac)
bool graphop_selected_fcurve_poll(struct bContext *C)
bool graphop_visible_keyframes_poll(struct bContext *C)
bool graphop_editable_keyframes_poll(struct bContext *C)
void deselect_graph_keys(struct bAnimContext *ac, bool test, short sel, bool do_channels)
DO_INLINE void filter(lfVector *V, fmatrix3x3 *S)
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
KeyframeEditFunc ANIM_editkeyframes_mirror(short mode)
KeyframeEditFunc ANIM_editkeyframes_easing(short mode)
KeyframeEditFunc ANIM_editkeyframes_ipo(short mode)
void ANIM_fcurve_equalize_keyframes_loop(FCurve *fcu, const eEditKeyframes_Equalize mode, const float handle_length, const bool flatten)
short ANIM_fcurve_keyframes_loop(KeyframeEditData *ked, FCurve *fcu, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
KeyframeEditFunc ANIM_editkeyframes_ok(short mode)
KeyframeEditFunc ANIM_editkeyframes_snap(short mode)
short bezt_calc_average(KeyframeEditData *ked, BezTriple *bezt)
KeyframeEditFunc ANIM_editkeyframes_handles(short mode)
const EnumPropertyItem rna_enum_keyframe_paste_offset_items[]
eKeyPasteError paste_animedit_keys(bAnimContext *ac, ListBase *anim_data, const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode, bool flip)
short copy_animedit_keys(bAnimContext *ac, ListBase *anim_data)
const EnumPropertyItem rna_enum_keyframe_paste_merge_items[]
void sample_fcurve(FCurve *fcu)
void smooth_fcurve(FCurve *fcu)
void ANIM_fcurves_copybuf_free(void)
bool duplicate_fcurve_keys(FCurve *fcu)
void clean_fcurve(struct bAnimContext *ac, bAnimListElem *ale, float thresh, bool cleardefault)
int insert_vert_fcurve(FCurve *fcu, float x, float y, eBezTriple_KeyframeType keyframe_type, eInsertKeyFlags flag)
Main Key-framing API call.
eInsertKeyFlags ANIM_get_keyframing_flags(Scene *scene, const bool use_autokey_mode)
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(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
ccl_device_inline float2 fabs(const float2 &a)
static void area(int d1, int d2, int e1, int e2, float weights[2])
T length(const vec_base< T, Size > &a)
SymEdge< T > * prev(const SymEdge< T > *se)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
float RNA_float_get(PointerRNA *ptr, const char *name)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
int RNA_enum_from_value(const EnumPropertyItem *item, const int value)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
const EnumPropertyItem rna_enum_beztriple_interpolation_mode_items[]
const EnumPropertyItem rna_enum_keyframe_handle_type_items[]
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
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 rna_enum_fmodifier_type_items[]
const EnumPropertyItem rna_enum_beztriple_interpolation_easing_items[]
struct ToolSettings * toolsettings
struct ReportList * reports
struct Depsgraph * depsgraph
struct bAnimListElem * next
struct tEulerFilter * prev
struct tEulerFilter * next
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
char *(* get_description)(struct bContext *C, struct wmOperatorType *, struct PointerRNA *)
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
void WM_report(eReportType type, const char *message)
void WM_reportf(eReportType type, const char *format,...)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_operator_properties_confirm_or_exec(wmOperatorType *ot)
void WM_operator_properties_filesel(wmOperatorType *ot, const int filter, const short type, const eFileSel_Action action, const eFileSel_Flag flag, const short display, const short sort)
int WM_operator_confirm(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
int WM_operator_confirm_or_exec(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
int WM_operator_filesel(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))