83 for (bezt = fcu->
bezt, i = 0; i < fcu->totvert; bezt++, i++) {
91 if ((ok = key_ok(ked, bezt))) {
99 if (key_cb(ked, bezt)) {
106 for (bezt = fcu->
bezt, i = 0; i < fcu->totvert; bezt++, i++) {
114 if (key_cb(ked, bezt)) {
212 dummychan.
data = &dummybase;
213 dummychan.
id = &ob->
id;
217 ac.
data = &dummychan;
226 for (ale = anim_data.
first; ale; ale = ale->
next) {
261 dummychan.
data = sce;
262 dummychan.
id = &sce->
id;
266 ac.
data = &dummychan;
275 for (ale = anim_data.
first; ale; ale = ale->
next) {
309 for (ale = anim_data.
first; ale; ale = ale->
next) {
446 for (ale = anim_data.
first; ale; ale = ale->
next) {
470 for (ale = anim_data.
first; ale; ale = ale->
next) {
491 #define KEYFRAME_OK_CHECKS(check) \
493 CHECK_TYPE(ok, short); \
495 ok |= KEYFRAME_OK_KEY; \
497 if (ked && (ked->iterflags & KEYFRAME_ITER_INCL_HANDLES)) { \
499 const bool handles_visible = ((ked->iterflags & KEYFRAME_ITER_HANDLES_DEFAULT_INVISIBLE) ? \
500 (BEZT_ISSEL_ANY(bezt)) : \
502 if (handles_visible) { \
504 ok |= KEYFRAME_OK_H1; \
507 ok |= KEYFRAME_OK_H2; \
521 #define KEY_CHECK_OK(_index) IS_EQF(bezt->vec[_index][0], ked->f1)
534 #define KEY_CHECK_OK(_index) ((bezt->vec[_index][0] > ked->f1) && (bezt->vec[_index][0] < ked->f2))
562 #define KEY_CHECK_OK(_index) IS_EQF(bezt->vec[_index][1], ked->f1)
575 #define KEY_CHECK_OK(_index) ((bezt->vec[_index][1] > ked->f1) && (bezt->vec[_index][1] < ked->f2))
589 #define KEY_CHECK_OK(_index) BLI_rctf_isect_pt_v(ked->data, bezt->vec[_index])
621 #define KEY_CHECK_OK(_index) keyframe_region_lasso_test(ked->data, bezt->vec[_index])
644 data->rectf_scaled->xmin = ked->
f1;
645 data->rectf_scaled->xmax = ked->
f2;
649 pt[0] = bezt->
vec[1][0];
666 xy_view[0] = xy_view[0] - data_circle->
mval[0];
667 xy_view[1] = xy_view[1] - data_circle->
mval[1];
680 #define KEY_CHECK_OK(_index) keyframe_region_circle_test(ked->data, bezt->vec[_index])
703 data->rectf_scaled->xmin = ked->
f1;
704 data->rectf_scaled->xmax = ked->
f2;
708 pt[0] = bezt->
vec[1][0];
765 ked->
f1 += bezt->
vec[1][0];
770 ked->
f2 += bezt->
vec[1][1];
824 bezt->
vec[1][0] = (
floorf(bezt->
vec[1][0] / secf + 0.5f) * secf);
852 bezt->
vec[0][1] = bezt->
vec[2][1] = bezt->
vec[1][1];
868 bezt->
vec[1][0] = ked->
f1;
877 bezt->
vec[1][1] = ked->
f1;
909 for (
int i = 0; i < 3; i++) {
921 for (
int i = 0; i < 3; i++) {
1016 #define ENSURE_HANDLES_MATCH(bezt) \
1017 if (bezt->h1 != bezt->h2) { \
1018 if (ELEM(bezt->h1, HD_ALIGN, HD_AUTO, HD_AUTO_ANIM)) { \
1019 bezt->h1 = HD_FREE; \
1021 if (ELEM(bezt->h2, HD_ALIGN, HD_AUTO, HD_AUTO_ANIM)) { \
1022 bezt->h2 = HD_FREE; \
1273 BLI_assert_msg(idx == 0 || idx == 2,
"handle_flatten() expects a handle index");
1280 BLI_assert_msg(idx == 0 || idx == 2,
"handle_set_length() expects a handle index");
1282 float handle_direction[2];
1290 const float handle_length,
1295 const float flat_direction_left[2] = {-handle_length, 0.0f};
1296 const float flat_direction_right[2] = {handle_length, 0.0f};
1299 for (bezt = fcu->
bezt, i = 0; i < fcu->totvert; bezt++, i++) {
1561 switch (selectmode) {
1650 else if (i == (fcu->
totvert - 1)) {
typedef float(TangentPoint)[2]
void BKE_fcurve_handles_recalc(struct FCurve *fcu)
float BKE_nla_tweakedit_remap(struct AnimData *adt, float cframe, short mode)
#define BLI_assert_msg(a, msg)
bool BLI_lasso_is_point_inside(const int mcoords[][2], unsigned int mcoords_len, int sx, int sy, int error_value)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void swap_v3_v3(float a[3], float b[3])
MINLINE float normalize_v2_length(float r[2], float unit_scale)
bool BLI_rctf_isect_pt_v(const struct rctf *rect, const float xy[2])
void BLI_rctf_transform_pt_v(const rctf *dst, const rctf *src, float xy_dst[2], const float xy_src[2])
#define BEZT_SEL_ALL(bezt)
#define BEZT_ISSEL_ANY(bezt)
#define BEZT_DESEL_ALL(bezt)
Object is a sort of wrapper for general info.
#define ANIM_UPDATE_DEFAULT
@ ANIMFILTER_DATA_VISIBLE
void(* FcuEditFunc)(struct FCurve *fcu)
@ KEYFRAME_ITER_HANDLES_DEFAULT_INVISIBLE
@ KEYFRAME_ITER_INCL_HANDLES
short(* KeyframeEditFunc)(KeyframeEditData *ked, struct BezTriple *bezt)
NSNotificationCenter * center
Read Guarded memory(de)allocation.
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)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, eAnimFilter_Flags filter_mode, void *data, eAnimCont_Types datatype)
int ED_markers_find_nearest_marker_time(ListBase *markers, float x)
DO_INLINE void filter(lfVector *V, fmatrix3x3 *S)
static short set_bezier_vector(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short ok_bezier_channel_circle(KeyframeEditData *ked, BezTriple *bezt)
static short summary_keyframes_loop(KeyframeEditData *ked, bAnimContext *ac, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
static short bezier_isfree(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short mirror_bezier_xaxis(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static void mirror_bezier_xaxis_ex(BezTriple *bezt, const float center)
static short set_bezt_cubic(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_bezt_bounce(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short ok_bezier_framerange(KeyframeEditData *ked, BezTriple *bezt)
static short set_easingtype_easeinout(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_bezt_quart(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
KeyframeEditFunc ANIM_editkeyframes_mirror(short mode)
short bezt_selmap_flush(KeyframeEditData *ked, BezTriple *bezt)
#define KEY_CHECK_OK(_index)
static short set_keytype_moving_hold(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
KeyframeEditFunc ANIM_editkeyframes_keytype(short mode)
#define ENSURE_HANDLES_MATCH(bezt)
void ANIM_editkeyframes_refresh(bAnimContext *ac)
KeyframeEditFunc ANIM_editkeyframes_easing(short mode)
static short set_bezt_back(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_bezier_align(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_keytype_keyframe(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short snap_bezier_horizontal(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short select_bezier_subtract(KeyframeEditData *ked, BezTriple *bezt)
static short snap_bezier_value(KeyframeEditData *ked, BezTriple *bezt)
KeyframeEditFunc ANIM_editkeyframes_ipo(short mode)
static short mirror_bezier_value(KeyframeEditData *ked, BezTriple *bezt)
static short selmap_build_bezier_more(KeyframeEditData *ked, BezTriple *bezt)
bool keyframe_region_lasso_test(const KeyframeEdit_LassoData *data_lasso, const float xy[2])
static short ok_bezier_region_circle(KeyframeEditData *ked, BezTriple *bezt)
#define KEYFRAME_OK_CHECKS(check)
static short select_bezier_add(KeyframeEditData *ked, BezTriple *bezt)
static short set_bezt_bezier(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short snap_bezier_nearmarker(KeyframeEditData *ked, BezTriple *bezt)
static short scene_keyframes_loop(KeyframeEditData *ked, bDopeSheet *ads, Scene *sce, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
static short set_bezt_linear(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static void handle_set_length(float vec[3][3], const int idx, const float handle_length)
static short set_easingtype_easein(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
void ANIM_fcurve_equalize_keyframes_loop(FCurve *fcu, const eEditKeyframes_Equalize mode, const float handle_length, const bool flatten)
static short set_bezier_auto_clamped(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short snap_bezier_time(KeyframeEditData *ked, BezTriple *bezt)
static void handle_flatten(float vec[3][3], const int idx, const float direction[2])
static short set_keytype_jitter(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_keytype_extreme(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_keytype_breakdown(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_bezt_elastic(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_bezt_quad(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short select_bezier_invert(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
KeyframeEditFunc ANIM_editkeyframes_select(short selectmode)
static short ok_bezier_frame(KeyframeEditData *ked, BezTriple *bezt)
static short set_easingtype_easeauto(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_bezt_expo(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_bezier_free(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
short bezt_to_cfraelem(KeyframeEditData *ked, BezTriple *bezt)
static short snap_bezier_cframe(KeyframeEditData *ked, BezTriple *bezt)
KeyframeEditFunc ANIM_editkeyframes_buildselmap(short mode)
short ANIM_animchanneldata_keyframes_loop(KeyframeEditData *ked, bDopeSheet *ads, void *data, int keytype, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
static short agrp_keyframes_loop(KeyframeEditData *ked, bActionGroup *agrp, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
static short mirror_bezier_yaxis(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short mirror_bezier_cframe(KeyframeEditData *ked, BezTriple *bezt)
static short set_bezier_auto(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
short ANIM_animchannel_keyframes_loop(KeyframeEditData *ked, bDopeSheet *ads, bAnimListElem *ale, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
static void mirror_bezier_yaxis_ex(BezTriple *bezt, const float center)
bool keyframe_region_circle_test(const KeyframeEdit_CircleData *data_circle, const float xy[2])
void bezt_remap_times(KeyframeEditData *ked, BezTriple *bezt)
static short set_bezt_quint(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
short ANIM_fcurve_keyframes_loop(KeyframeEditData *ked, FCurve *fcu, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
static short set_bezt_sine(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_bezt_circle(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
KeyframeEditFunc ANIM_editkeyframes_ok(short mode)
KeyframeEditFunc ANIM_editkeyframes_snap(short mode)
static short act_keyframes_loop(KeyframeEditData *ked, bAction *act, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
static short ob_keyframes_loop(KeyframeEditData *ked, bDopeSheet *ads, Object *ob, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
static short snap_bezier_nearestsec(KeyframeEditData *ked, BezTriple *bezt)
static short mirror_bezier_marker(KeyframeEditData *ked, BezTriple *bezt)
static short set_bezt_constant(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short selmap_build_bezier_less(KeyframeEditData *ked, BezTriple *bezt)
static short ok_bezier_region(KeyframeEditData *ked, BezTriple *bezt)
void ANIM_animdata_keyframe_callback(bAnimContext *ac, eAnimFilter_Flags filter, KeyframeEditFunc callback_fn)
short bezt_calc_average(KeyframeEditData *ked, BezTriple *bezt)
static short ok_bezier_selected(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short ok_bezier_valuerange(KeyframeEditData *ked, BezTriple *bezt)
static short mirror_bezier_time(KeyframeEditData *ked, BezTriple *bezt)
static short ok_bezier_channel_lasso(KeyframeEditData *ked, BezTriple *bezt)
static short snap_bezier_nearest(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short set_easingtype_easeout(KeyframeEditData *UNUSED(ked), BezTriple *bezt)
static short ok_bezier_value(KeyframeEditData *ked, BezTriple *bezt)
static short ok_bezier_region_lasso(KeyframeEditData *ked, BezTriple *bezt)
KeyframeEditFunc ANIM_editkeyframes_handles(short mode)
void *(* MEM_callocN)(size_t len, const char *str)
IMETHOD Vector diff(const Vector &a, const Vector &b, double dt=1)
SymEdge< T > * prev(const SymEdge< T > *se)
SocketIndexByIdentifierMap * map
eKeyframeIterFlags iterflags
struct bAnimListElem * next