100 float viewport_size[4];
132 for (i = 0, fed = env->
data; i < env->totvert; i++, fed++) {
180 color[3] = 1.0f - (
diff * 0.5f);
181 CLAMP(color[3], 0.2f, 1.0f);
196 for (
int i = 0; i < fcu->
totvert; i++, bezt++) {
271 immUniform4f(
"outlineColor", hcolor[0], hcolor[1], hcolor[2], 1.0f);
278 for (
int i = 0; i < fcu->
totvert; i++, prevbezt = bezt, bezt++) {
312 const bool sel_handle_only,
332 const BezTriple *left_bezt = active_keyframe_index > 0 ? &fcu->
bezt[active_keyframe_index - 1] :
363 bool sel_handle_only)
437 for (sel = 0; sel < 2; sel++) {
443 for (b = 0; b < fcu->
totvert; b++, prevbezt = bezt, bezt++) {
520 float x,
float y,
float xscale,
float yscale,
float hsize,
uint pos)
544 float hsize, xscale, yscale;
552 last = (first) ? (first + (fcu->
totvert - 1)) : (
NULL);
588 const bool use_nla_remap,
589 const bool draw_extrapolation)
601 FCurve fcurve_for_draw = *fcu_;
607 ac->
scene,
id, &fcurve_for_draw, mapping_flag, &offset);
624 float pixels_per_sample = 1.5f;
637 if (samplefreq < 0.1f) {
643 if (samplefreq < 0.00001f) {
644 samplefreq = 0.00001f;
656 if (!draw_extrapolation) {
665 if (fcu_end < fcu_start) {
666 SWAP(
float, fcu_start, fcu_end);
670 stime =
max_ff(stime, fcu_start);
671 etime =
min_ff(etime, fcu_end);
674 const int total_samples = roundf((etime - stime) / samplefreq);
675 if (total_samples <= 0) {
692 for (
int i = 0; i < total_samples; i++) {
693 const float ctime = stime + i * samplefreq;
694 float eval_time = eval_start + i * eval_freq;
703 if (eval_time > eval_end) {
704 eval_time = eval_end;
728 const bool draw_extrapolation)
730 if (!draw_extrapolation && fcu->
totvert == 1) {
735 FPoint *fpt = prevfpt + 1;
738 float unit_scale, offset;
742 const bool extrap_left = draw_extrapolation && prevfpt->
vec[0] > v2d->
cur.
xmin;
747 const bool extrap_right = draw_extrapolation && (prevfpt + b - 1)->vec[0] < v2d->
cur.
xmax;
768 v[1] = prevfpt->
vec[1];
772 fac = (prevfpt->
vec[0] - fpt->
vec[0]) / (prevfpt->
vec[0] -
v[0]);
776 v[1] = prevfpt->
vec[1] - fac * (prevfpt->
vec[1] - fpt->
vec[1]);
802 v[1] = prevfpt->
vec[1];
807 fac = (prevfpt->
vec[0] - fpt->
vec[0]) / (prevfpt->
vec[0] -
v[0]);
811 v[1] = prevfpt->
vec[1] - fac * (prevfpt->
vec[1] - fpt->
vec[1]);
830 for (i = 0, bezt = fcu->
bezt; i < fcu->totvert; i++, bezt++) {
843 if (!draw_extrapolation && fcu->
totvert == 1) {
849 float v1[2],
v2[2], v3[2], v4[2];
850 float *fp,
data[120];
854 float unit_scale, offset;
869 if (draw_extrapolation && prevbezt->
vec[1][0] > v2d->
cur.
xmin) {
877 v1[1] = prevbezt->
vec[1][1];
881 fac = (prevbezt->
vec[1][0] - bezt->
vec[1][0]) / (prevbezt->
vec[1][0] -
v1[0]);
885 v1[1] = prevbezt->
vec[1][1] - fac * (prevbezt->
vec[1][1] - bezt->
vec[1][1]);
889 fac = (prevbezt->
vec[0][0] - prevbezt->
vec[1][0]) / (prevbezt->
vec[1][0] -
v1[0]);
893 v1[1] = prevbezt->
vec[1][1] - fac * (prevbezt->
vec[0][1] - prevbezt->
vec[1][1]);
901 v1[0] = prevbezt->
vec[1][0];
902 v1[1] = prevbezt->
vec[1][1];
912 v1[0] = prevbezt->
vec[1][0];
913 v1[1] = prevbezt->
vec[1][1];
916 v1[0] = bezt->
vec[1][0];
917 v1[1] = prevbezt->
vec[1][1];
922 v1[0] = prevbezt->
vec[1][0];
923 v1[1] = prevbezt->
vec[1][1];
943 v1[0] = prevbezt->
vec[1][0];
944 v1[1] = prevbezt->
vec[1][1];
954 v1[0] = prevbezt->
vec[1][0];
955 v1[1] = prevbezt->
vec[1][1];
956 v2[0] = prevbezt->
vec[2][0];
957 v2[1] = prevbezt->
vec[2][1];
959 v3[0] = bezt->
vec[0][0];
960 v3[1] = bezt->
vec[0][1];
961 v4[0] = bezt->
vec[1][0];
962 v4[1] = bezt->
vec[1][1];
968 v1[1],
v2[1], v3[1], v4[1],
data + 1, resol,
sizeof(
float[3]));
970 for (fp =
data; resol; resol--, fp += 3) {
982 v1[0] = prevbezt->
vec[1][0];
983 v1[1] = prevbezt->
vec[1][1];
989 if (draw_extrapolation && prevbezt->
vec[1][0] < v2d->
cur.
xmax) {
996 v1[1] = prevbezt->
vec[1][1];
1000 bezt = prevbezt - 1;
1001 fac = (prevbezt->
vec[1][0] - bezt->
vec[1][0]) / (prevbezt->
vec[1][0] -
v1[0]);
1005 v1[1] = prevbezt->
vec[1][1] - fac * (prevbezt->
vec[1][1] - bezt->
vec[1][1]);
1009 fac = (prevbezt->
vec[2][0] - prevbezt->
vec[1][0]) / (prevbezt->
vec[1][0] -
v1[0]);
1013 v1[1] = prevbezt->
vec[1][1] - fac * (prevbezt->
vec[2][1] - prevbezt->
vec[1][1]);
1065 float viewport_size[4];
1123 else if (fcu->
fpt) {
1144 switch (fcm->type) {
1155 ac->
scene, ale->
id, fcu, mapping_flag, &offset);
1215 float viewport_size[4];
1252 float y = fcu->
curval * unitfac;
1337 float viewport_size[4];
1385 for (ale = anim_data.
first; ale; ale = ale->
next) {
1388 ale_active_fcurve = ale;
1396 if (ale_active_fcurve !=
NULL) {
1433 size_t channel_index = 0;
1449 size_t channel_index = 0;
Blender kernel action and pose functionality.
struct AnimData * BKE_animdata_from_id(struct ID *id)
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
float evaluate_fcurve(struct FCurve *fcu, float evaltime)
bool BKE_fcurve_calc_range(struct FCurve *fcu, float *min, float *max, const bool do_sel_only, const bool do_min_length)
struct FModifier * find_active_fmodifier(ListBase *modifiers)
bool BKE_fcurve_are_keyframes_usable(struct FCurve *fcu)
bool BKE_fcurve_is_protected(struct FCurve *fcu)
int BKE_fcurve_active_keyframe_index(const struct FCurve *fcu)
void BKE_fcurve_correct_bezpart(const float v1[2], float v2[2], float v3[2], const float v4[2])
float BKE_nla_tweakedit_remap(struct 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 float min_ff(float a, float b)
MINLINE float len_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
void BLI_rctf_init(struct rctf *rect, float xmin, float xmax, float ymin, float ymax)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
#define IN_RANGE(a, b, c)
@ FMODIFIER_TYPE_ENVELOPE
#define FCURVE_ACTIVE_KEYFRAME_NONE
@ FCURVE_EXTRAPOLATE_CONSTANT
#define BEZT_ISSEL_ANY(bezt)
@ SIPO_NO_DRAW_EXTRAPOLATION
#define ACHANNEL_HEIGHT(ac)
#define ACHANNEL_FIRST_TOP(ac)
#define ACHANNEL_STEP(ac)
#define ACHANNEL_TOT_HEIGHT(ac, item_amount)
@ ANIMFILTER_DATA_VISIBLE
@ ANIMFILTER_CURVE_VISIBLE
@ ANIMFILTER_LIST_VISIBLE
@ ANIMFILTER_LIST_CHANNELS
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_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 y
_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 GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
_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
void GPU_matrix_pop(void)
void GPU_matrix_scale_2f(float x, float y)
void GPU_matrix_push(void)
void GPU_matrix_translate_2f(float x, float y)
@ GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR
@ GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA
@ GPU_SHADER_2D_UNIFORM_COLOR
@ GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA
@ GPU_SHADER_2D_FLAT_COLOR
void GPU_program_point_size(bool enable)
void GPU_blend(eGPUBlend blend)
void GPU_line_width(float width)
void GPU_line_smooth(bool enable)
void GPU_point_size(float size)
void GPU_viewport_size_get_f(float coords[4])
Group RGB to Bright Vector Camera CLAMP
void UI_block_end(const struct bContext *C, uiBlock *block)
void UI_block_draw(const struct bContext *C, struct uiBlock *block)
uiBlock * UI_block_begin(const struct bContext *C, struct ARegion *region, const char *name, eUIEmbossType emboss)
void UI_GetThemeColor3fv(int colorid, float col[3])
@ TH_HANDLE_VERTEX_SELECT
void UI_GetThemeColor3ubv(int colorid, unsigned char col[3])
void UI_GetThemeColor4fv(int colorid, float col[4])
float UI_GetThemeValuef(int colorid)
void UI_view2d_scale_get(const struct View2D *v2d, float *r_x, float *r_y)
float UI_view2d_scale_get_x(const struct View2D *v2d)
void ANIM_channel_draw_widgets(const bContext *C, bAnimContext *ac, bAnimListElem *ale, uiBlock *block, rctf *rect, size_t channel_index)
void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc, size_t channel_index)
void ANIM_animdata_freelist(ListBase *anim_data)
AnimData * ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale)
void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, bool only_keys)
float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short flag, float *r_offset)
short ANIM_get_normalization_flags(bAnimContext *ac)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, eAnimFilter_Flags filter_mode, void *data, eAnimCont_Types datatype)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
static void draw_fcurve_sample_control(float x, float y, float xscale, float yscale, float hsize, uint pos)
void graph_draw_channel_names(bContext *C, bAnimContext *ac, ARegion *region)
static bool draw_fcurve_handles_check(SpaceGraph *sipo, FCurve *fcu)
static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d, uint pos, const bool draw_extrapolation)
static void draw_fcurve_curve(bAnimContext *ac, ID *id, FCurve *fcu_, View2D *v2d, uint pos, const bool use_nla_remap, const bool draw_extrapolation)
static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
static void draw_fcurve_active_handle_vertices(const FCurve *fcu, const bool sel_handle_only, const uint pos)
static void draw_fcurve_selected_handle_vertices(FCurve *fcu, View2D *v2d, bool sel, bool sel_handle_only, uint pos)
static void draw_fcurve_modifier_controls_envelope(FModifier *fcm, View2D *v2d, AnimData *adt_nla_remap)
static void draw_fcurve_keyframe_vertices(FCurve *fcu, View2D *v2d, bool edit, uint pos)
static void set_fcurve_vertex_color(FCurve *fcu, bool sel)
void graph_draw_ghost_curves(bAnimContext *ac, SpaceGraph *sipo, ARegion *region)
static void draw_fcurve_handle_vertices(FCurve *fcu, View2D *v2d, bool sel_handle_only, uint pos)
static void draw_fcurve_vertices(ARegion *region, FCurve *fcu, bool do_handles, bool sel_handle_only)
static void draw_fcurve_samples(SpaceGraph *sipo, ARegion *region, FCurve *fcu)
static void draw_fcurve_curve_samples(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d, const uint shdr_pos, const bool draw_extrapolation)
static float fcurve_display_alpha(FCurve *fcu)
static void draw_fcurve_selected_keyframe_vertices(FCurve *fcu, View2D *v2d, bool edit, bool sel, uint pos)
static bool fcurve_can_use_simple_bezt_drawing(FCurve *fcu)
static void draw_fcurve_active_vertex(const FCurve *fcu, const View2D *v2d, const uint pos)
static void draw_fcurve(bAnimContext *ac, SpaceGraph *sipo, ARegion *region, bAnimListElem *ale)
void graph_draw_curves(bAnimContext *ac, SpaceGraph *sipo, ARegion *region, short sel)
static void draw_fcurve_handles(SpaceGraph *sipo, FCurve *fcu)
DO_INLINE void filter(lfVector *V, fmatrix3x3 *S)
IMETHOD Vector diff(const Vector &a, const Vector &b, double dt=1)
SpaceGraph_Runtime runtime
struct bAnimListElem * next