Blender V4.3
graph_slider_ops.cc File Reference
#include <cfloat>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
#include "DEG_depsgraph.hh"
#include "DNA_anim_types.h"
#include "DNA_scene_types.h"
#include "RNA_access.hh"
#include "RNA_define.hh"
#include "BLT_translation.hh"
#include "BKE_context.hh"
#include "UI_interface.hh"
#include "ED_anim_api.hh"
#include "ED_keyframes_edit.hh"
#include "ED_numinput.hh"
#include "ED_screen.hh"
#include "ED_util.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "ANIM_fcurve.hh"
#include "graph_intern.hh"

Go to the source code of this file.

Classes

struct  tGraphSliderOp
 
struct  tBeztCopyData
 
struct  tGaussOperatorData
 
struct  tFCurveSegmentLink
 
struct  tBtwOperatorData
 

Macros

Internal Struct & Defines
#define OPERATOR_DATA_FILTER
 

Functions

Utility Functions
static void apply_fcu_segment_function (bAnimContext *ac, const float factor, void(*segment_function)(FCurve *fcu, FCurveSegment *segment, const float factor))
 
static void common_draw_status_header (bContext *C, tGraphSliderOp *gso, const char *operator_name)
 
static void store_original_bezt_arrays (tGraphSliderOp *gso)
 
static void reset_bezts (tGraphSliderOp *gso)
 
static float slider_factor_get_and_remember (wmOperator *op)
 
Common Modal Functions
static void graph_slider_exit (bContext *C, wmOperator *op)
 
static void update_depsgraph (tGraphSliderOp *gso)
 
static int graph_slider_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
static int graph_slider_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
Blend to Neighbor Operator
static void blend_to_neighbor_graph_keys (bAnimContext *ac, const float factor)
 
static void blend_to_neighbor_modal_update (bContext *C, wmOperator *op)
 
static int blend_to_neighbor_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int blend_to_neighbor_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_blend_to_neighbor (wmOperatorType *ot)
 
Breakdown Operator
static void breakdown_graph_keys (bAnimContext *ac, float factor)
 
static void breakdown_modal_update (bContext *C, wmOperator *op)
 
static int breakdown_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int breakdown_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_breakdown (wmOperatorType *ot)
 
Blend to Default Value Operator
static void blend_to_default_graph_keys (bAnimContext *ac, const float factor)
 
static void blend_to_default_modal_update (bContext *C, wmOperator *op)
 
static int blend_to_default_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int blend_to_default_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_blend_to_default (wmOperatorType *ot)
 
Ease Operator
static void ease_graph_keys (bAnimContext *ac, const float factor, const float width)
 
static void ease_draw_status_header (bContext *C, wmOperator *op)
 
static void ease_modal_update (bContext *C, wmOperator *op)
 
static int ease_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
static int ease_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int ease_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_ease (wmOperatorType *ot)
 
Blend Offset Operator
static void blend_offset_graph_keys (bAnimContext *ac, const float factor)
 
static void blend_offset_draw_status_header (bContext *C, tGraphSliderOp *gso)
 
static void blend_offset_modal_update (bContext *C, wmOperator *op)
 
static int blend_offset_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int blend_offset_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_blend_offset (wmOperatorType *ot)
 
Blend to Ease Operator
static void blend_to_ease_graph_keys (bAnimContext *ac, const float factor)
 
static void blend_to_ease_draw_status_header (bContext *C, tGraphSliderOp *gso)
 
static void blend_to_ease_modal_update (bContext *C, wmOperator *op)
 
static int blend_to_ease_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int blend_to_ease_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_blend_to_ease (wmOperatorType *ot)
 
Match Slope
static void match_slope_graph_keys (bAnimContext *ac, const float factor)
 
static void match_slope_draw_status_header (bContext *C, tGraphSliderOp *gso)
 
static void match_slope_modal_update (bContext *C, wmOperator *op)
 
static int match_slope_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int match_slope_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_match_slope (wmOperatorType *ot)
 
Time Offset
static void time_offset_graph_keys (bAnimContext *ac, const float factor)
 
static void time_offset_draw_status_header (bContext *C, tGraphSliderOp *gso)
 
static void time_offset_modal_update (bContext *C, wmOperator *op)
 
static int time_offset_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int time_offset_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_time_offset (wmOperatorType *ot)
 
Scale Average Operator
static void scale_average_graph_keys (bAnimContext *ac, const float factor)
 
static void scale_average_modal_update (bContext *C, wmOperator *op)
 
static int scale_average_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int scale_average_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_scale_average (wmOperatorType *ot)
 
Gauss Smooth Operator
static void gaussian_smooth_allocate_operator_data (tGraphSliderOp *gso, const int filter_width, const float sigma)
 
static void gaussian_smooth_free_operator_data (void *operator_data)
 
static void gaussian_smooth_modal_update (bContext *C, wmOperator *op)
 
static int gaussian_smooth_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static void gaussian_smooth_graph_keys (bAnimContext *ac, const float factor, double *kernel, const int filter_width)
 
static int gaussian_smooth_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_gaussian_smooth (wmOperatorType *ot)
 
Butterworth Smooth Operator
static int btw_calculate_sample_count (const BezTriple *right_bezt, const BezTriple *left_bezt, const int filter_order, const int samples_per_frame)
 
static void btw_smooth_allocate_operator_data (tGraphSliderOp *gso, const int filter_order, const int samples_per_frame)
 
static void btw_smooth_free_operator_data (void *operator_data)
 
static void btw_smooth_modal_update (bContext *C, wmOperator *op)
 
static int btw_smooth_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
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 int btw_smooth_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_butterworth_smooth (wmOperatorType *ot)
 
Push-Pull Operator
static void push_pull_graph_keys (bAnimContext *ac, const float factor)
 
static void push_pull_modal_update (bContext *C, wmOperator *op)
 
static int push_pull_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int push_pull_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_push_pull (wmOperatorType *ot)
 

Decimate Keyframes Operator

enum  tDecimModes { DECIM_RATIO = 1 , DECIM_ERROR }
 
static const EnumPropertyItem decimate_mode_items []
 
static void decimate_graph_keys (bAnimContext *ac, float factor, float error_sq_max)
 
static void decimate_draw_status (bContext *C, tGraphSliderOp *gso)
 
static void decimate_modal_update (bContext *C, wmOperator *op)
 
static int decimate_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int decimate_exec (bContext *C, wmOperator *op)
 
static bool decimate_poll_property (const bContext *, wmOperator *op, const PropertyRNA *prop)
 
static std::string decimate_get_description (bContext *, wmOperatorType *, PointerRNA *ptr)
 
void GRAPH_OT_decimate (wmOperatorType *ot)
 

Shear Operator

static const EnumPropertyItem shear_direction_items []
 
static void shear_graph_keys (bAnimContext *ac, const float factor, tShearDirection direction)
 
static void shear_draw_status_header (bContext *C, tGraphSliderOp *gso)
 
static void shear_modal_update (bContext *C, wmOperator *op)
 
static int shear_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
static int shear_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int shear_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_shear (wmOperatorType *ot)
 

Scale from Left Operator

static const EnumPropertyItem scale_anchor_items []
 
static void scale_from_neighbor_graph_keys (bAnimContext *ac, const float factor, const FCurveSegmentAnchor anchor)
 
static void scale_from_neighbor_draw_status_header (bContext *C, wmOperator *op)
 
static void scale_from_neighbor_modal_update (bContext *C, wmOperator *op)
 
static int scale_from_neighbor_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
static int scale_from_neighbor_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int scale_from_neighbor_exec (bContext *C, wmOperator *op)
 
void GRAPH_OT_scale_from_neighbor (wmOperatorType *ot)
 

Detailed Description

Graph Slider Operators

This file contains a collection of operators to modify keyframes in the graph editor. All operators are modal and use a slider that allows the user to define a percentage to modify the operator.

Definition in file graph_slider_ops.cc.

Macro Definition Documentation

◆ OPERATOR_DATA_FILTER

Enumeration Type Documentation

◆ tDecimModes

Enumerator
DECIM_RATIO 
DECIM_ERROR 

Definition at line 426 of file graph_slider_ops.cc.

Function Documentation

◆ apply_fcu_segment_function()

static void apply_fcu_segment_function ( bAnimContext * ac,
const float factor,
void(* segment_function )(FCurve *fcu, FCurveSegment *segment, const float factor) )
static

◆ blend_offset_draw_status_header()

static void blend_offset_draw_status_header ( bContext * C,
tGraphSliderOp * gso )
static

Definition at line 1134 of file graph_slider_ops.cc.

References common_draw_status_header().

Referenced by blend_offset_invoke(), and blend_offset_modal_update().

◆ blend_offset_exec()

◆ blend_offset_graph_keys()

static void blend_offset_graph_keys ( bAnimContext * ac,
const float factor )
static

◆ blend_offset_invoke()

◆ blend_offset_modal_update()

◆ blend_to_default_exec()

◆ blend_to_default_graph_keys()

◆ blend_to_default_invoke()

◆ blend_to_default_modal_update()

◆ blend_to_ease_draw_status_header()

static void blend_to_ease_draw_status_header ( bContext * C,
tGraphSliderOp * gso )
static

◆ blend_to_ease_exec()

◆ blend_to_ease_graph_keys()

static void blend_to_ease_graph_keys ( bAnimContext * ac,
const float factor )
static

◆ blend_to_ease_invoke()

◆ blend_to_ease_modal_update()

◆ blend_to_neighbor_exec()

◆ blend_to_neighbor_graph_keys()

static void blend_to_neighbor_graph_keys ( bAnimContext * ac,
const float factor )
static

◆ blend_to_neighbor_invoke()

◆ blend_to_neighbor_modal_update()

◆ breakdown_exec()

◆ breakdown_graph_keys()

static void breakdown_graph_keys ( bAnimContext * ac,
float factor )
static

◆ breakdown_invoke()

◆ breakdown_modal_update()

◆ btw_calculate_sample_count()

static int btw_calculate_sample_count ( const BezTriple * right_bezt,
const BezTriple * left_bezt,
const int filter_order,
const int samples_per_frame )
static

Definition at line 2042 of file graph_slider_ops.cc.

References int, and BezTriple::vec.

Referenced by btw_smooth_allocate_operator_data(), and btw_smooth_graph_keys().

◆ btw_smooth_allocate_operator_data()

◆ btw_smooth_exec()

◆ btw_smooth_free_operator_data()

◆ btw_smooth_graph_keys()

◆ btw_smooth_invoke()

◆ btw_smooth_modal_update()

◆ common_draw_status_header()

◆ decimate_draw_status()

◆ decimate_exec()

◆ decimate_get_description()

static std::string decimate_get_description ( bContext * ,
wmOperatorType * ,
PointerRNA * ptr )
static

Definition at line 568 of file graph_slider_ops.cc.

References DECIM_ERROR, ptr, RNA_enum_get(), and TIP_.

Referenced by GRAPH_OT_decimate().

◆ decimate_graph_keys()

◆ decimate_invoke()

◆ decimate_modal_update()

◆ decimate_poll_property()

static bool decimate_poll_property ( const bContext * ,
wmOperator * op,
const PropertyRNA * prop )
static

◆ ease_draw_status_header()

◆ ease_exec()

◆ ease_graph_keys()

◆ ease_invoke()

◆ ease_modal()

◆ ease_modal_update()

◆ gaussian_smooth_allocate_operator_data()

◆ gaussian_smooth_exec()

◆ gaussian_smooth_free_operator_data()

static void gaussian_smooth_free_operator_data ( void * operator_data)
static

◆ gaussian_smooth_graph_keys()

◆ gaussian_smooth_invoke()

◆ gaussian_smooth_modal_update()

◆ GRAPH_OT_blend_offset()

◆ GRAPH_OT_blend_to_default()

◆ GRAPH_OT_blend_to_ease()

◆ GRAPH_OT_blend_to_neighbor()

◆ GRAPH_OT_breakdown()

◆ GRAPH_OT_butterworth_smooth()

◆ GRAPH_OT_decimate()

◆ GRAPH_OT_ease()

◆ GRAPH_OT_gaussian_smooth()

◆ GRAPH_OT_match_slope()

◆ GRAPH_OT_push_pull()

◆ GRAPH_OT_scale_average()

◆ GRAPH_OT_scale_from_neighbor()

◆ GRAPH_OT_shear()

◆ GRAPH_OT_time_offset()

◆ graph_slider_exit()

◆ graph_slider_invoke()

◆ graph_slider_modal()

◆ match_slope_draw_status_header()

static void match_slope_draw_status_header ( bContext * C,
tGraphSliderOp * gso )
static

Definition at line 1349 of file graph_slider_ops.cc.

References common_draw_status_header().

Referenced by match_slope_invoke(), and match_slope_modal_update().

◆ match_slope_exec()

◆ match_slope_graph_keys()

◆ match_slope_invoke()

◆ match_slope_modal_update()

◆ push_pull_exec()

◆ push_pull_graph_keys()

static void push_pull_graph_keys ( bAnimContext * ac,
const float factor )
static

◆ push_pull_invoke()

◆ push_pull_modal_update()

◆ reset_bezts()

◆ scale_average_exec()

◆ scale_average_graph_keys()

static void scale_average_graph_keys ( bAnimContext * ac,
const float factor )
static

◆ scale_average_invoke()

◆ scale_average_modal_update()

◆ scale_from_neighbor_draw_status_header()

◆ scale_from_neighbor_exec()

◆ scale_from_neighbor_graph_keys()

◆ scale_from_neighbor_invoke()

◆ scale_from_neighbor_modal()

◆ scale_from_neighbor_modal_update()

◆ shear_draw_status_header()

◆ shear_exec()

◆ shear_graph_keys()

◆ shear_invoke()

◆ shear_modal()

◆ shear_modal_update()

◆ slider_factor_get_and_remember()

◆ store_original_bezt_arrays()

static void store_original_bezt_arrays ( tGraphSliderOp * gso)
static

Construct a list with the original bezt arrays so we can restore them during modal operation. The data is stored on the struct that is passed.

Definition at line 152 of file graph_slider_ops.cc.

References tGraphSliderOp::ac, ANIM_animdata_filter(), ANIM_animdata_freelist(), FCurve::bezt, tGraphSliderOp::bezt_arr_list, BLI_addtail(), copy(), bAnimContext::data, LinkData::data, bAnimContext::datatype, LISTBASE_FOREACH, MEM_callocN, MEM_mallocN, OPERATOR_DATA_FILTER, and FCurve::totvert.

Referenced by graph_slider_invoke().

◆ time_offset_draw_status_header()

static void time_offset_draw_status_header ( bContext * C,
tGraphSliderOp * gso )
static

Definition at line 1441 of file graph_slider_ops.cc.

References common_draw_status_header().

Referenced by time_offset_invoke(), and time_offset_modal_update().

◆ time_offset_exec()

◆ time_offset_graph_keys()

static void time_offset_graph_keys ( bAnimContext * ac,
const float factor )
static

◆ time_offset_invoke()

◆ time_offset_modal_update()

◆ update_depsgraph()

Variable Documentation

◆ decimate_mode_items

const EnumPropertyItem decimate_mode_items[]
static
Initial value:
= {
"RATIO",
0,
"Ratio",
"Use a percentage to specify how many keyframes you want to remove"},
"ERROR",
0,
"Error Margin",
"Use an error margin to specify how much the curve is allowed to deviate from the original "
"path"},
{0, nullptr, 0, nullptr, nullptr},
}
@ DECIM_RATIO
@ DECIM_ERROR

Definition at line 582 of file graph_slider_ops.cc.

Referenced by GRAPH_OT_decimate().

◆ scale_anchor_items

const EnumPropertyItem scale_anchor_items[]
static
Initial value:
= {
{int(FCurveSegmentAnchor::LEFT), "LEFT", 0, "From Left", ""},
{int(FCurveSegmentAnchor::RIGHT), "RIGHT", 0, "From Right", ""},
{0, nullptr, 0, nullptr, nullptr},
}
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

Definition at line 2411 of file graph_slider_ops.cc.

Referenced by GRAPH_OT_scale_from_neighbor().

◆ shear_direction_items

const EnumPropertyItem shear_direction_items[]
static
Initial value:
= {
"FROM_LEFT",
0,
"From Left",
"Shear the keys using the left key as reference"},
"FROM_RIGHT",
0,
"From Right",
"Shear the keys using the right key as reference"},
{0, nullptr, 0, nullptr, nullptr},
}
@ SHEAR_FROM_RIGHT
@ SHEAR_FROM_LEFT

Definition at line 1531 of file graph_slider_ops.cc.

Referenced by GRAPH_OT_shear().