30 # include <AUD_Special.h>
93 "Insert a keyframe on all visible and editable F-Curves using each curve's current value"},
97 "Only Selected Channels",
98 "Insert a keyframe on selected F-Curves using each curve's current value"},
102 "Active Channels at Cursor",
103 "Insert a keyframe for the active F-Curve at the cursor point"},
107 "Selected Channels at Cursor",
108 "Insert a keyframe for selected F-Curves at the cursor point"},
138 if (num_items == 0) {
142 "No active F-Curve to add a keyframe to. Select an editable F-Curve first");
159 for (ale = anim_data.
first; ale; ale = ale->
next) {
198 for (ale = anim_data.
first; ale; ale = ale->
next) {
279 ot->
name =
"Insert Keyframes";
280 ot->
idname =
"GRAPH_OT_keyframe_insert";
281 ot->
description =
"Insert keyframes for the specified channels";
354 val = val * scale - offset;
421 ot->
name =
"Click-Insert Keyframes";
422 ot->
idname =
"GRAPH_OT_click_insert";
423 ot->
description =
"Insert new keyframe at the cursor position for the active F-Curve";
440 "Frame to insert keyframe on",
444 ot->
srna,
"value", 1.0f, -FLT_MAX, FLT_MAX,
"Value",
"Value for keyframe on", 0, 100);
450 "Extend selection instead of deselecting everything first");
542 ot->
name =
"Copy Keyframes";
544 ot->
description =
"Copy selected keyframes to the copy/paste buffer";
587 return BLI_strdup(
"Paste keyframes from mirrored bones if they exist");
599 ot->
name =
"Paste Keyframes";
602 "Paste keyframes from copy/paste buffer for the selected channels, starting on the current "
621 "Paste time offset of keys");
627 "Method of merging pasted keys and existing");
629 ot->
srna,
"flipped",
false,
"Flipped",
"Paste keyframes from mirrored bones if they exist");
651 for (ale = anim_data.
first; ale; ale = ale->
next) {
684 ot->
name =
"Duplicate Keyframes";
710 bool changed_final =
false;
718 for (ale = anim_data.
first; ale; ale = ale->
next) {
728 changed_final =
true;
741 return changed_final;
769 ot->
name =
"Delete Keyframes";
801 for (ale = anim_data.
first; ale; ale = ale->
next) {
839 ot->
name =
"Clean Keyframes";
841 ot->
description =
"Simplify F-Curves by removing closely spaced keyframes";
853 ot->
srna,
"threshold", 0.001f, 0.0f, FLT_MAX,
"Threshold",
"", 0.0f, 1000.0f);
878 for (ale = anim_data.
first; ale; ale = ale->
next) {
932 ot->
description =
"Bake selected F-Curves to a set of sampled points defining a similar curve";
965 for (ale = anim_data.
first; ale; ale = ale->
next) {
1007 ot->
name =
"Un-Bake Curve";
1019 #ifdef WITH_AUDASPACE
1034 typedef struct tSoundBakeInfo {
1047 tSoundBakeInfo *sbi = (tSoundBakeInfo *)
data;
1049 int position =
evaltime - sbi->cfra;
1050 if ((position < 0) || (position >= sbi->length)) {
1054 return sbi->samples[position];
1087 sbi.samples = AUD_readSoundBuffer(path,
1100 if (sbi.samples ==
NULL) {
1106 sbi.cfra = start =
CFRA;
1107 end =
CFRA + sbi.length - 1;
1115 for (ale = anim_data.
first; ale; ale = ale->
next) {
1163 ot->
name =
"Bake Sound to F-Curves";
1164 ot->
idname =
"GRAPH_OT_sound_bake";
1165 ot->
description =
"Bakes a sound wave to selected F-Curves";
1189 "Cutoff frequency of a high-pass filter that is applied to the audio data",
1197 "Highest Frequency",
1198 "Cutoff frequency of a low-pass filter that is applied to the audio data",
1207 "Value for the hull curve calculation that tells how fast the hull curve can rise "
1208 "(the lower the value the steeper it can rise)",
1217 "Value for the hull curve calculation that tells how fast the hull curve can fall "
1218 "(the lower the value the steeper it can fall)",
1227 "Minimum amplitude value needed to influence the hull curve",
1234 "Only the positive differences of the hull curve amplitudes are summarized to "
1235 "produce the output");
1241 "The amplitudes of the hull curve are summarized (or, when Accumulate is enabled, "
1242 "both positive and negative differences are accumulated)");
1247 "The output is a square curve (negative values always result in -1, and "
1248 "positive ones in 1)");
1255 "Square only: all values with an absolute amplitude lower than that result in 0",
1282 for (ale = anim_data.
first; ale; ale = ale->
next) {
1315 ot->
name =
"Sample Keyframes";
1317 ot->
description =
"Add keyframes on every frame between the selected keyframes";
1337 #define MAKE_CYCLIC_EXPO -1
1338 #define CLEAR_CYCLIC_EXPO -2
1345 "Constant Extrapolation",
1346 "Values on endpoint keyframes are held"},
1350 "Linear Extrapolation",
1351 "Straight-line slope of end segments are extended past the endpoint keyframes"},
1356 "Make Cyclic (F-Modifier)",
1357 "Add Cycles F-Modifier if one doesn't exist already"},
1361 "Clear Cyclic (F-Modifier)",
1362 "Remove Cycles F-Modifier if not needed anymore"},
1379 for (ale = anim_data.
first; ale; ale = ale->
next) {
1448 ot->
name =
"Set Keyframe Extrapolation";
1449 ot->
idname =
"GRAPH_OT_extrapolation_type";
1450 ot->
description =
"Set extrapolation mode for selected F-Curves";
1487 for (ale = anim_data.
first; ale; ale = ale->
next) {
1524 ot->
name =
"Set Keyframe Interpolation";
1525 ot->
idname =
"GRAPH_OT_interpolation_type";
1527 "Set interpolation mode for the F-Curve segments starting from the selected keyframes";
1564 for (ale = anim_data.
first; ale; ale = ale->
next) {
1599 ot->
name =
"Set Keyframe Easing Type";
1600 ot->
idname =
"GRAPH_OT_easing_type";
1602 "Set easing type for the F-Curve segments starting from the selected keyframes";
1642 for (ale = anim_data.
first; ale; ale = ale->
next) {
1684 ot->
name =
"Set Keyframe Handle Type";
1685 ot->
idname =
"GRAPH_OT_handle_type";
1686 ot->
description =
"Set type of handle for selected keyframes";
1728 const float precision = 1
e-5;
1729 return fabs(keyframes[0]->vec[1][0] - keyframes[1]->vec[1][0]) > precision ||
1730 fabs(keyframes[1]->vec[1][0] - keyframes[2]->vec[1][0]) > precision ||
1731 fabs(keyframes[0]->vec[1][0] - keyframes[2]->vec[1][0]) > precision;
1755 "Euler Rotation F-Curve has invalid index (ID='%s', Path='%s', Index=%d)",
1787 return euler_groups;
1799 "Missing %s%s%s component(s) of euler rotation for ID='%s' and RNA-Path='%s'",
1814 "XYZ rotations not equally keyed for ID='%s' and RNA-Path='%s'",
1825 float filtered_euler[3] = {
1831 for (
int keyframe_index = 1; keyframe_index < fcu_rot_x->
totvert; ++keyframe_index) {
1833 &fcu_rot_x->
bezt[keyframe_index],
1834 &fcu_rot_y->
bezt[keyframe_index],
1835 &fcu_rot_z->
bezt[keyframe_index],
1843 const float unfiltered_euler[3] = {
1844 keyframes[0]->
vec[1][1],
1845 keyframes[1]->
vec[1][1],
1846 keyframes[2]->
vec[1][1],
1881 bool is_modified =
false;
1882 for (i = 1,
prev = fcu->
bezt, bezt = fcu->
bezt + 1; i < fcu->totvert; i++,
prev = bezt++) {
1883 const float sign = (
prev->vec[1][1] > bezt->
vec[1][1]) ? 1.0f : -1.0f;
1895 bezt->
vec[0][1] += fac;
1896 bezt->
vec[1][1] += fac;
1897 bezt->
vec[2][1] += fac;
1908 int *r_curves_filtered,
1911 *r_curves_filtered = 0;
1915 int curves_filtered_this_group = 0;
1918 curves_filtered_this_group = 3;
1921 for (
int channel_index = 0; channel_index < 3; channel_index++) {
1922 FCurve *fcu = euf->fcurves[channel_index];
1929 ++curves_filtered_this_group;
1933 *r_curves_filtered +=
min_ii(3, curves_filtered_this_group);
1971 int curves_filtered;
1979 if (curves_filtered == 0) {
1980 if (curves_seen < 3) {
1988 "No Euler Rotations could be corrected, ensure each rotation has keys for all "
1990 "and that F-Curves for these are in consecutive XYZ order and selected");
1995 if (curves_filtered != curves_seen) {
1999 "%d of %d rotation channels were filtered (see the Info window for details)",
2003 else if (curves_seen == 1) {
2020 ot->
name =
"Euler Discontinuity Filter";
2021 ot->
idname =
"GRAPH_OT_euler_filter";
2023 "Fix large jumps and flips in the selected "
2024 "Euler Rotation F-Curves arising from rotation "
2025 "values being clipped when baking physics";
2047 if (
G.is_rendering) {
2068 for (ale = anim_data.
first; ale; ale = ale->
next) {
2076 memset(¤t_ked, 0,
sizeof(current_ked));
2087 ked.
f1 += current_ked.
f1;
2088 ked.
i1 += current_ked.
i1;
2089 ked.
f2 += (current_ked.
f2 + offset) * unit_scale;
2090 ked.
i2 += current_ked.
i2;
2109 const float sum_time = keyframe_sum.
f1;
2110 const float sum_value = keyframe_sum.
f2;
2111 const int num_keyframes = keyframe_sum.
i1;
2113 if (num_keyframes == 0) {
2142 ot->
name =
"Jump to Keyframes";
2143 ot->
idname =
"GRAPH_OT_frame_jump";
2144 ot->
description =
"Place the cursor on the midpoint of selected keyframes";
2164 const float sum_value = keyframe_sum.
f2;
2165 const int num_keyframes = keyframe_sum.
i1;
2167 if (num_keyframes == 0) {
2172 sipo->
cursorVal = sum_value / (
float)num_keyframes;
2182 ot->
name =
"Snap Cursor Value to Selected";
2183 ot->
idname =
"GRAPH_OT_snap_cursor_value";
2184 ot->
description =
"Place the cursor value on the average value of selected keyframes";
2205 "Selection to Current Frame",
2206 "Snap selected keyframes to the current frame"},
2210 "Selection to Cursor Value",
2211 "Set values of selected keyframes to the cursor value (Y/Horizontal component)"},
2215 "Selection to Nearest Frame",
2216 "Snap selected keyframes to the nearest (whole) frame (use to fix accidental subframe "
2221 "Selection to Nearest Second",
2222 "Snap selected keyframes to the nearest second"},
2226 "Selection to Nearest Marker",
2227 "Snap selected keyframes to the nearest marker"},
2232 "Flatten handles for a smoother transition"},
2246 float cursor_value = 0.0f;
2255 ked.scene = ac->
scene;
2261 cursor_value = (sipo) ? sipo->
cursorVal : 0.0f;
2277 for (ale = anim_data.
first; ale; ale = ale->
next) {
2287 ked.f1 = (cursor_value / unit_scale) - offset;
2336 ot->
description =
"Snap selected keyframes to the chosen times/values";
2361 "By Times Over Current Frame",
2362 "Flip times of selected keyframes using the current frame as the mirror line"},
2366 "By Values Over Cursor Value",
2367 "Flip values of selected keyframes using the cursor value (Y/Horizontal component) as the "
2372 "By Times Over Zero Time",
2373 "Flip times of selected keyframes, effectively reversing the order they appear in"},
2377 "By Values Over Zero Value",
2378 "Flip values of selected keyframes (i.e. negative values become positive, and vice versa)"},
2382 "By Times Over First Selected Marker",
2383 "Flip times of selected keyframes using the first selected marker as the reference point"},
2397 float cursor_value = 0.0f;
2401 ked.scene = ac->
scene;
2419 cursor_value = (sipo) ? sipo->
cursorVal : 0.0f;
2440 for (ale = anim_data.
first; ale; ale = ale->
next) {
2450 ked.f1 = (cursor_value + offset) * unit_scale;
2497 ot->
name =
"Mirror Keys";
2499 ot->
description =
"Flip selected keyframes over the selected mirror line";
2537 for (ale = anim_data.
first; ale; ale = ale->
next) {
2559 ot->
name =
"Smooth Keys";
2561 ot->
description =
"Apply weighted moving means to make selected F-Curves less bumpy";
2643 for (ale = anim_data.
first; ale; ale = ale->
next) {
2674 ot->
name =
"Add F-Curve Modifier";
2675 ot->
idname =
"GRAPH_OT_fmodifier_add";
2676 ot->
description =
"Add F-Modifier to the active/selected F-Curves";
2693 ot->
srna,
"only_active", 1,
"Only Active",
"Only add F-Modifier to active F-Curve");
2720 if (ale && ale->
data) {
2741 ot->
name =
"Copy F-Modifiers";
2742 ot->
idname =
"GRAPH_OT_fmodifier_copy";
2743 ot->
description =
"Copy the F-Modifier(s) of the active F-Curve";
2758 "Copy all the F-Modifiers, instead of just the active one");
2800 for (ale = anim_data.
first; ale; ale = ale->
next) {
2832 ot->
name =
"Paste F-Modifiers";
2833 ot->
idname =
"GRAPH_OT_fmodifier_paste";
2834 ot->
description =
"Add copied F-Modifiers to the selected F-Curves";
2845 ot->
srna,
"only_active",
false,
"Only Active",
"Only paste F-Modifiers on active F-Curve");
2851 "Replace existing F-Modifiers, instead of just appending to the end of the existing list");
2886 ot->
name =
"Copy Driver Variables";
2887 ot->
idname =
"GRAPH_OT_driver_variables_copy";
2888 ot->
description =
"Copy the driver variables of the active driver";
2934 ot->
name =
"Paste Driver Variables";
2935 ot->
idname =
"GRAPH_OT_driver_variables_paste";
2936 ot->
description =
"Add copied driver variables to the active driver";
2950 "Replace existing driver variables, instead of just appending to the end of the "
2981 for (ale = anim_data.
first; ale; ale = ale->
next) {
3035 ot->
name =
"Delete Invalid Drivers";
3036 ot->
idname =
"GRAPH_OT_driver_delete_invalid";
3037 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)
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 fcurve_samples_to_keyframes(struct FCurve *fcu, const int start, const int end)
const FModifierTypeInfo * get_fmodifier_typeinfo(const int type)
void calchandles_fcurve(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_report(ReportList *reports, ReportType type, const char *message)
void BKE_reportf(ReportList *reports, ReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
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)
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 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.
void UI_view2d_region_to_view(const struct View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
#define WM_FILESEL_SHOW_PROPS
#define WM_FILESEL_FILEPATH
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
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
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 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)
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])
static short paste_graph_keys(bAnimContext *ac, const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode, bool flip)
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 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 void duplicate_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 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)
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 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)
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)
KeyframeEditFunc ANIM_editkeyframes_mirror(short mode)
KeyframeEditFunc ANIM_editkeyframes_easing(short mode)
KeyframeEditFunc ANIM_editkeyframes_ipo(short mode)
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)
void duplicate_fcurve_keys(FCurve *fcu)
const EnumPropertyItem rna_enum_keyframe_paste_offset_items[]
short 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 delete_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)
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)
static void area(int d1, int d2, int e1, int e2, float weights[2])
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
ccl_device_inline float2 fabs(const float2 &a)
void WM_report(ReportType type, const char *message)
void WM_reportf(ReportType 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, int filter, short type, short action, short flag, short display, 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))