Blender  V3.3
Macros | Functions | Variables
fcurve.c File Reference
#include <float.h>
#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_object_types.h"
#include "DNA_text_types.h"
#include "BLI_blenlib.h"
#include "BLI_easing.h"
#include "BLI_ghash.h"
#include "BLI_math.h"
#include "BLI_sort_utils.h"
#include "BKE_anim_data.h"
#include "BKE_animsys.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_fcurve.h"
#include "BKE_fcurve_driver.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_lib_query.h"
#include "BKE_nla.h"
#include "BLO_read_write.h"
#include "RNA_access.h"
#include "RNA_path.h"
#include "CLG_log.h"

Go to the source code of this file.

Macros

#define SMALL   -1.0e-10
 
#define SELECT   1
 

Functions

void BKE_fcurve_keyframe_move_value_with_handles (struct BezTriple *keyframe, const float new_value)
 
F-Curve Data Create
FCurveBKE_fcurve_create (void)
 
F-Curve Data Free
void BKE_fcurve_free (FCurve *fcu)
 
void BKE_fcurves_free (ListBase *list)
 
F-Curve Data Copy
FCurveBKE_fcurve_copy (const FCurve *fcu)
 
void BKE_fcurves_copy (ListBase *dst, ListBase *src)
 
void BKE_fcurve_foreach_id (FCurve *fcu, LibraryForeachIDData *data)
 
FCurveid_data_find_fcurve (ID *id, void *data, StructRNA *type, const char *prop_name, int index, bool *r_driven)
 
FCurveBKE_fcurve_find (ListBase *list, const char rna_path[], const int array_index)
 
FCurve Iteration
FCurveBKE_fcurve_iter_step (FCurve *fcu_iter, const char rna_path[])
 
int BKE_fcurves_filter (ListBase *dst, ListBase *src, const char *dataPrefix, const char *dataName)
 
FCurveBKE_animadata_fcurve_find_by_rna_path (AnimData *animdata, const char *rna_path, int rna_index, bAction **r_action, bool *r_driven)
 
FCurveBKE_fcurve_find_by_rna (PointerRNA *ptr, PropertyRNA *prop, int rnaindex, AnimData **r_adt, bAction **r_action, bool *r_driven, bool *r_special)
 
FCurveBKE_fcurve_find_by_rna_context_ui (bContext *UNUSED(C), const PointerRNA *ptr, PropertyRNA *prop, int rnaindex, AnimData **r_animdata, bAction **r_action, bool *r_driven, bool *r_special)
 
Finding Keyframes/Extents
static int BKE_fcurve_bezt_binarysearch_index_ex (const BezTriple array[], const float frame, const int arraylen, const float threshold, bool *r_replace)
 
int BKE_fcurve_bezt_binarysearch_index (const BezTriple array[], const float frame, const int arraylen, bool *r_replace)
 
static short get_fcurve_end_keyframes (FCurve *fcu, BezTriple **first, BezTriple **last, const bool do_sel_only)
 
bool BKE_fcurve_calc_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, float *ymax, const bool do_sel_only, const bool include_handles)
 
bool BKE_fcurve_calc_range (FCurve *fcu, float *start, float *end, const bool do_sel_only, const bool do_min_length)
 
floatBKE_fcurves_calc_keyed_frames_ex (FCurve **fcurve_array, int fcurve_array_len, const float interval, int *r_frames_len)
 
floatBKE_fcurves_calc_keyed_frames (FCurve **fcurve_array, int fcurve_array_len, int *r_frames_len)
 
Active Keyframe
void BKE_fcurve_active_keyframe_set (FCurve *fcu, const BezTriple *active_bezt)
 
int BKE_fcurve_active_keyframe_index (const FCurve *fcu)
 
Status Checks
bool BKE_fcurve_are_keyframes_usable (FCurve *fcu)
 
bool BKE_fcurve_is_protected (FCurve *fcu)
 
bool BKE_fcurve_is_keyframable (FCurve *fcu)
 
Keyframe Column Tools
static void UNUSED_FUNCTION() bezt_add_to_cfra_elem (ListBase *lb, BezTriple *bezt)
 
Samples Utilities
float fcurve_samplingcb_evalcurve (FCurve *fcu, void *UNUSED(data), float evaltime)
 
void fcurve_store_samples (FCurve *fcu, void *data, int start, int end, FcuSampleFunc sample_cb)
 
static void init_unbaked_bezt_data (BezTriple *bezt)
 
void fcurve_samples_to_keyframes (FCurve *fcu, const int start, const int end)
 
eFCU_Cycle_Type BKE_fcurve_get_cycle_type (FCurve *fcu)
 
bool BKE_fcurve_is_cyclic (FCurve *fcu)
 
static BezTriplecycle_offset_triple (bool cycle, BezTriple *out, const BezTriple *in, const BezTriple *from, const BezTriple *to)
 
void BKE_fcurve_handles_recalc_ex (FCurve *fcu, eBezTriple_Flag handle_sel_flag)
 
void BKE_fcurve_handles_recalc (FCurve *fcu)
 
void testhandles_fcurve (FCurve *fcu, eBezTriple_Flag sel_flag, const bool use_handle)
 
void sort_time_fcurve (FCurve *fcu)
 
bool test_time_fcurve (FCurve *fcu)
 
F-Curve Calculations
void BKE_fcurve_correct_bezpart (const float v1[2], float v2[2], float v3[2], const float v4[2])
 
static int solve_cubic (double c0, double c1, double c2, double c3, float *o)
 
static int findzero (float x, float q0, float q1, float q2, float q3, float *o)
 
static void berekeny (float f1, float f2, float f3, float f4, float *o, int b)
 
static void fcurve_bezt_free (FCurve *fcu)
 
bool BKE_fcurve_bezt_subdivide_handles (struct BezTriple *bezt, struct BezTriple *prev, struct BezTriple *next, float *r_pdelta)
 
void BKE_fcurve_delete_key (FCurve *fcu, int index)
 
bool BKE_fcurve_delete_keys_selected (FCurve *fcu)
 
void BKE_fcurve_delete_keys_all (FCurve *fcu)
 
F-Curve Evaluation
static float fcurve_eval_keyframes_extrapolate (FCurve *fcu, BezTriple *bezts, float evaltime, int endpoint_offset, int direction_to_neighbor)
 
static float fcurve_eval_keyframes_interpolate (FCurve *fcu, BezTriple *bezts, float evaltime)
 
static float fcurve_eval_keyframes (FCurve *fcu, BezTriple *bezts, float evaltime)
 
static float fcurve_eval_samples (FCurve *fcu, FPoint *fpts, float evaltime)
 
F-Curve - Evaluation
static float evaluate_fcurve_ex (FCurve *fcu, float evaltime, float cvalue)
 
float evaluate_fcurve (FCurve *fcu, float evaltime)
 
float evaluate_fcurve_only_curve (FCurve *fcu, float evaltime)
 
float evaluate_fcurve_driver (PathResolvedRNA *anim_rna, FCurve *fcu, ChannelDriver *driver_orig, const AnimationEvalContext *anim_eval_context)
 
bool BKE_fcurve_is_empty (FCurve *fcu)
 
float calculate_fcurve (PathResolvedRNA *anim_rna, FCurve *fcu, const AnimationEvalContext *anim_eval_context)
 
F-Curve - .blend file API
void BKE_fmodifiers_blend_write (BlendWriter *writer, ListBase *fmodifiers)
 
void BKE_fmodifiers_blend_read_data (BlendDataReader *reader, ListBase *fmodifiers, FCurve *curve)
 
void BKE_fmodifiers_blend_read_lib (BlendLibReader *reader, ID *id, ListBase *fmodifiers)
 
void BKE_fmodifiers_blend_read_expand (BlendExpander *expander, ListBase *fmodifiers)
 
void BKE_fcurve_blend_write (BlendWriter *writer, ListBase *fcurves)
 
void BKE_fcurve_blend_read_data (BlendDataReader *reader, ListBase *fcurves)
 
void BKE_fcurve_blend_read_lib (BlendLibReader *reader, ID *id, ListBase *fcurves)
 
void BKE_fcurve_blend_read_expand (BlendExpander *expander, ListBase *fcurves)
 

Variables

static CLG_LogRef LOG = {"bke.fcurve"}
 

Macro Definition Documentation

◆ SELECT

#define SELECT   1

Definition at line 45 of file fcurve.c.

◆ SMALL

#define SMALL   -1.0e-10

Definition at line 44 of file fcurve.c.

Function Documentation

◆ berekeny()

static void berekeny ( float  f1,
float  f2,
float  f3,
float  f4,
float o,
int  b 
)
static

Definition at line 1578 of file fcurve.c.

References Freestyle::a, usdtokens::b(), and t.

Referenced by fcurve_eval_keyframes_interpolate().

◆ bezt_add_to_cfra_elem()

static void UNUSED_FUNCTION() bezt_add_to_cfra_elem ( ListBase lb,
BezTriple bezt 
)
static

◆ BKE_animadata_fcurve_find_by_rna_path()

FCurve* BKE_animadata_fcurve_find_by_rna_path ( struct AnimData animdata,
const char *  rna_path,
const int  rna_index,
struct bAction **  r_action,
bool r_driven 
)

Find an F-Curve from its rna path and index.

If there is an action assigned to the animdata, it will be searched for a matching F-curve first. Drivers are searched only if no valid action F-curve could be found.

Note
Typically, indices in RNA arrays are stored separately in F-curves, so the rna_path should not include them (e.g. ‘rna_path='location[0]’will not match any F-Curve on an Object, butrna_path='location', rna_index=0` will if it exists).
Return pointer parameters (r_action, r_driven and r_special) are all optional and may be NULL.

Definition at line 339 of file fcurve.c.

References AnimData::action, BKE_fcurve_find(), BLI_listbase_is_empty(), bAction::curves, AnimData::drivers, and NULL.

Referenced by BKE_fcurve_find_by_rna_context_ui(), BKE_lib_override_library_property_is_animated(), and id_data_find_fcurve().

◆ BKE_fcurve_active_keyframe_index()

int BKE_fcurve_active_keyframe_index ( const FCurve fcu)

◆ BKE_fcurve_active_keyframe_set()

void BKE_fcurve_active_keyframe_set ( FCurve fcu,
const BezTriple active_bezt 
)

◆ BKE_fcurve_are_keyframes_usable()

bool BKE_fcurve_are_keyframes_usable ( struct FCurve fcu)

Are keyframes on F-Curve of any use (to final result, and to show in editors)? Usability of keyframes refers to whether they should be displayed, and also whether they will have any influence on the final result.

Definition at line 903 of file fcurve.c.

References data, FModifier::data, FCM_GENERATOR_ADDITIVE, ListBase::first, FModifier::flag, FMODIFIER_FLAG_DISABLED, FMODIFIER_FLAG_MUTED, FMODIFIER_TYPE_CYCLES, FMODIFIER_TYPE_FN_GENERATOR, FMODIFIER_TYPE_GENERATOR, FMODIFIER_TYPE_NOISE, FMODIFIER_TYPE_STEPPED, FCurve::fpt, if(), ListBase::last, FCurve::modifiers, NULL, FModifier::prev, and FModifier::type.

Referenced by BKE_fcurve_is_keyframable(), draw_fcurve(), and graphop_visible_keyframes_poll().

◆ BKE_fcurve_bezt_binarysearch_index()

int BKE_fcurve_bezt_binarysearch_index ( const struct BezTriple  array[],
float  frame,
int  arraylen,
bool r_replace 
)

Binary search algorithm for finding where to 'insert' BezTriple with given frame number. Returns the index to insert at (data already at that index will be offset if replace is 0)

Definition at line 561 of file fcurve.c.

References BEZT_BINARYSEARCH_THRESH, and BKE_fcurve_bezt_binarysearch_index_ex().

Referenced by delete_key_button_exec(), delete_keyframe_fcurve(), fcurve_frame_has_keyframe(), gather_frames_to_render_for_adt(), insert_bezt_fcurve(), pose_propagate_fcurve(), and pyrna_struct_keyframe_delete().

◆ BKE_fcurve_bezt_binarysearch_index_ex()

static int BKE_fcurve_bezt_binarysearch_index_ex ( const BezTriple  array[],
const float  frame,
const int  arraylen,
const float  threshold,
bool r_replace 
)
static

◆ BKE_fcurve_bezt_subdivide_handles()

bool BKE_fcurve_bezt_subdivide_handles ( struct BezTriple bezt,
struct BezTriple prev,
struct BezTriple next,
float r_pdelta 
)

Recompute bezier handles of all three given BezTriples, so that bezt can be inserted between prev and next without changing the resulting curve shape.

Parameters
r_pdeltareturn Y difference between bezt and the original curve value at its X position.
Returns
Whether the split was successful.

Definition at line 1600 of file fcurve.c.

References add_v2_v2v2(), BKE_fcurve_correct_bezpart(), copy_v2_v2(), findzero(), interp_v2_v2v2(), next, blender::meshintersect::prev(), sub_v2_v2v2(), t, and BezTriple::vec.

Referenced by subdivide_nonauto_handles(), and blender::bke::tests::TEST().

◆ BKE_fcurve_blend_read_data()

void BKE_fcurve_blend_read_data ( BlendDataReader reader,
ListBase fcurves 
)

◆ BKE_fcurve_blend_read_expand()

void BKE_fcurve_blend_read_expand ( BlendExpander expander,
ListBase fcurves 
)

◆ BKE_fcurve_blend_read_lib()

void BKE_fcurve_blend_read_lib ( BlendLibReader reader,
ID id,
ListBase fcurves 
)

◆ BKE_fcurve_blend_write()

void BKE_fcurve_blend_write ( BlendWriter writer,
ListBase fcurves 
)

◆ BKE_fcurve_calc_bounds()

bool BKE_fcurve_calc_bounds ( struct FCurve fcu,
float xmin,
float xmax,
float ymin,
float ymax,
bool  do_sel_only,
bool  include_handles 
)

◆ BKE_fcurve_calc_range()

bool BKE_fcurve_calc_range ( struct FCurve fcu,
float min,
float max,
bool  do_sel_only,
bool  do_min_length 
)

Calculate the extents of F-Curve's keyframes.

Definition at line 754 of file fcurve.c.

References FCurve::bezt, BLI_assert, FCurve::fpt, get_fcurve_end_keyframes(), max, max_ff(), min, min_ff(), NULL, FCurve::totvert, FPoint::vec, and BezTriple::vec.

Referenced by calc_action_range(), draw_fcurve_curve(), and get_keyframe_extents().

◆ BKE_fcurve_copy()

FCurve* BKE_fcurve_copy ( const FCurve fcu)

◆ BKE_fcurve_correct_bezpart()

void BKE_fcurve_correct_bezpart ( const float  v1[2],
float  v2[2],
float  v3[2],
const float  v4[2] 
)

The length of each handle is not allowed to be more than the horizontal distance between (v1-v4). This is to prevent curve loops.

This function is very similar to BKE_curve_correct_bezpart(), but allows a steeper tangent for more snappy animations. This is not desired for other areas in which curves are used, though.

Definition at line 1410 of file fcurve.c.

References fabsf, len, v1, and v2.

Referenced by BKE_fcurve_bezt_subdivide_handles(), draw_fcurve_curve_bezts(), fcurve_eval_keyframes_interpolate(), and normalization_factor_get().

◆ BKE_fcurve_create()

FCurve* BKE_fcurve_create ( void  )

◆ BKE_fcurve_delete_key()

void BKE_fcurve_delete_key ( struct FCurve fcu,
int  index 
)

◆ BKE_fcurve_delete_keys_all()

void BKE_fcurve_delete_keys_all ( struct FCurve fcu)

Delete all keyframes from an F-curve.

Definition at line 1719 of file fcurve.c.

References fcurve_bezt_free().

Referenced by clean_fcurve(), and paste_animedit_keys_fcurve().

◆ BKE_fcurve_delete_keys_selected()

bool BKE_fcurve_delete_keys_selected ( struct FCurve fcu)

◆ BKE_fcurve_find()

FCurve* BKE_fcurve_find ( ListBase list,
const char  rna_path[],
int  array_index 
)

◆ BKE_fcurve_find_by_rna()

FCurve* BKE_fcurve_find_by_rna ( struct PointerRNA ptr,
struct PropertyRNA prop,
int  rnaindex,
struct AnimData **  r_adt,
struct bAction **  r_action,
bool r_driven,
bool r_special 
)

Find an f-curve based on an rna property.

Definition at line 380 of file fcurve.c.

References BKE_fcurve_find_by_rna_context_ui(), NULL, and ptr.

Referenced by RNA_property_animated().

◆ BKE_fcurve_find_by_rna_context_ui()

FCurve* BKE_fcurve_find_by_rna_context_ui ( bContext UNUSEDC,
const PointerRNA ptr,
PropertyRNA prop,
int  rnaindex,
AnimData **  r_animdata,
bAction **  r_action,
bool r_driven,
bool r_special 
)

◆ BKE_fcurve_foreach_id()

void BKE_fcurve_foreach_id ( struct FCurve fcu,
struct LibraryForeachIDData data 
)

◆ BKE_fcurve_free()

void BKE_fcurve_free ( struct FCurve fcu)

◆ BKE_fcurve_get_cycle_type()

eFCU_Cycle_Type BKE_fcurve_get_cycle_type ( struct FCurve fcu)

◆ BKE_fcurve_handles_recalc()

void BKE_fcurve_handles_recalc ( struct FCurve fcu)

◆ BKE_fcurve_handles_recalc_ex()

void BKE_fcurve_handles_recalc_ex ( struct FCurve fcu,
eBezTriple_Flag  handle_sel_flag 
)

Variant of BKE_fcurve_handles_recalc() that allows calculating based on a different select flag.

Parameters
handle_sel_flagThe flag (bezt.f1/2/3) value to use to determine selection. Usually SELECT, but may want to use a different one at times (if caller does not operate on selection).

Definition at line 1220 of file fcurve.c.

References Freestyle::a, BezTriple::auto_handle_type, FCurve::auto_smoothing, FCurve::bezt, BEZT_IS_AUTOH, BKE_fcurve_is_cyclic(), BKE_nurb_handle_calc_ex(), BKE_nurb_handle_smooth_fcurve(), cycle_offset_triple(), ELEM, FCurve::extend, FCURVE_EXTRAPOLATE_CONSTANT, FCURVE_SMOOTH_NONE, HD_AUTOTYPE_LOCKED_FINAL, HD_AUTOTYPE_NORMAL, next, NULL, blender::meshintersect::prev(), FCurve::totvert, and BezTriple::vec.

Referenced by action_flip_pchan(), BKE_fcurve_handles_recalc(), and testhandles_fcurve().

◆ BKE_fcurve_is_cyclic()

bool BKE_fcurve_is_cyclic ( struct FCurve fcu)

Checks if the F-Curve has a Cycles modifier with simple settings that warrant transition smoothing.

Definition at line 1192 of file fcurve.c.

References BKE_fcurve_get_cycle_type(), and FCU_CYCLE_NONE.

Referenced by ANIM_fmodifiers_paste_from_buf(), BKE_fcurve_handles_recalc_ex(), and fcurve_to_keylist().

◆ BKE_fcurve_is_empty()

bool BKE_fcurve_is_empty ( struct FCurve fcu)

◆ BKE_fcurve_is_keyframable()

bool BKE_fcurve_is_keyframable ( struct FCurve fcu)

Can keyframes be added to F-Curve? Keyframes can only be added if they are already visible.

Definition at line 968 of file fcurve.c.

References BKE_fcurve_are_keyframes_usable(), and BKE_fcurve_is_protected().

Referenced by graphkeys_click_insert_exec(), graphop_editable_keyframes_poll(), and insert_keyframe_value().

◆ BKE_fcurve_is_protected()

bool BKE_fcurve_is_protected ( FCurve fcu)

◆ BKE_fcurve_iter_step()

FCurve* BKE_fcurve_iter_step ( struct FCurve fcu_iter,
const char  rna_path[] 
)

Quick way to loop over all f-curves of a given 'path'.

Definition at line 277 of file fcurve.c.

References ELEM, FCurve::next, NULL, FCurve::rna_path, and STREQ.

Referenced by ANIM_remove_driver().

◆ BKE_fcurve_keyframe_move_value_with_handles()

void BKE_fcurve_keyframe_move_value_with_handles ( struct BezTriple keyframe,
float  new_value 
)

Move the indexed keyframe to the given value, and move the handles with it to ensure the slope remains the same.

Definition at line 891 of file fcurve.c.

References BezTriple::vec.

Referenced by euler_filter_multi_channel(), and blender::bke::tests::TEST().

◆ BKE_fcurves_calc_keyed_frames()

float* BKE_fcurves_calc_keyed_frames ( FCurve **  fcurve_array,
int  fcurve_array_len,
int *  r_frames_len 
)

Definition at line 836 of file fcurve.c.

References BKE_fcurves_calc_keyed_frames_ex().

Referenced by action_flip_pchan().

◆ BKE_fcurves_calc_keyed_frames_ex()

float* BKE_fcurves_calc_keyed_frames_ex ( struct FCurve **  fcurve_array,
int  fcurve_array_len,
float  interval,
int *  r_frames_len 
)

Return an array of keyed frames, rounded to interval.

Parameters
intervalSet to 1.0 to round to whole keyframes, 0.5 for in-between key-frames, etc.
Note
An interval of zero could be supported (this implies no rounding at all), however this risks very small differences in float values being treated as separate keyframes.

Definition at line 801 of file fcurve.c.

References FCurve::bezt, BLI_assert, BLI_gset_add(), BLI_gset_free(), BLI_gset_int_new(), BLI_gset_len(), BLI_gsetIterator_getKey(), BLI_sortutil_cmp_float(), double(), GSET_ITER_INDEX, max_ff(), MEM_mallocN, NULL, POINTER_AS_INT, POINTER_FROM_INT, FCurve::totvert, and BezTriple::vec.

Referenced by BKE_fcurves_calc_keyed_frames().

◆ BKE_fcurves_copy()

void BKE_fcurves_copy ( ListBase dst,
ListBase src 
)

◆ BKE_fcurves_filter()

int BKE_fcurves_filter ( ListBase dst,
ListBase src,
const char *  dataPrefix,
const char *  dataName 
)

Get list of LinkData's containing pointers to the F-Curves which control the types of data indicated. e.g. numMatches = BKE_fcurves_filter(matches, &act->curves, "pose.bones[", "MyFancyBone");

Lists:

Parameters
dstlist of LinkData's matching the criteria returned. List must be freed after use, and is assumed to be empty when passed.
srclist of F-Curves to search through Filters:
dataPrefixi.e. pose.bones[ or nodes[.
dataNamename of entity within "" immediately following the prefix.

Definition at line 297 of file fcurve.c.

References BLI_addtail(), BLI_str_quoted_substr(), LinkData::data, ELEM, MEM_callocN, FCurve::next, NULL, FCurve::rna_path, src, and STREQ.

Referenced by updateDuplicateActionConstraintSettings().

◆ BKE_fcurves_free()

void BKE_fcurves_free ( ListBase list)

◆ BKE_fmodifiers_blend_read_data()

void BKE_fmodifiers_blend_read_data ( BlendDataReader reader,
ListBase fmodifiers,
FCurve curve 
)

◆ BKE_fmodifiers_blend_read_expand()

void BKE_fmodifiers_blend_read_expand ( BlendExpander expander,
ListBase fmodifiers 
)

◆ BKE_fmodifiers_blend_read_lib()

void BKE_fmodifiers_blend_read_lib ( BlendLibReader reader,
ID id,
ListBase fmodifiers 
)

Definition at line 2316 of file fcurve.c.

References BLO_read_id_address, data, FMODIFIER_TYPE_PYTHON, id, ID::lib, and LISTBASE_FOREACH.

Referenced by BKE_fcurve_blend_read_lib().

◆ BKE_fmodifiers_blend_write()

void BKE_fmodifiers_blend_write ( BlendWriter writer,
ListBase fmodifiers 
)

◆ calculate_fcurve()

float calculate_fcurve ( PathResolvedRNA anim_rna,
FCurve fcu,
const AnimationEvalContext anim_eval_context 
)

◆ cycle_offset_triple()

static BezTriple* cycle_offset_triple ( bool  cycle,
BezTriple out,
const BezTriple in,
const BezTriple from,
const BezTriple to 
)
static

Definition at line 1201 of file fcurve.c.

References add_v3_v3(), from, NULL, usdtokens::out(), sub_v3_v3v3(), and BezTriple::vec.

Referenced by BKE_fcurve_handles_recalc_ex().

◆ evaluate_fcurve()

float evaluate_fcurve ( FCurve fcu,
float  evaltime 
)

◆ evaluate_fcurve_driver()

float evaluate_fcurve_driver ( PathResolvedRNA anim_rna,
FCurve fcu,
ChannelDriver driver_orig,
const AnimationEvalContext anim_eval_context 
)

◆ evaluate_fcurve_ex()

static float evaluate_fcurve_ex ( FCurve fcu,
float  evaltime,
float  cvalue 
)
static

◆ evaluate_fcurve_only_curve()

float evaluate_fcurve_only_curve ( FCurve fcu,
float  evaltime 
)

◆ fcurve_bezt_free()

static void fcurve_bezt_free ( FCurve fcu)
static

◆ fcurve_eval_keyframes()

static float fcurve_eval_keyframes ( FCurve fcu,
BezTriple bezts,
float  evaltime 
)
static

◆ fcurve_eval_keyframes_extrapolate()

static float fcurve_eval_keyframes_extrapolate ( FCurve fcu,
BezTriple bezts,
float  evaltime,
int  endpoint_offset,
int  direction_to_neighbor 
)
static

◆ fcurve_eval_keyframes_interpolate()

static float fcurve_eval_keyframes_interpolate ( FCurve fcu,
BezTriple bezts,
float  evaltime 
)
static

Definition at line 1777 of file fcurve.c.

References Freestyle::a, BezTriple::amplitude, BezTriple::back, berekeny(), BEZT_IPO_BACK, BEZT_IPO_BEZ, BEZT_IPO_BOUNCE, BEZT_IPO_CIRC, BEZT_IPO_CONST, BEZT_IPO_CUBIC, BEZT_IPO_EASE_IN, BEZT_IPO_EASE_IN_OUT, BEZT_IPO_EASE_OUT, BEZT_IPO_ELASTIC, BEZT_IPO_EXPO, BEZT_IPO_LIN, BEZT_IPO_QUAD, BEZT_IPO_QUART, BEZT_IPO_QUINT, BEZT_IPO_SINE, BKE_fcurve_bezt_binarysearch_index_ex(), BKE_fcurve_correct_bezpart(), BLI_easing_back_ease_in(), BLI_easing_back_ease_in_out(), BLI_easing_back_ease_out(), BLI_easing_bounce_ease_in(), BLI_easing_bounce_ease_in_out(), BLI_easing_bounce_ease_out(), BLI_easing_circ_ease_in(), BLI_easing_circ_ease_in_out(), BLI_easing_circ_ease_out(), BLI_easing_cubic_ease_in(), BLI_easing_cubic_ease_in_out(), BLI_easing_cubic_ease_out(), BLI_easing_elastic_ease_in(), BLI_easing_elastic_ease_in_out(), BLI_easing_elastic_ease_out(), BLI_easing_expo_ease_in(), BLI_easing_expo_ease_in_out(), BLI_easing_expo_ease_out(), BLI_easing_linear_ease(), BLI_easing_quad_ease_in(), BLI_easing_quad_ease_in_out(), BLI_easing_quad_ease_out(), BLI_easing_quart_ease_in(), BLI_easing_quart_ease_in_out(), BLI_easing_quart_ease_out(), BLI_easing_quint_ease_in(), BLI_easing_quint_ease_in_out(), BLI_easing_quint_ease_out(), BLI_easing_sine_ease_in(), BLI_easing_sine_ease_in_out(), BLI_easing_sine_ease_out(), BezTriple::easing, eps, evaltime, fabsf, FCURVE_DISCRETE_VALUES, findzero(), FCurve::flag, G, G_DEBUG, BezTriple::ipo, BezTriple::period, time, FCurve::totvert, v1, v2, and BezTriple::vec.

Referenced by fcurve_eval_keyframes().

◆ fcurve_eval_samples()

static float fcurve_eval_samples ( FCurve fcu,
FPoint fpts,
float  evaltime 
)
static

Definition at line 2054 of file fcurve.c.

References evaltime, fabsf, floorf, interpf(), t, FCurve::totvert, and FPoint::vec.

Referenced by evaluate_fcurve_ex().

◆ fcurve_samples_to_keyframes()

void fcurve_samples_to_keyframes ( struct FCurve fcu,
int  start,
int  end 
)

Convert baked/sampled f-curves into bezt/regular f-curves.

Definition at line 1084 of file fcurve.c.

References FCurve::bezt, BKE_fcurve_handles_recalc(), CLOG_ERROR, copy_v2_v2(), float(), FCurve::fpt, init_unbaked_bezt_data(), LOG, MEM_callocN, MEM_freeN, MEM_SAFE_FREE, NULL, FCurve::totvert, FPoint::vec, and BezTriple::vec.

Referenced by unbake_graph_curves().

◆ fcurve_samplingcb_evalcurve()

float fcurve_samplingcb_evalcurve ( FCurve fcu,
void UNUSEDdata,
float  evaltime 
)

Definition at line 1031 of file fcurve.c.

References evaltime, and evaluate_fcurve().

◆ fcurve_store_samples()

void fcurve_store_samples ( struct FCurve fcu,
void data,
int  start,
int  end,
FcuSampleFunc  sample_cb 
)

Main API function for creating a set of sampled curve data, given some callback function used to retrieve the values to store.

Definition at line 1037 of file fcurve.c.

References FCurve::bezt, CLOG_ERROR, data, ELEM, float(), FCurve::fpt, LOG, MEM_callocN, MEM_freeN, NULL, FCurve::totvert, and FPoint::vec.

Referenced by bake_graph_curves(), and fcurve_bake_modifiers().

◆ findzero()

static int findzero ( float  x,
float  q0,
float  q1,
float  q2,
float  q3,
float o 
)
static

Definition at line 1568 of file fcurve.c.

References q1, solve_cubic(), and x.

Referenced by BKE_fcurve_bezt_subdivide_handles(), and fcurve_eval_keyframes_interpolate().

◆ get_fcurve_end_keyframes()

static short get_fcurve_end_keyframes ( FCurve fcu,
BezTriple **  first,
BezTriple **  last,
const bool  do_sel_only 
)
static

◆ id_data_find_fcurve()

FCurve* id_data_find_fcurve ( ID id,
void data,
struct StructRNA type,
const char *  prop_name,
int  index,
bool r_driven 
)

High level function to get an f-curve from C without having the RNA.

If there is an action assigned to the id's AnimData, it will be searched for a matching F-curve first. Drivers are searched only if no valid action F-curve could be found.

Note
Return pointer parameter (r_driven) is optional and may be NULL.
Warning
In case no animation (from an Action) F-curve is found, returned value is always NULL. This means that this function will set r_driven to True in case a valid driver F-curve is found, but will not return said F-curve. In other words:
  • Animated with FCurve: returns the FCurve* and *r_driven = false.
  • Animated with driver: returns NULL and *r_driven = true.
  • Not animated: returns NULL and *r_driven = false.

Definition at line 201 of file fcurve.c.

References AnimData::action, BKE_animadata_fcurve_find_by_rna_path(), BKE_animdata_from_id(), data, ELEM, MEM_freeN, NULL, ptr, RNA_path_from_ID_to_property(), RNA_pointer_create(), RNA_struct_find_property(), and type.

Referenced by BKE_tracking_track_get_weight_for_marker(), do_versions_sequencer_speed_effect_recursive(), draw_seq_fcurve_overlay(), draw_seq_waveform_overlay(), libmv_tracks_new(), retrieve_stab_animation(), retrieve_track_weight_animation(), seq_effect_speed_speed_factor_curve_get(), seq_render_effect_strip_impl(), sound_update_animation_flags(), and sound_update_animation_flags_fn().

◆ init_unbaked_bezt_data()

static void init_unbaked_bezt_data ( BezTriple bezt)
static

◆ solve_cubic()

static int solve_cubic ( double  c0,
double  c1,
double  c2,
double  c3,
float o 
)
static

Find roots of cubic equation (c0 x^3 + c1 x^2 + c2 x + c3)

Returns
number of roots in o.
Note
it is up to the caller to allocate enough memory for o.

Definition at line 1456 of file fcurve.c.

References Freestyle::a, KDL::acos(), usdtokens::b(), Freestyle::c, KDL::cos(), float(), SMALL, sqrt(), sqrt3d(), and t.

Referenced by findzero().

◆ sort_time_fcurve()

void sort_time_fcurve ( struct FCurve fcu)

This function sorts BezTriples so that they are arranged in chronological order, as tools working on F-Curves expect that the BezTriples are in order.

Definition at line 1327 of file fcurve.c.

References Freestyle::a, FCurve::bezt, CLAMP_MAX, CLAMP_MIN, NULL, SWAP, swap_v2_v2(), FCurve::totvert, and BezTriple::vec.

Referenced by ANIM_animdata_update(), graphedit_activekey_update_cb(), and remake_graph_transdata().

◆ test_time_fcurve()

bool test_time_fcurve ( struct FCurve fcu)

This function tests if any BezTriples are out of order, thus requiring a sort.

Definition at line 1369 of file fcurve.c.

References Freestyle::a, FCurve::bezt, FCurve::fpt, NULL, FCurve::totvert, FPoint::vec, and BezTriple::vec.

◆ testhandles_fcurve()

void testhandles_fcurve ( struct FCurve fcu,
eBezTriple_Flag  sel_flag,
bool  use_handle 
)

Update handles, making sure the handle-types are valid (e.g. correctly deduced from an "Auto" type), and recalculating their position vectors. Use when something has changed handle positions.

Parameters
sel_flagThe flag (bezt.f1/2/3) value to use to determine selection. Usually SELECT, but may want to use a different one at times (if caller does not operate on selection).
use_handleCheck selection state of individual handles, otherwise always update both handles if the key is selected.

Definition at line 1308 of file fcurve.c.

References Freestyle::a, FCurve::bezt, BKE_fcurve_handles_recalc_ex(), BKE_nurb_bezt_handle_test(), ELEM, and NULL.

Referenced by posttrans_fcurve_clean(), and remake_graph_transdata().

Variable Documentation

◆ LOG

CLG_LogRef LOG = {"bke.fcurve"}
static