186 if (
G.is_rendering) {
221 short only_keys = (
short)ked->
i1;
224 if (only_keys == 0) {
240 short only_keys = (
short)ked->
i1;
243 if (only_keys == 0) {
266 ked.
data = (
void *)adt;
267 ked.
i1 = (int)only_keys;
301 float factor = 1.0f, offset = 0.0f;
340 float max_coord = -FLT_MAX;
341 float min_coord = FLT_MAX;
348 for (i = 0, bezt = fcu->
bezt; i < fcu->totvert; i++, bezt++) {
360 max_coord =
max_ff(max_coord, bezt->
vec[1][1]);
362 min_coord =
min_ff(min_coord, bezt->
vec[1][1]);
370 max_coord =
max_ff(max_coord, bezt->
vec[1][1]);
371 min_coord =
min_ff(min_coord, bezt->
vec[1][1]);
372 max_coord =
max_ff(max_coord, prev_bezt->
vec[1][1]);
373 min_coord =
min_ff(min_coord, prev_bezt->
vec[1][1]);
376 const int resol = fcu->
driver ?
381 max_coord =
max_ff(max_coord, prev_bezt->
vec[1][1]);
382 min_coord =
min_ff(min_coord, prev_bezt->
vec[1][1]);
388 float v1[2],
v2[2], v3[2], v4[2];
390 v1[0] = prev_bezt->
vec[1][0];
391 v1[1] = prev_bezt->
vec[1][1];
392 v2[0] = prev_bezt->
vec[2][0];
393 v2[1] = prev_bezt->
vec[2][1];
395 v3[0] = bezt->
vec[0][0];
396 v3[1] = bezt->
vec[0][1];
397 v4[0] = bezt->
vec[1][0];
398 v4[1] = bezt->
vec[1][1];
403 v1[0],
v2[0], v3[0], v4[0],
data, resol,
sizeof(
float[3]));
405 v1[1],
v2[1], v3[1], v4[1],
data + 1, resol,
sizeof(
float[3]));
407 for (
int j = 0; j <= resol; ++j) {
408 const float *fp = &
data[j * 3];
409 max_coord =
max_ff(max_coord, fp[1]);
410 min_coord =
min_ff(min_coord, fp[1]);
417 float step_size = (bezt->
vec[1][0] - prev_bezt->
vec[1][0]) / resol;
418 for (
int j = 0; j <= resol; j++) {
419 float eval_time = prev_bezt->
vec[1][0] + step_size * j;
421 max_coord =
max_ff(max_coord, eval_value);
422 min_coord =
min_ff(min_coord, eval_value);
430 if (max_coord > min_coord) {
431 range = max_coord - min_coord;
432 if (range > FLT_EPSILON) {
433 factor = 2.0f / range;
435 offset = -min_coord - range / 2.0f;
437 else if (max_coord == min_coord) {
498 float cfranext, cfraprev;
499 bool donenext =
false, doneprev =
false;
500 int nextcount = 0, prevcount = 0;
534 cfranext = aknext->
cfra;
538 if (++nextcount ==
U.view_frame_keyframes) {
542 cfranext = aknext->
cfra;
544 }
while ((aknext !=
NULL) && (donenext ==
false));
555 if (++prevcount ==
U.view_frame_keyframes) {
559 cfraprev = akprev->
cfra;
561 }
while ((akprev !=
NULL) && (doneprev ==
false));
567 if (doneprev || donenext) {
569 *r_prevfra = cfraprev;
572 *r_prevfra =
CFRA - (cfranext -
CFRA);
576 *r_nextfra = cfranext;
579 *r_nextfra =
CFRA + (
CFRA - cfraprev);
594 int nextfra, prevfra;
596 switch (
U.view_frame_type) {
598 const float fps =
FPS;
609 newrct.
xmax = nextfra;
610 newrct.
xmin = prevfra;
typedef float(TangentPoint)[2]
struct Scene * CTX_data_scene(const bContext *C)
struct Mask * CTX_data_edit_mask(const bContext *C)
struct Object * CTX_data_active_object(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
float evaluate_fcurve_only_curve(struct FCurve *fcu, float evaltime)
void BKE_fcurve_correct_bezpart(const float v1[2], float v2[2], float v3[2], const float v4[2])
struct MaskLayer * BKE_mask_layer_active(struct Mask *mask)
float BKE_nla_tweakedit_remap(struct AnimData *adt, float cframe, short mode)
void BLI_dlrbTree_init(DLRBT_Tree *tree)
void BLI_dlrbTree_free(DLRBT_Tree *tree)
DLRBT_Node * BLI_dlrbTree_search_next(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
DLRBT_Node * BLI_dlrbTree_search_prev(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE float min_ff(float a, float b)
MINLINE float len_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
#define IN_RANGE_INCL(a, b, c)
Object is a sort of wrapper for general info.
#define SCE_KEYS_NO_SELONLY
#define USER_UNIT_ROT_RADIANS
@ ZOOM_FRAME_MODE_SECONDS
@ ZOOM_FRAME_MODE_KEYFRAMES
@ ZOOM_FRAME_MODE_KEEP_RANGE
@ ANIM_UNITCONV_NORMALIZE
@ ANIM_UNITCONV_NORMALIZE_FREEZE
short(* KeyframeEditFunc)(KeyframeEditData *ked, struct BezTriple *bezt)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
@ GPU_SHADER_2D_UNIFORM_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_width(float width)
#define RNA_SUBTYPE_UNIT(subtype)
void UI_view2d_smooth_view(struct bContext *C, struct ARegion *region, const struct rctf *cur, const int smooth_viewtx)
static bool find_prev_next_keyframes(struct bContext *C, int *r_nextfra, int *r_prevfra)
AnimData * ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale)
static short bezt_nlamapping_apply(KeyframeEditData *ked, BezTriple *bezt)
static float normalization_factor_get(Scene *scene, FCurve *fcu, short flag, float *r_offset)
void ANIM_draw_cfra(const bContext *C, View2D *v2d, short flag)
void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, bool only_keys)
void ANIM_center_frame(struct bContext *C, int smooth_viewtx)
void ANIM_draw_previewrange(const bContext *C, View2D *v2d, int end_frame_width)
float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short flag, float *r_offset)
static short bezt_nlamapping_restore(KeyframeEditData *ked, BezTriple *bezt)
short ANIM_get_normalization_flags(bAnimContext *ac)
void ANIM_draw_framerange(Scene *scene, View2D *v2d)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
void scene_to_keylist(bDopeSheet *ads, Scene *sce, DLRBT_Tree *keys, int saction_flag)
void mask_to_keylist(bDopeSheet *UNUSED(ads), MaskLayer *masklay, DLRBT_Tree *keys)
short compare_ak_cfraPtr(void *node, void *data)
void gpencil_to_keylist(bDopeSheet *ads, bGPdata *gpd, DLRBT_Tree *keys, const bool active)
void ob_to_keylist(bDopeSheet *ads, Object *ob, DLRBT_Tree *keys, int saction_flag)
short ANIM_fcurve_keyframes_loop(KeyframeEditData *ked, FCurve *fcu, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
bool RNA_path_resolve_property(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)