218 if (
G.is_rendering) {
258 short only_keys = short(ked->
i1);
261 if (only_keys == 0) {
277 short only_keys = short(ked->
i1);
280 if (only_keys == 0) {
302 ked.
data = (
void *)adt;
303 ked.
i1 =
int(only_keys);
347 if (use_preview_only) {
350 bool replace =
false;
359 start =
max_ii(unclamped_start, 0);
366 for (
int i = start; i < end; i++, bezt++) {
375 max_coord =
max_ff(max_coord, bezt->
vec[1][1]);
376 min_coord =
min_ff(min_coord, bezt->
vec[1][1]);
384 max_coord =
max_ff(max_coord, bezt->
vec[1][1]);
385 min_coord =
min_ff(min_coord, bezt->
vec[1][1]);
386 max_coord =
max_ff(max_coord, prev_bezt->
vec[1][1]);
387 min_coord =
min_ff(min_coord, prev_bezt->
vec[1][1]);
390 const int resol = fcu->
driver ?
395 max_coord =
max_ff(max_coord, prev_bezt->
vec[1][1]);
396 min_coord =
min_ff(min_coord, prev_bezt->
vec[1][1]);
402 float v1[2],
v2[2], v3[2], v4[2];
404 v1[0] = prev_bezt->
vec[1][0];
405 v1[1] = prev_bezt->
vec[1][1];
406 v2[0] = prev_bezt->
vec[2][0];
407 v2[1] = prev_bezt->
vec[2][1];
409 v3[0] = bezt->
vec[0][0];
410 v3[1] = bezt->
vec[0][1];
411 v4[0] = bezt->
vec[1][0];
412 v4[1] = bezt->
vec[1][1];
417 v1[0],
v2[0], v3[0], v4[0],
data, resol,
sizeof(
float[3]));
419 v1[1],
v2[1], v3[1], v4[1],
data + 1, resol,
sizeof(
float[3]));
421 for (
int j = 0; j <= resol; ++j) {
422 const float *fp = &
data[j * 3];
423 max_coord =
max_ff(max_coord, fp[1]);
424 min_coord =
min_ff(min_coord, fp[1]);
431 float step_size = (bezt->
vec[1][0] - prev_bezt->
vec[1][0]) / resol;
432 for (
int j = 0; j <= resol; j++) {
433 float eval_time = prev_bezt->
vec[1][0] + step_size * j;
435 max_coord =
max_ff(max_coord, eval_value);
436 min_coord =
min_ff(min_coord, eval_value);
446 for (
int i = start; i < end; ++i, ++fpt) {
447 min_coord =
min_ff(min_coord, fpt->
vec[1]);
448 max_coord =
max_ff(max_coord, fpt->
vec[1]);
454 *r_min_coord = min_coord;
457 *r_max_coord = max_coord;
463 float factor = 1.0f, offset = 0.0f;
507 if (min_coord < max_coord &&
ulp_diff_ff(min_coord, max_coord) > 256) {
509 const float range = max_coord - min_coord;
510 factor = 2.0f / range;
511 offset = -min_coord - range / 2.0f;
574 float cfranext, cfraprev;
575 bool donenext =
false, doneprev =
false;
576 int nextcount = 0, prevcount = 0;
607 if (scene->
r.
cfra ==
int(aknext->
cfra)) {
609 cfranext = aknext->
cfra;
613 if (++nextcount ==
U.view_frame_keyframes) {
617 cfranext = aknext->
cfra;
619 }
while ((aknext !=
nullptr) && (donenext ==
false));
625 if (scene->
r.
cfra ==
int(akprev->
cfra)) {
630 if (++prevcount ==
U.view_frame_keyframes) {
634 cfraprev = akprev->
cfra;
636 }
while ((akprev !=
nullptr) && (doneprev ==
false));
642 if (doneprev || donenext) {
644 *r_prevfra = cfraprev;
647 *r_prevfra = scene->
r.
cfra - (cfranext - scene->
r.
cfra);
651 *r_nextfra = cfranext;
654 *r_nextfra = scene->
r.
cfra + (scene->
r.
cfra - cfraprev);
669 int nextfra, prevfra;
671 switch (
U.view_frame_type) {
673 const float fps =
FPS;
674 newrct.
xmax = scene->
r.
cfra +
U.view_frame_seconds * fps + 1;
675 newrct.
xmin = scene->
r.
cfra -
U.view_frame_seconds * fps - 1;
684 newrct.
xmax = nextfra;
685 newrct.
xmin = prevfra;
710 const float margin_in_px = 4 * keyframe_size;
720 const float margin_in_frames = margin_in_px * target_scale;
726 const float margin = std::min(margin_in_frames, margin_max);
728 rctf rect_with_margin = view_rect;
729 rect_with_margin.
xmin -= margin;
730 rect_with_margin.
xmax += margin;
732 return rect_with_margin;
Mask * CTX_data_edit_mask(const bContext *C)
Object * CTX_data_active_object(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
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)
int BKE_fcurve_bezt_binarysearch_index(const BezTriple array[], float frame, int arraylen, bool *r_replace)
float evaluate_fcurve_only_curve(const 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(AnimData *adt, float cframe, short mode)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
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 int max_ii(int a, int b)
MINLINE uint ulp_diff_ff(float a, float b)
MINLINE float len_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
Object is a sort of wrapper for general info.
@ ZOOM_FRAME_MODE_SECONDS
@ ZOOM_FRAME_MODE_KEYFRAMES
@ ZOOM_FRAME_MODE_KEEP_RANGE
@ ANIM_UNITCONV_NORMALIZE
@ ANIM_UNITCONV_NORMALIZE_FREEZE
short(*)(KeyframeEditData *ked, BezTriple *bezt) KeyframeEditFunc
@ GPU_SHADER_2D_DIAG_STRIPES
@ GPU_SHADER_3D_UNIFORM_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_width(float width)
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
#define RNA_SUBTYPE_UNIT(subtype)
void UI_GetThemeColorShadeAlpha4fv(int colorid, int coloffset, int alphaoffset, float col[4])
void UI_view2d_smooth_view(const bContext *C, ARegion *region, const rctf *cur, int smooth_viewtx)
short ANIM_get_normalization_flags(SpaceLink *space_link)
AnimData * ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale)
static short bezt_nlamapping_apply(KeyframeEditData *ked, BezTriple *bezt)
static bool find_prev_next_keyframes(bContext *C, int *r_nextfra, int *r_prevfra)
void ANIM_draw_action_framerange(AnimData *adt, bAction *action, View2D *v2d, float ymin, float ymax)
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_center_frame(bContext *C, int smooth_viewtx)
void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, bool only_keys)
void ANIM_draw_previewrange(const bContext *C, View2D *v2d, int end_frame_width)
static void fcurve_scene_coord_range_get(Scene *scene, const FCurve *fcu, float *r_min_coord, float *r_max_coord)
rctf ANIM_frame_range_view2d_add_xmargin(const View2D &view_2d, const rctf view_rect)
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)
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.
draw_view in_light_buf[] float
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
short ANIM_fcurve_keyframes_loop(KeyframeEditData *ked, FCurve *fcu, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
void mask_to_keylist(bDopeSheet *, MaskLayer *masklay, AnimKeylist *keylist)
const ActKeyColumn * ED_keylist_find_prev(const AnimKeylist *keylist, const float cfra)
void gpencil_to_keylist(bDopeSheet *ads, bGPdata *gpd, AnimKeylist *keylist, const bool active)
void scene_to_keylist(bDopeSheet *ads, Scene *sce, AnimKeylist *keylist, const int saction_flag, blender::float2 range)
void ob_to_keylist(bDopeSheet *ads, Object *ob, AnimKeylist *keylist, const int saction_flag, blender::float2 range)
void ED_keylist_prepare_for_direct_access(AnimKeylist *keylist)
AnimKeylist * ED_keylist_create()
void ED_keylist_free(AnimKeylist *keylist)
const ActKeyColumn * ED_keylist_find_next(const AnimKeylist *keylist, const float cfra)
ccl_device_inline float4 mask(const int4 mask, const float4 a)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
PointerRNA RNA_id_pointer_create(ID *id)
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)