54#define OPERATOR_DATA_FILTER \
55 (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_CURVE_VISIBLE | ANIMFILTER_FCURVESONLY | \
56 ANIMFILTER_FOREDIT | ANIMFILTER_SEL | ANIMFILTER_NODUPLIS)
100 void (*segment_function)(
FCurve *fcu,
104 ListBase anim_data = {
nullptr,
nullptr};
113 segment_function(fcu, segment, factor);
139 SNPRINTF(status_str,
"%s: %s", mode_str, str_ofs);
142 SNPRINTF(status_str,
"%s: %s", mode_str, slider_string);
154 ListBase anim_data = {
nullptr,
nullptr};
164 if (fcu->
bezt ==
nullptr) {
176 memcpy(bezts_copy, fcu->
bezt, arr_size);
178 copy->bezt = bezts_copy;
194 ListBase anim_data = {
nullptr,
nullptr};
212 if (fcu->
bezt ==
nullptr) {
226 memcpy(fcu->
bezt, data->bezt, arr_size);
228 link_bezt = link_bezt->
next;
258 if (gso ==
nullptr) {
292 ListBase anim_data = {
nullptr,
nullptr};
312 switch (event->
type) {
352 if (has_numinput ==
false) {
366 value = value / 100.0f;
433 ListBase anim_data = {
nullptr,
nullptr};
469 SNPRINTF(status_str,
"%s: %s", mode_str, str_ofs);
472 SNPRINTF(status_str,
"%s: %s", mode_str, slider_string);
492 const float error_sq_max =
FLT_MAX;
510 return invoke_result;
535 error_sq_max *= error_sq_max;
540 if (factor == 0.0f || error_sq_max == 0.0f) {
575 "Decimate F-Curves by specifying how much they can deviate from the original curve");
587 "Use a percentage to specify how many keyframes you want to remove"},
592 "Use an error margin to specify how much the curve is allowed to deviate from the original "
594 {0,
nullptr, 0,
nullptr,
nullptr},
600 ot->
name =
"Decimate Keyframes";
603 "Decimate F-Curves by removing keyframes that influence the curve shape the least";
622 "Which mode to use for decimation");
630 "The ratio of remaining keyframes after the operation",
634 "remove_error_margin",
639 "How much the new decimated curve is allowed to deviate from the original",
675 return invoke_result;
685 return invoke_result;
709 ot->
name =
"Blend to Neighbor";
710 ot->
idname =
"GRAPH_OT_blend_to_neighbor";
711 ot->
description =
"Blend selected keyframes to their left or right neighbor";
728 "The blend factor with 0 being the current frame",
762 return invoke_result;
772 return invoke_result;
798 ot->
description =
"Move selected keyframes to an inbetween position relative to adjacent keys";
815 "Favor either the left or the right key",
828 ListBase anim_data = {
nullptr,
nullptr};
836 if (fcu ==
nullptr || fcu->
bezt ==
nullptr || fcu->
totvert == 0) {
869 return invoke_result;
878 return invoke_result;
902 ot->
name =
"Blend to Default Value";
903 ot->
idname =
"GRAPH_OT_blend_to_default";
904 ot->
description =
"Blend selected keys to their default value from their current position";
921 "How much to blend to the default value",
933 ListBase anim_data = {
nullptr,
nullptr};
965 SNPRINTF(op_slider_string,
"%s | %s", slider_string,
IFACE_(
"[TAB] - Modify Sharpness"));
968 SNPRINTF(op_slider_string,
"%s | %s", slider_string,
IFACE_(
"[TAB] - Modify Curve Bend"));
978 SNPRINTF(status_str,
"%s: %s", mode_str, str_ofs);
981 SNPRINTF(status_str,
"%s: %s", mode_str, op_slider_string);
1016 switch (event->
type) {
1053 return invoke_result;
1065 return invoke_result;
1089 ot->
name =
"Ease Keyframes";
1091 ot->
description =
"Align keyframes on a ease-in or ease-out curve";
1108 "Defines if the keys should be aligned on an ease-in or ease-out curve",
1118 "Higher values make the change more abrupt",
1157 return invoke_result;
1167 return invoke_result;
1192 ot->
name =
"Blend Offset Keyframes";
1193 ot->
idname =
"GRAPH_OT_blend_offset";
1194 ot->
description =
"Shift selected keys to the value of the neighboring keys as a block";
1211 "Control which key to offset towards and how far",
1250 return invoke_result;
1261 return invoke_result;
1286 ot->
name =
"Blend to Ease Keyframes";
1287 ot->
idname =
"GRAPH_OT_blend_to_ease";
1288 ot->
description =
"Blends keyframes from current state to an ease-in or ease-out curve";
1305 "Favor either original data or ease curve",
1318 ListBase anim_data = {
nullptr,
nullptr};
1320 bool all_segments_valid =
true;
1336 if (!all_segments_valid) {
1372 return invoke_result;
1383 return invoke_result;
1408 ot->
name =
"Match Slope";
1409 ot->
idname =
"GRAPH_OT_match_slope";
1410 ot->
description =
"Blend selected keys to the slope of neighboring ones";
1427 "Defines which keys to use as slope and how much to blend towards them",
1464 return invoke_result;
1476 return invoke_result;
1501 ot->
name =
"Time Offset Keyframes";
1502 ot->
idname =
"GRAPH_OT_time_offset";
1503 ot->
description =
"Shifts the value of selected keys in time";
1520 "How far in frames to offset the animation",
1536 "Shear the keys using the left key as reference"},
1541 "Shear the keys using the right key as reference"},
1542 {0,
nullptr, 0,
nullptr,
nullptr},
1547 ListBase anim_data = {
nullptr,
nullptr};
1581 SNPRINTF(status_str,
"%s: %s", mode_str, str_ofs);
1584 const char *operator_string =
IFACE_(
"D - Toggle Direction");
1585 SNPRINTF(status_str,
"%s: %s | %s", mode_str, slider_string, operator_string);
1612 switch (event->
type) {
1634 return invoke_result;
1644 return invoke_result;
1670 ot->
name =
"Shear Keyframes";
1673 "Affect the value of the keys linearly, keeping the same relationship between them using "
1674 "either the left or the right key as reference";
1691 "The amount of shear to apply",
1700 "Which end of the segment to use as a reference to shear from");
1730 return invoke_result;
1740 return invoke_result;
1765 ot->
name =
"Scale Average Keyframes";
1766 ot->
idname =
"GRAPH_OT_scale_average";
1767 ot->
description =
"Scale selected key values by their combined average";
1784 "The scale factor applied to the curve segments",
1813 const int filter_width,
1818 const int kernel_size = filter_width + 1;
1819 double *kernel =
static_cast<double *
>(
1820 MEM_callocN(
sizeof(
double) * kernel_size,
"Gauss Kernel"));
1822 operator_data->
kernel = kernel;
1824 ListBase anim_data = {
nullptr,
nullptr};
1828 ListBase segment_links = {
nullptr,
nullptr};
1835 segment_link->
fcu = fcu;
1836 segment_link->
segment = segment;
1838 BezTriple right_bezt = fcu->
bezt[segment->start_index + segment->length - 1];
1839 const int sample_count =
int(right_bezt.
vec[1][0] - left_bezt.
vec[1][0]) +
1840 (filter_width * 2 + 1);
1841 float *samples =
static_cast<float *
>(
1842 MEM_callocN(
sizeof(
float) * sample_count,
"Smooth FCurve Op Samples"));
1844 fcu, left_bezt.
vec[1][0] - filter_width, 1, samples, sample_count);
1845 segment_link->
samples = samples;
1906 return invoke_result;
1923 return invoke_result;
1929 const int filter_width)
1931 ListBase anim_data = {
nullptr,
nullptr};
1941 BezTriple right_bezt = fcu->
bezt[segment->start_index + segment->length - 1];
1942 const int sample_count =
int(right_bezt.
vec[1][0] - left_bezt.
vec[1][0]) +
1943 (filter_width * 2 + 1);
1944 float *samples =
static_cast<float *
>(
1945 MEM_callocN(
sizeof(
float) * sample_count,
"Smooth FCurve Op Samples"));
1947 fcu, left_bezt.
vec[1][0] - filter_width, 1, samples, sample_count);
1969 const int kernel_size = filter_width + 1;
1970 double *kernel =
static_cast<double *
>(
1971 MEM_callocN(
sizeof(
double) * kernel_size,
"Gauss Kernel"));
1987 ot->
name =
"Gaussian Smooth";
1988 ot->
idname =
"GRAPH_OT_gaussian_smooth";
1989 ot->
description =
"Smooth the curve using a Gaussian filter";
2006 "How much to blend to the default value",
2016 "The shape of the gaussian distribution, lower values make it sharper",
2026 "How far to each side the operator will average the key values",
2044 const int filter_order,
2045 const int samples_per_frame)
2049 const int sample_count = (
int(right_bezt->
vec[1][0] - left_bezt->
vec[1][0]) + 1 +
2050 (filter_order * 2)) *
2053 return sample_count;
2057 const int filter_order,
2058 const int samples_per_frame)
2065 ListBase anim_data = {
nullptr,
nullptr};
2069 ListBase segment_links = {
nullptr,
nullptr};
2078 segment_link->
fcu = fcu;
2079 segment_link->
segment = segment;
2081 BezTriple right_bezt = fcu->
bezt[segment->start_index + segment->length - 1];
2083 &right_bezt, &left_bezt, filter_order, samples_per_frame);
2084 float *samples =
static_cast<float *
>(
2085 MEM_callocN(
sizeof(
float) * sample_count,
"Btw Smooth FCurve Op Samples"));
2087 fcu, left_bezt.
vec[1][0] - filter_order, samples_per_frame, samples, sample_count);
2088 segment_link->
samples = samples;
2127 const int samples_per_frame =
RNA_int_get(op->
ptr,
"samples_per_frame");
2128 const float sampling_frequency = frame_rate * samples_per_frame;
2134 cutoff_frequency, sampling_frequency, operator_data->
coefficients);
2140 segment->sample_count,
2160 return invoke_result;
2168 const int samples_per_frame =
RNA_int_get(op->
ptr,
"samples_per_frame");
2174 const float sampling_frequency = frame_rate * samples_per_frame;
2182 return invoke_result;
2187 const int blend_in_out,
2188 float cutoff_frequency,
2189 const int filter_order,
2190 const int samples_per_frame)
2192 ListBase anim_data = {
nullptr,
nullptr};
2199 const float sampling_frequency = frame_rate * samples_per_frame;
2201 cutoff_frequency =
min_ff(cutoff_frequency, sampling_frequency / 2);
2210 BezTriple right_bezt = fcu->
bezt[segment->start_index + segment->length - 1];
2212 &right_bezt, &left_bezt, filter_order, samples_per_frame);
2213 float *samples =
static_cast<float *
>(
2214 MEM_callocN(
sizeof(
float) * sample_count,
"Smooth FCurve Op Samples"));
2216 fcu, left_bezt.
vec[1][0] - filter_order, samples_per_frame, samples, sample_count);
2218 fcu, segment, samples, sample_count, factor, blend_in_out, samples_per_frame, bw_coeff);
2241 const int samples_per_frame =
RNA_int_get(op->
ptr,
"samples_per_frame");
2244 &ac,
blend, blend_in_out, cutoff_frequency, filter_order, samples_per_frame);
2255 ot->
name =
"Butterworth Smooth";
2256 ot->
idname =
"GRAPH_OT_butterworth_smooth";
2257 ot->
description =
"Smooth an F-Curve while maintaining the general shape of the curve";
2273 "Frequency Cutoff (Hz)",
2274 "Lower values give a smoother curve",
2284 "Higher values produce a harder frequency cutoff",
2289 "samples_per_frame",
2293 "Samples per Frame",
2294 "How many samples to calculate per frame, helps with subframe data",
2304 "How much to blend to the smoothed curve",
2314 "Linearly blend the smooth data to the border frames of the selection",
2347 return invoke_result;
2357 return invoke_result;
2382 ot->
name =
"Push Pull Keyframes";
2384 ot->
description =
"Exaggerate or minimize the value of the selected keys";
2401 "Control how far to push or pull the keys",
2414 {0,
nullptr, 0,
nullptr,
nullptr},
2421 ListBase anim_data = {
nullptr,
nullptr};
2455 SNPRINTF(op_slider_string,
"%s | %s", slider_string,
IFACE_(
"[D] - Scale From Right End"));
2459 SNPRINTF(op_slider_string,
"%s | %s", slider_string,
IFACE_(
"[D] - Scale From Left End"));
2470 SNPRINTF(status_str,
"%s: %s", mode_str, str_ofs);
2473 SNPRINTF(status_str,
"%s: %s", mode_str, op_slider_string);
2499 switch (event->
type) {
2536 return invoke_result;
2562 ot->
name =
"Scale from Neighbor";
2563 ot->
idname =
"GRAPH_OT_scale_from_neighbor";
2565 "Increase or decrease the value of selected keys in relationship to the neighboring one";
2582 "The factor to scale keys with",
2591 "Which end of the segment to use as a reference to scale from");
Functions to modify FCurves.
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float min_ff(float a, float b)
#define STRNCPY(dst, src)
#define SNPRINTF(dst, format,...)
void DEG_id_tag_update(ID *id, unsigned int flags)
struct BezTriple BezTriple
#define ANIM_UPDATE_DEFAULT
void ED_area_status_text(ScrArea *area, const char *str)
void ED_workspace_status_text(bContext *C, const char *str)
void ED_slider_status_string_get(const tSlider *slider, char *status_string, size_t size_of_status_string)
void ED_slider_init(tSlider *slider, const wmEvent *event)
void ED_slider_allow_overshoot_set(tSlider *slider, bool lower, bool upper)
SliderMode ED_slider_mode_get(const tSlider *slider)
void ED_slider_unit_set(tSlider *slider, const char *unit)
void ED_slider_mode_set(tSlider *slider, SliderMode mode)
void ED_slider_property_label_set(tSlider *slider, const char *property_label)
void ED_slider_destroy(bContext *C, tSlider *slider)
tSlider * ED_slider_create(bContext *C)
bool ED_slider_modal(tSlider *slider, const wmEvent *event)
void ED_slider_factor_bounds_set(tSlider *slider, float factor_bound_lower, float factor_bound_upper)
float ED_slider_factor_get(const tSlider *slider)
void ED_slider_factor_set(tSlider *slider, float factor)
Read Guarded memory(de)allocation.
void ANIM_animdata_freelist(ListBase *anim_data)
void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data)
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, const eAnimFilter_Flags filter_mode, void *data, const eAnimCont_Types datatype)
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
bool graphop_editable_keyframes_poll(bContext *C)
static int blend_to_ease_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void blend_offset_modal_update(bContext *C, wmOperator *op)
static const EnumPropertyItem scale_anchor_items[]
static int blend_to_neighbor_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int match_slope_exec(bContext *C, wmOperator *op)
static int shear_modal(bContext *C, wmOperator *op, const wmEvent *event)
static int decimate_exec(bContext *C, wmOperator *op)
void GRAPH_OT_butterworth_smooth(wmOperatorType *ot)
static void match_slope_modal_update(bContext *C, wmOperator *op)
static void match_slope_graph_keys(bAnimContext *ac, const float factor)
static int blend_to_default_exec(bContext *C, wmOperator *op)
static bool decimate_poll_property(const bContext *, wmOperator *op, const PropertyRNA *prop)
static void reset_bezts(tGraphSliderOp *gso)
static void blend_to_ease_modal_update(bContext *C, wmOperator *op)
static int blend_to_ease_exec(bContext *C, wmOperator *op)
static void btw_smooth_allocate_operator_data(tGraphSliderOp *gso, const int filter_order, const int samples_per_frame)
static int gaussian_smooth_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void ease_modal_update(bContext *C, wmOperator *op)
void GRAPH_OT_time_offset(wmOperatorType *ot)
static void gaussian_smooth_free_operator_data(void *operator_data)
static int btw_smooth_exec(bContext *C, wmOperator *op)
void GRAPH_OT_blend_to_neighbor(wmOperatorType *ot)
static void blend_to_ease_draw_status_header(bContext *C, tGraphSliderOp *gso)
void GRAPH_OT_blend_to_ease(wmOperatorType *ot)
static std::string decimate_get_description(bContext *, wmOperatorType *, PointerRNA *ptr)
static const EnumPropertyItem decimate_mode_items[]
static int breakdown_exec(bContext *C, wmOperator *op)
static void scale_from_neighbor_draw_status_header(bContext *C, wmOperator *op)
static int push_pull_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void ease_graph_keys(bAnimContext *ac, const float factor, const float width)
static void blend_to_default_modal_update(bContext *C, wmOperator *op)
static int time_offset_exec(bContext *C, wmOperator *op)
static int graph_slider_modal(bContext *C, wmOperator *op, const wmEvent *event)
static void push_pull_modal_update(bContext *C, wmOperator *op)
static int gaussian_smooth_exec(bContext *C, wmOperator *op)
static void shear_modal_update(bContext *C, wmOperator *op)
static int decimate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void scale_average_graph_keys(bAnimContext *ac, const float factor)
static int scale_average_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int blend_to_default_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static const EnumPropertyItem shear_direction_items[]
static void btw_smooth_modal_update(bContext *C, wmOperator *op)
static int time_offset_invoke(bContext *C, wmOperator *op, const wmEvent *event)
#define OPERATOR_DATA_FILTER
static int shear_exec(bContext *C, wmOperator *op)
static int push_pull_exec(bContext *C, wmOperator *op)
void GRAPH_OT_gaussian_smooth(wmOperatorType *ot)
void GRAPH_OT_blend_offset(wmOperatorType *ot)
static void decimate_modal_update(bContext *C, wmOperator *op)
static void shear_graph_keys(bAnimContext *ac, const float factor, tShearDirection direction)
static void apply_fcu_segment_function(bAnimContext *ac, const float factor, void(*segment_function)(FCurve *fcu, FCurveSegment *segment, const float factor))
static void scale_average_modal_update(bContext *C, wmOperator *op)
static int ease_modal(bContext *C, wmOperator *op, const wmEvent *event)
static int btw_calculate_sample_count(const BezTriple *right_bezt, const BezTriple *left_bezt, const int filter_order, const int samples_per_frame)
void GRAPH_OT_breakdown(wmOperatorType *ot)
static void common_draw_status_header(bContext *C, tGraphSliderOp *gso, const char *operator_name)
static float slider_factor_get_and_remember(wmOperator *op)
static int scale_average_exec(bContext *C, wmOperator *op)
static void blend_to_default_graph_keys(bAnimContext *ac, const float factor)
static void match_slope_draw_status_header(bContext *C, tGraphSliderOp *gso)
static void time_offset_modal_update(bContext *C, wmOperator *op)
static void breakdown_modal_update(bContext *C, wmOperator *op)
static void blend_offset_graph_keys(bAnimContext *ac, const float factor)
void GRAPH_OT_push_pull(wmOperatorType *ot)
static void gaussian_smooth_allocate_operator_data(tGraphSliderOp *gso, const int filter_width, const float sigma)
static void btw_smooth_graph_keys(bAnimContext *ac, const float factor, const int blend_in_out, float cutoff_frequency, const int filter_order, const int samples_per_frame)
static void blend_to_neighbor_graph_keys(bAnimContext *ac, const float factor)
static int shear_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void blend_to_neighbor_modal_update(bContext *C, wmOperator *op)
void GRAPH_OT_scale_average(wmOperatorType *ot)
static int blend_to_neighbor_exec(bContext *C, wmOperator *op)
static int btw_smooth_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int blend_offset_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void GRAPH_OT_match_slope(wmOperatorType *ot)
static void gaussian_smooth_modal_update(bContext *C, wmOperator *op)
static int match_slope_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void decimate_graph_keys(bAnimContext *ac, float factor, float error_sq_max)
static int ease_exec(bContext *C, wmOperator *op)
static int scale_from_neighbor_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int graph_slider_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void GRAPH_OT_decimate(wmOperatorType *ot)
void GRAPH_OT_ease(wmOperatorType *ot)
static void ease_draw_status_header(bContext *C, wmOperator *op)
static void breakdown_graph_keys(bAnimContext *ac, float factor)
static void blend_offset_draw_status_header(bContext *C, tGraphSliderOp *gso)
static void blend_to_ease_graph_keys(bAnimContext *ac, const float factor)
static int breakdown_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void GRAPH_OT_scale_from_neighbor(wmOperatorType *ot)
void GRAPH_OT_shear(wmOperatorType *ot)
void GRAPH_OT_blend_to_default(wmOperatorType *ot)
static void graph_slider_exit(bContext *C, wmOperator *op)
static void push_pull_graph_keys(bAnimContext *ac, const float factor)
static int scale_from_neighbor_modal(bContext *C, wmOperator *op, const wmEvent *event)
static void store_original_bezt_arrays(tGraphSliderOp *gso)
static void time_offset_draw_status_header(bContext *C, tGraphSliderOp *gso)
static void update_depsgraph(tGraphSliderOp *gso)
static void decimate_draw_status(bContext *C, tGraphSliderOp *gso)
static void scale_from_neighbor_modal_update(bContext *C, wmOperator *op)
static void btw_smooth_free_operator_data(void *operator_data)
static void time_offset_graph_keys(bAnimContext *ac, const float factor)
static int ease_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void scale_from_neighbor_graph_keys(bAnimContext *ac, const float factor, const FCurveSegmentAnchor anchor)
static void shear_draw_status_header(bContext *C, tGraphSliderOp *gso)
static int scale_from_neighbor_exec(bContext *C, wmOperator *op)
static int blend_offset_exec(bContext *C, wmOperator *op)
static void gaussian_smooth_graph_keys(bAnimContext *ac, const float factor, double *kernel, const int filter_width)
void ED_anim_calculate_butterworth_coefficients(const float cutoff_frequency, const float sampling_frequency, ButterworthCoefficients *bw_coeff)
void butterworth_smooth_fcurve_segment(FCurve *fcu, FCurveSegment *segment, float *samples, const int sample_count, const float factor, const int blend_in_out, const int sample_rate, ButterworthCoefficients *bw_coeff)
bool decimate_fcurve(bAnimListElem *ale, float remove_ratio, float error_sq_max)
void breakdown_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float factor)
void ease_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float factor, const float width)
ButterworthCoefficients * ED_anim_allocate_butterworth_coefficients(const int filter_order)
void time_offset_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float frame_offset)
void ED_ANIM_get_1d_gauss_kernel(const float sigma, const int kernel_size, double *r_kernel)
void scale_average_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float factor)
void blend_offset_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float factor)
void shear_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float factor, tShearDirection direction)
void blend_to_ease_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float factor)
void smooth_fcurve_segment(FCurve *fcu, FCurveSegment *segment, float *samples, const float factor, const int kernel_size, double *kernel)
bool match_slope_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float factor)
void push_pull_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float factor)
void blend_to_default_fcurve(PointerRNA *id_ptr, FCurve *fcu, const float factor)
ListBase find_fcurve_segments(FCurve *fcu)
void scale_from_fcurve_segment_neighbor(FCurve *fcu, FCurveSegment *segment, const float factor, const FCurveSegmentAnchor anchor)
void blend_to_neighbor_fcurve_segment(FCurve *fcu, FCurveSegment *segment, const float factor)
void ED_anim_free_butterworth_coefficients(ButterworthCoefficients *bw_coeff)
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void sample_fcurve_segment(const FCurve *fcu, float start_frame, float sample_rate, float *samples, int sample_count)
static void copy(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
int RNA_int_get(PointerRNA *ptr, const char *name)
float RNA_float_get(PointerRNA *ptr, const char *name)
const char * RNA_property_ui_name(const PropertyRNA *prop)
void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
int RNA_enum_get(PointerRNA *ptr, const char *name)
const char * RNA_property_identifier(const PropertyRNA *prop)
PointerRNA RNA_id_pointer_create(ID *id)
PropertyRNA * RNA_def_float_factor(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
ButterworthCoefficients * coefficients
tFCurveSegmentLink * prev
tFCurveSegmentLink * next
PropertyRNA * factor_prop
void(* modal_update)(bContext *, wmOperator *)
void(* free_operator_data)(void *operator_data)
bool(* poll_property)(const bContext *C, wmOperator *op, const PropertyRNA *prop) ATTR_WARN_UNUSED_RESULT
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
std::string(* get_description)(bContext *C, wmOperatorType *ot, PointerRNA *ptr)
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
void WM_cursor_modal_set(wmWindow *win, int val)
void WM_cursor_modal_restore(wmWindow *win)
void WM_report(eReportType type, const char *message)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)