Blender
V3.3
|
#include <float.h>
#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "CLG_log.h"
#include "DNA_anim_types.h"
#include "DNA_screen_types.h"
#include "BLT_translation.h"
#include "BLI_blenlib.h"
#include "BLI_ghash.h"
#include "BLI_math.h"
#include "BLI_noise.h"
#include "BLI_utildefines.h"
#include "BKE_fcurve.h"
#include "BKE_idprop.h"
Go to the source code of this file.
Classes | |
struct | tFCMED_Cycles |
Functions | |
F-Curve Modifier Public API | |
FModifier * | add_fmodifier (ListBase *modifiers, int type, FCurve *owner_fcu) |
FModifier * | copy_fmodifier (const FModifier *src) |
void | copy_fmodifiers (ListBase *dst, const ListBase *src) |
bool | remove_fmodifier (ListBase *modifiers, FModifier *fcm) |
void | free_fmodifiers (ListBase *modifiers) |
FModifier * | find_active_fmodifier (ListBase *modifiers) |
void | set_active_fmodifier (ListBase *modifiers, FModifier *fcm) |
bool | list_has_suitable_fmodifier (ListBase *modifiers, int mtype, short acttype) |
uint | evaluate_fmodifiers_storage_size_per_modifier (ListBase *modifiers) |
static float | eval_fmodifier_influence (FModifier *fcm, float evaltime) |
float | evaluate_time_fmodifiers (FModifiersStackStorage *storage, ListBase *modifiers, FCurve *fcu, float cvalue, float evaltime) |
void | evaluate_value_fmodifiers (FModifiersStackStorage *storage, ListBase *modifiers, FCurve *fcu, float *cvalue, float evaltime) |
void | fcurve_bake_modifiers (FCurve *fcu, int start, int end) |
Variables | |
static CLG_LogRef | LOG = {"bke.fmodifier"} |
F-Curve Modifier Type API | |
all of the f-curve modifier api functions use #fmodifiertypeinfo structs to carry out and operations that involve f-curve modifier specific code. | |
static FModifierTypeInfo * | fmodifiersTypeInfo [FMODIFIER_NUM_TYPES] |
static short | FMI_INIT = 1 |
static void | fmods_init_typeinfo (void) |
const FModifierTypeInfo * | get_fmodifier_typeinfo (const int type) |
const FModifierTypeInfo * | fmodifier_get_typeinfo (const FModifier *fcm) |
#define BINARYSEARCH_FRAMEEQ_THRESH 0.0001f |
Definition at line 492 of file fmodifier.c.
typedef struct tFCMED_Cycles tFCMED_Cycles |
Add a new F-Curve Modifier to the given F-Curve of a certain type.
Definition at line 1087 of file fmodifier.c.
References BKE_fcurve_handles_recalc(), BLI_addtail(), BLI_listbase_is_single(), CLOG_STR_ERROR, FModifier::curve, FModifier::data, ELEM, ListBase::first, FModifier::flag, FMODIFIER_FLAG_ACTIVE, FMODIFIER_TYPE_CYCLES, get_fmodifier_typeinfo(), FModifier::influence, LOG, MEM_callocN, FModifierTypeInfo::new_data, NULL, FModifierTypeInfo::size, FModifierTypeInfo::structName, type, FModifier::type, FModifier::ui_expand_flag, and UI_PANEL_DATA_EXPAND_ROOT.
Referenced by alloc_driver_fcurve(), ED_object_parent_set(), followpath_path_animate_exec(), graph_fmodifier_add_exec(), icu_to_fcurves(), make_new_fcurve_cyclic(), nla_fmodifier_add_exec(), setexpo_action_keys(), and setexpo_graph_keys().
int BKE_fcm_envelope_find_index | ( | FCM_EnvelopeData | array[], |
float | frame, | ||
int | arraylen, | ||
bool * | r_exists | ||
) |
Definition at line 494 of file fmodifier.c.
References BINARYSEARCH_FRAMEEQ_THRESH, CLOG_ERROR, CLOG_WARN, IS_EQT, LOG, NULL, and time.
Definition at line 1137 of file fmodifier.c.
References FModifierTypeInfo::copy_data, FModifier::curve, FModifier::data, fmodifier_get_typeinfo(), MEM_dupallocN, FModifier::next, NULL, FModifier::prev, and src.
Duplicate all of the F-Modifiers in the Modifier stacks.
Definition at line 1164 of file fmodifier.c.
References BLI_duplicatelist(), BLI_listbase_clear(), FModifierTypeInfo::copy_data, FModifier::curve, FModifier::data, ELEM, ListBase::first, fmodifier_get_typeinfo(), MEM_dupallocN, FModifier::next, NULL, and src.
Referenced by ANIM_fmodifiers_copy_to_buf(), ANIM_paste_driver(), BKE_fcurve_copy(), and BKE_nlastrip_copy().
Helper function - calculate influence of FModifier.
Definition at line 1350 of file fmodifier.c.
References Freestyle::a, usdtokens::b(), FModifier::blendin, FModifier::blendout, FModifier::efra, evaltime, FModifier::flag, FMODIFIER_FLAG_RANGERESTRICT, FMODIFIER_FLAG_USEINFLUENCE, FModifier::influence, NULL, and FModifier::sfra.
Referenced by evaluate_time_fmodifiers(), and evaluate_value_fmodifiers().
Definition at line 1325 of file fmodifier.c.
References ELEM, ListBase::first, fmodifier_get_typeinfo(), LISTBASE_FOREACH, MAX2, NULL, and FModifierTypeInfo::storage_size.
Referenced by evaluate_fcurve_ex(), and nlasnapshot_from_action().
float evaluate_time_fmodifiers | ( | FModifiersStackStorage * | storage, |
ListBase * | modifiers, | ||
struct FCurve * | fcu, | ||
float | cvalue, | ||
float | evaltime | ||
) |
Evaluate time modifications imposed by some F-Curve Modifiers.
fcu | Can be NULL. |
Definition at line 1395 of file fmodifier.c.
References FModifiersStackStorage::buffer, FModifier::efra, ELEM, eval_fmodifier_influence(), evaltime, FModifierTypeInfo::evaluate_modifier_time, FCURVE_MOD_OFF, FModifier::flag, FCurve::flag, FMODIFIER_FLAG_DISABLED, FMODIFIER_FLAG_MUTED, FMODIFIER_FLAG_RANGERESTRICT, fmodifier_get_typeinfo(), interpf(), ListBase::last, FModifiersStackStorage::modifier_count, NULL, POINTER_OFFSET, FModifier::prev, FModifier::sfra, and FModifiersStackStorage::size_per_modifier.
Referenced by evaluate_fcurve_ex(), and nlasnapshot_from_action().
void evaluate_value_fmodifiers | ( | FModifiersStackStorage * | storage, |
ListBase * | modifiers, | ||
struct FCurve * | fcu, | ||
float * | cvalue, | ||
float | evaltime | ||
) |
Evaluates the given set of F-Curve Modifiers using the given data Should only be called after evaluate_time_fmodifiers() has been called.
Definition at line 1452 of file fmodifier.c.
References FModifiersStackStorage::buffer, FModifier::efra, ELEM, eval_fmodifier_influence(), evaltime, FModifierTypeInfo::evaluate_modifier, FCURVE_MOD_OFF, ListBase::first, FModifier::flag, FCurve::flag, FMODIFIER_FLAG_DISABLED, FMODIFIER_FLAG_MUTED, FMODIFIER_FLAG_RANGERESTRICT, fmodifier_get_typeinfo(), interpf(), FModifier::next, NULL, POINTER_OFFSET, FModifier::sfra, and FModifiersStackStorage::size_per_modifier.
Referenced by evaluate_fcurve_ex(), and nlasnapshot_from_action().
|
static |
Definition at line 760 of file fmodifier.c.
References tFCMED_Cycles::cycyofs.
Definition at line 600 of file fmodifier.c.
References data, and FCM_EXTRAPOLATE_CYCLIC.
|
static |
Definition at line 608 of file fmodifier.c.
References FCurve::bezt, BLI_assert, ceil(), tFCMED_Cycles::cycyofs, data, FModifier::data, ELEM, evaltime, FCM_EXTRAPOLATE_CYCLIC_OFFSET, FCM_EXTRAPOLATE_MIRROR, FModifier::flag, float(), blender::math::floor(), FMODIFIER_FLAG_DISABLED, FCurve::fpt, if(), NULL, FModifier::prev, FCurve::totvert, FPoint::vec, and BezTriple::vec.
Definition at line 386 of file fmodifier.c.
References FModifier::data, FMod_Envelope::data, MEM_dupallocN, and src.
|
static |
Definition at line 416 of file fmodifier.c.
References Freestyle::a, FModifier::data, FMod_Envelope::data, KDL::diff(), evaltime, if(), max, FCM_EnvelopeData::max, FMod_Envelope::max, FMod_Envelope::midval, min, FCM_EnvelopeData::min, FMod_Envelope::min, NULL, FCM_EnvelopeData::time, and FMod_Envelope::totvert.
Definition at line 376 of file fmodifier.c.
References FModifier::data, FMod_Envelope::data, if(), and MEM_freeN.
Definition at line 397 of file fmodifier.c.
References FMod_Envelope::max, and FMod_Envelope::min.
Definition at line 406 of file fmodifier.c.
References FModifier::data, FMod_Envelope::data, and if().
|
static |
Definition at line 278 of file fmodifier.c.
References CLOG_ERROR, KDL::cos(), data, FModifier::data, double(), evaltime, FCM_GENERATOR_ADDITIVE, FCM_GENERATOR_FN_COS, FCM_GENERATOR_FN_LN, FCM_GENERATOR_FN_SIN, FCM_GENERATOR_FN_SINC, FCM_GENERATOR_FN_SQRT, FCM_GENERATOR_FN_TAN, float(), IS_EQ, log(), LOG, M_PI, M_PI_2, NULL, KDL::sin(), sinc(), sqrt(), KDL::tan(), and v.
Definition at line 256 of file fmodifier.c.
References data.
Definition at line 101 of file fmodifier.c.
References FMod_Generator::coefficients, FModifier::data, MEM_dupallocN, and src.
|
static |
Definition at line 154 of file fmodifier.c.
References data, FModifier::data, evaltime, FCM_GENERATOR_ADDITIVE, FCM_GENERATOR_POLYNOMIAL, FCM_GENERATOR_POLYNOMIAL_FACTORISED, MEM_callocN, MEM_freeN, and NULL.
Definition at line 91 of file fmodifier.c.
References data, FModifier::data, if(), and MEM_freeN.
Definition at line 112 of file fmodifier.c.
References data, and MEM_callocN.
Definition at line 125 of file fmodifier.c.
References data, FModifier::data, FCM_GENERATOR_POLYNOMIAL, FCM_GENERATOR_POLYNOMIAL_FACTORISED, and MEM_recallocN.
|
static |
Definition at line 928 of file fmodifier.c.
References data, FModifier::data, FCM_LIMIT_YMAX, FCM_LIMIT_YMIN, and if().
|
static |
Definition at line 908 of file fmodifier.c.
References data, FModifier::data, evaltime, FCM_LIMIT_XMAX, FCM_LIMIT_XMIN, and if().
|
static |
Definition at line 801 of file fmodifier.c.
References BLI_noise_turbulence(), data, FModifier::data, evaltime, FCM_NOISE_MODIF_ADD, FCM_NOISE_MODIF_MULTIPLY, FCM_NOISE_MODIF_REPLACE, FCM_NOISE_MODIF_SUBTRACT, and noise().
Definition at line 788 of file fmodifier.c.
References data, and FCM_NOISE_MODIF_REPLACE.
Definition at line 867 of file fmodifier.c.
References FModifier::data, IDP_CopyProperty(), FMod_Python::prop, and src.
|
static |
Definition at line 875 of file fmodifier.c.
Definition at line 850 of file fmodifier.c.
References data, FModifier::data, and IDP_FreeProperty().
Definition at line 858 of file fmodifier.c.
References data, IDP_GROUP, and MEM_callocN.
Definition at line 964 of file fmodifier.c.
References data.
|
static |
Definition at line 973 of file fmodifier.c.
References data, FModifier::data, evaltime, FCM_STEPPED_NO_AFTER, FCM_STEPPED_NO_BEFORE, and if().
Bake modifiers for given F-Curve to curve sample data, in the frame range defined by start and end (inclusive).
Definition at line 1500 of file fmodifier.c.
References CLOG_ERROR, FCurve::driver, ELEM, fcurve_samplingcb_evalcurve(), fcurve_store_samples(), ListBase::first, free_fmodifiers(), LOG, FCurve::modifiers, and NULL.
Find the active F-Modifier.
Definition at line 1246 of file fmodifier.c.
References ELEM, ListBase::first, FModifier::flag, FMODIFIER_FLAG_ACTIVE, FModifier::next, and NULL.
Referenced by ANIM_fmodifiers_copy_to_buf(), and draw_fcurve().
const FModifierTypeInfo* fmodifier_get_typeinfo | ( | const FModifier * | fcm | ) |
Definition at line 1071 of file fmodifier.c.
References get_fmodifier_typeinfo(), NULL, and FModifier::type.
Referenced by copy_fmodifier(), copy_fmodifiers(), evaluate_fmodifiers_storage_size_per_modifier(), evaluate_time_fmodifiers(), evaluate_value_fmodifiers(), list_has_suitable_fmodifier(), and remove_fmodifier().
This function only gets called when FMI_INIT is non-zero.
Definition at line 1037 of file fmodifier.c.
References FMI_CYCLES, FMI_ENVELOPE, FMI_FN_GENERATOR, FMI_GENERATOR, FMI_LIMITS, FMI_NOISE, FMI_PYTHON, FMI_STEPPED, fmodifiersTypeInfo, and NULL.
Referenced by get_fmodifier_typeinfo().
Remove all of a given F-Curve's modifiers.
Definition at line 1230 of file fmodifier.c.
References ListBase::first, FModifier::next, NULL, and remove_fmodifier().
Referenced by ANIM_fmodifiers_copybuf_free(), ANIM_fmodifiers_paste_from_buf(), BKE_fcurve_free(), BKE_nlastrip_free(), and fcurve_bake_modifiers().
const FModifierTypeInfo* get_fmodifier_typeinfo | ( | int | type | ) |
This function should be used for getting the appropriate type-info when only a F-Curve modifier type is known.
Definition at line 1052 of file fmodifier.c.
References CLOG_ERROR, FMI_INIT, FMODIFIER_NUM_TYPES, FMODIFIER_TYPE_NULL, fmodifiersTypeInfo, fmods_init_typeinfo(), LOG, NULL, and type.
Referenced by add_fmodifier(), fmodifier_get_typeinfo(), fmodifier_panel_register(), fmodifier_reorder(), graph_fmodifier_itemf(), graph_fmodifier_panel_id(), nla_fmodifier_itemf(), and nla_fmodifier_panel_id().
Do we have any modifiers which match certain criteria.
mtype | Type of modifier (if 0, doesn't matter). |
acttype | Type of action to perform (if -1, doesn't matter). |
Definition at line 1286 of file fmodifier.c.
References FModifierTypeInfo::acttype, ELEM, ListBase::first, fmodifier_get_typeinfo(), FModifier::next, NULL, and FModifier::type.
Referenced by BKE_fcurve_is_empty(), setexpo_action_keys(), and setexpo_graph_keys().
Remove and free the given F-Modifier from the given stack.
Definition at line 1190 of file fmodifier.c.
References BKE_fcurve_handles_recalc(), BLI_freelinkN(), CLOG_STR_ERROR, FModifier::curve, FModifier::data, fmodifier_get_typeinfo(), FMODIFIER_TYPE_CYCLES, FModifierTypeInfo::free_data, if(), LOG, MEM_freeN, NULL, and FModifier::type.
Referenced by delete_fmodifier_cb(), free_fmodifiers(), setexpo_action_keys(), and setexpo_graph_keys().
Set the active F-Modifier.
Definition at line 1266 of file fmodifier.c.
References ELEM, ListBase::first, FModifier::flag, FMODIFIER_FLAG_ACTIVE, FModifier::next, and NULL.
Referenced by graph_fmodifier_add_exec(), and nla_fmodifier_add_exec().
Definition at line 269 of file fmodifier.c.
References fabs(), M_PI, KDL::sin(), and x.
Referenced by fcm_fn_generator_evaluate().
|
static |
Definition at line 770 of file fmodifier.c.
Referenced by fmods_init_typeinfo().
|
static |
Definition at line 471 of file fmodifier.c.
Referenced by fmods_init_typeinfo().
|
static |
Definition at line 358 of file fmodifier.c.
Referenced by fmods_init_typeinfo().
|
static |
Definition at line 228 of file fmodifier.c.
Referenced by fmods_init_typeinfo().
|
static |
Definition at line 1034 of file fmodifier.c.
Referenced by get_fmodifier_typeinfo().
|
static |
Definition at line 945 of file fmodifier.c.
Referenced by fmods_init_typeinfo().
|
static |
Definition at line 832 of file fmodifier.c.
Referenced by fmods_init_typeinfo().
|
static |
Definition at line 890 of file fmodifier.c.
Referenced by fmods_init_typeinfo().
|
static |
Definition at line 1006 of file fmodifier.c.
Referenced by fmods_init_typeinfo().
|
static |
Definition at line 1033 of file fmodifier.c.
Referenced by fmods_init_typeinfo(), and get_fmodifier_typeinfo().
|
static |
Definition at line 32 of file fmodifier.c.
Referenced by add_fmodifier(), BKE_fcm_envelope_find_index(), fcm_fn_generator_evaluate(), fcurve_bake_modifiers(), get_fmodifier_typeinfo(), and remove_fmodifier().