177 float diff_mat[4][4];
181 float v_from_start[2], v_to_start[2], v_from_end[2], v_to_end[2];
184 pt = &gps_from->
points[0];
201 const bool isect_lines = (
isect_seg_seg_v2(v_from_start, v_to_start, v_from_end, v_to_end) ==
218 if (dist_start >= dist_end) {
222 return (dist_start >= dist_end);
230 return (dist_start < dist_end);
241 if ((
v1[0] < 0.0f) && (
v1[1] < 0.0f)) {
252 const int reference_index)
255 int lower_index = INT_MAX;
257 if (gps->select_index > reference_index) {
259 if (gps->select_index < lower_index) {
260 lower_index = gps->select_index;
307 if ((is_multiedit) && (gps_from->select_index > 0)) {
312 if (gps_to ==
NULL) {
320 if ((gps_from->totpoints == 0) || (gps_to->
totpoints == 0)) {
333 if (smooth_factor == 0.0f) {
338 for (
int r = 0;
r < smooth_steps;
r++) {
339 for (
int i = 0; i < gps->
totpoints - 1; i++) {
353 for (
int i = 0; i < new_stroke->
totpoints; i++) {
402 const float shift = tgpi->
shift;
405 const float factor = tgpil->factor + shift;
432 BLI_addtail(&tgpil->interFrame->strokes, new_stroke);
459 if (gpf->framenum >= cfra) {
475 if (gpf->framenum <= cfra) {
616 BLI_snprintf(status_str,
sizeof(status_str),
"%s%s", msg_str, str_ofs);
628 C,
TIP_(
"ESC/RMB to cancel, Enter/LMB to confirm, WHEEL/MOVE to adjust factor"));
676 if (tgpil->used_strokes !=
NULL) {
679 if (tgpil->pair_strokes !=
NULL) {
781 if (
ELEM(
NULL, gpf_prv, gpf_next)) {
785 "Cannot find valid keyframes to interpolate (Breakdowns keyframes are not allowed)");
825 switch (event->
type) {
841 if (gps_src->totpoints == 0) {
898 if (has_numinput ==
false) {
913 value = (factor + tgpi->
shift) * 100.0f;
915 tgpi->
shift = value / 100.0f;
956 ot->
name =
"Grease Pencil Interpolation";
957 ot->
idname =
"GPENCIL_OT_interpolate";
958 ot->
description =
"Interpolate grease pencil strokes between frames";
970 {0,
"ACTIVE", 0,
"Active",
""},
971 {1,
"ALL", 0,
"All Layers",
""},
983 "Bias factor for which frame has more influence on the interpolated strokes",
989 gpencil_interpolation_layer_items,
992 "Layers included in the interpolation");
995 "interpolate_selected_only",
998 "Interpolate only selected strokes");
1005 "Invert destination stroke to match start and end with source stroke");
1013 "Number of times to smooth newly created strokes",
1023 "Amount of smoothing to apply to interpolated strokes, to reduce jitter/noise",
1036 const float begin = 0.0f;
1037 const float change = 1.0f;
1038 const float duration = 1.0f;
1130 time, begin, change, duration, amplitude, period);
1230 printf(
"%s: Unknown interpolation type\n", __func__);
1273 if (
ELEM(
NULL, gpf_prv, gpf_next)) {
1277 "Cannot find valid keyframes to interpolate (Breakdowns keyframes are not allowed)");
1289 if ((!all_layers) && (
gpl != active_gpl)) {
1300 if ((gpf_prv ==
NULL) || (gpf_next ==
NULL)) {
1328 if ((is_multiedit) && (gps_from->select_index > 0)) {
1332 if (gps_to ==
NULL) {
1337 if (
ELEM(
NULL, gps_from, gps_to)) {
1340 if ((gps_from->totpoints == 0) || (gps_to->
totpoints == 0)) {
1345 if (gps_from->totpoints > gps_to->
totpoints) {
1348 if (gps_to->
totpoints > gps_from->totpoints) {
1369 for (
int cframe = prevFrame->
framenum + step; cframe < nextFrame->framenum; cframe += step) {
1373 float factor = (
float)(cframe - prevFrame->
framenum) / framerange;
1420 if (used_strokes !=
NULL) {
1423 if (pair_strokes !=
NULL) {
1461 uiItemR(row, &
ptr,
"interpolate_selected_only", 0,
NULL, ICON_NONE);
1482 layout, &gpsettings_ptr,
"interpolation_curve", 0,
false,
true,
true,
false);
1503 {0,
"ACTIVE", 0,
"Active",
""},
1504 {1,
"ALL", 0,
"All Layers",
""},
1514 {0,
"", 0,
N_(
"Interpolation"),
"Standard transitions between keyframes"},
1519 "Straight-line interpolation between A and B (i.e. no ease in/out)"},
1524 "Custom interpolation defined using a curve map"},
1530 N_(
"Easing (by strength)"),
1531 "Predefined inertial transitions, useful for motion graphics (from least to most "
1537 "Sinusoidal easing (weakest, almost linear but with a slight curvature)"},
1538 {
GP_IPO_QUAD,
"QUAD", ICON_IPO_QUAD,
"Quadratic",
"Quadratic easing"},
1539 {
GP_IPO_CUBIC,
"CUBIC", ICON_IPO_CUBIC,
"Cubic",
"Cubic easing"},
1540 {
GP_IPO_QUART,
"QUART", ICON_IPO_QUART,
"Quartic",
"Quartic easing"},
1541 {
GP_IPO_QUINT,
"QUINT", ICON_IPO_QUINT,
"Quintic",
"Quintic easing"},
1542 {
GP_IPO_EXPO,
"EXPO", ICON_IPO_EXPO,
"Exponential",
"Exponential easing (dramatic)"},
1547 "Circular easing (strongest and most dynamic)"},
1549 {0,
"", 0,
N_(
"Dynamic Effects"),
"Simple physics-inspired easing effects"},
1550 {
GP_IPO_BACK,
"BACK", ICON_IPO_BACK,
"Back",
"Cubic easing with overshoot and settle"},
1555 "Exponentially decaying parabolic bounce, like when objects collide"},
1560 "Exponentially decaying sine wave, like an elastic band"},
1568 ICON_IPO_EASE_IN_OUT,
1570 "Easing type is chosen automatically based on what the type of interpolation used "
1571 "(e.g. 'Ease In' for transitional types, and 'Ease Out' for dynamic effects)"},
1577 "Only on the end closest to the next keyframe"},
1582 "Only on the end closest to the first keyframe"},
1585 ICON_IPO_EASE_IN_OUT,
1587 "Segment between both keyframes"},
1599 ot->
name =
"Interpolate Sequence";
1600 ot->
idname =
"GPENCIL_OT_interpolate_sequence";
1601 ot->
description =
"Generate 'in-betweens' to smoothly interpolate between Grease Pencil frames";
1614 "Number of frames between generated interpolated frames",
1620 gpencil_interpolation_layer_items,
1623 "Layers included in the interpolation");
1626 "interpolate_selected_only",
1629 "Interpolate only selected strokes");
1636 "Invert destination stroke to match start and end with source stroke");
1644 "Number of times to smooth newly created strokes",
1654 "Amount of smoothing to apply to interpolated strokes, to reduce jitter/noise",
1660 gpencil_interpolation_type_items,
1663 "Interpolation method to use the next time 'Interpolate Sequence' is run");
1668 gpencil_interpolation_easing_items,
1671 "Which ends of the segment between the preceding and following grease pencil frames "
1672 "easing interpolation is applied to");
1680 "Amount of overshoot for 'back' easing",
1690 "Amount to boost elastic bounces for 'elastic' easing",
1700 "Time between bounces for elastic easing",
1792 if ((start_key && end_key) &&
ELEM(
NULL, start_key->
prev, end_key->
next) ==
false) {
1797 for (gpf = start_key; gpf && gpf != end_key; gpf = gpfn) {
1821 ot->
name =
"Delete Breakdowns";
1822 ot->
idname =
"GPENCIL_OT_interpolate_reverse";
1824 "Remove breakdown frames generated by interpolating between two Grease Pencil frames";
typedef float(TangentPoint)[2]
struct ScrArea * CTX_wm_area(const bContext *C)
struct Scene * CTX_data_scene(const bContext *C)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct bGPDlayer * CTX_data_active_gpencil_layer(const bContext *C)
struct bGPdata * CTX_data_gpencil_data(const bContext *C)
struct Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
struct Object * CTX_data_active_object(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
void CTX_wm_operator_poll_msg_set(struct bContext *C, const char *msg)
struct ToolSettings * CTX_data_tool_settings(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
enum eContextObjectMode CTX_data_mode_enum(const bContext *C)
bool BKE_gpencil_free_strokes(struct bGPDframe *gpf)
struct bGPDlayer * BKE_gpencil_layer_active_get(struct bGPdata *gpd)
bool BKE_gpencil_layer_is_editable(const struct bGPDlayer *gpl)
void BKE_gpencil_free_stroke(struct bGPDstroke *gps)
struct bGPDframe * BKE_gpencil_layer_frame_get(struct bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
#define GPENCIL_STRENGTH_MIN
struct bGPDframe * BKE_gpencil_frame_duplicate(const struct bGPDframe *gpf_src, const bool dup_strokes)
void BKE_gpencil_layer_transform_matrix_get(const struct Depsgraph *depsgraph, struct Object *obact, struct bGPDlayer *gpl, float diff_mat[4][4])
struct bGPDstroke * BKE_gpencil_stroke_duplicate(struct bGPDstroke *gps_src, const bool dup_points, const bool dup_curve)
void BKE_gpencil_stroke_flip(struct bGPDstroke *gps)
bool BKE_gpencil_stroke_smooth_strength(struct bGPDstroke *gps, int point_index, float influence)
void BKE_gpencil_stroke_geometry_update(struct bGPdata *gpd, struct bGPDstroke *gps)
bool BKE_gpencil_stroke_smooth(struct bGPDstroke *gps, int i, float inf)
void BKE_gpencil_stroke_uniform_subdivide(struct bGPdata *gpd, struct bGPDstroke *gps, const uint32_t target_number, const bool select)
void BKE_report(ReportList *reports, ReportType type, const char *message)
float BLI_easing_sine_ease_in(float time, float begin, float change, float duration)
float BLI_easing_back_ease_out(float time, float begin, float change, float duration, float overshoot)
float BLI_easing_bounce_ease_in_out(float time, float begin, float change, float duration)
float BLI_easing_quint_ease_out(float time, float begin, float change, float duration)
float BLI_easing_quart_ease_in_out(float time, float begin, float change, float duration)
float BLI_easing_circ_ease_in_out(float time, float begin, float change, float duration)
float BLI_easing_quart_ease_out(float time, float begin, float change, float duration)
float BLI_easing_bounce_ease_in(float time, float begin, float change, float duration)
float BLI_easing_circ_ease_in(float time, float begin, float change, float duration)
float BLI_easing_expo_ease_in(float time, float begin, float change, float duration)
float BLI_easing_expo_ease_out(float time, float begin, float change, float duration)
float BLI_easing_elastic_ease_in(float time, float begin, float change, float duration, float amplitude, float period)
float BLI_easing_quad_ease_in_out(float time, float begin, float change, float duration)
float BLI_easing_elastic_ease_out(float time, float begin, float change, float duration, float amplitude, float period)
float BLI_easing_cubic_ease_in(float time, float begin, float change, float duration)
float BLI_easing_elastic_ease_in_out(float time, float begin, float change, float duration, float amplitude, float period)
float BLI_easing_quint_ease_in(float time, float begin, float change, float duration)
float BLI_easing_sine_ease_out(float time, float begin, float change, float duration)
float BLI_easing_bounce_ease_out(float time, float begin, float change, float duration)
float BLI_easing_quad_ease_in(float time, float begin, float change, float duration)
float BLI_easing_quad_ease_out(float time, float begin, float change, float duration)
float BLI_easing_circ_ease_out(float time, float begin, float change, float duration)
float BLI_easing_cubic_ease_out(float time, float begin, float change, float duration)
float BLI_easing_back_ease_in(float time, float begin, float change, float duration, float overshoot)
float BLI_easing_quint_ease_in_out(float time, float begin, float change, float duration)
float BLI_easing_expo_ease_in_out(float time, float begin, float change, float duration)
float BLI_easing_quart_ease_in(float time, float begin, float change, float duration)
float BLI_easing_back_ease_in_out(float time, float begin, float change, float duration, float overshoot)
float BLI_easing_cubic_ease_in_out(float time, float begin, float change, float duration)
float BLI_easing_sine_ease_in_out(float time, float begin, float change, float duration)
bool BLI_ghash_haskey(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
struct LinkData * BLI_genericNodeN(void *data)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float interpf(float a, float b, float t)
int isect_seg_seg_v2(const float v1[2], const float v2[2], const float v3[2], const float v4[2])
#define ISECT_LINE_LINE_CROSS
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], const float t)
MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v2_v2v2(float r[2], const float a[2], const float b[2])
float angle_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
#define SET_FLAG_FROM_TEST(value, test, flag)
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
#define GPENCIL_EDIT_MODE(gpd)
#define GPENCIL_MULTIEDIT_SESSIONS_ON(gpd)
#define GPENCIL_CURVE_EDIT_SESSIONS_ON(gpd)
Object is a sort of wrapper for general info.
@ GP_TOOLFLAG_INTERPOLATE_ONLY_SELECTED
@ GP_TOOLFLAG_INTERPOLATE_ALL_LAYERS
void ED_area_status_text(ScrArea *area, const char *str)
void ED_workspace_status_text(struct bContext *C, const char *str)
_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 GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_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 type
_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
Read Guarded memory(de)allocation.
Group RGB to Bright Vector Camera CLAMP
StructRNA RNA_GPencilInterpolateSettings
void uiTemplateCurveMapping(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int type, bool levels, bool brush, bool neg_slope, bool tone)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
void uiLayoutSetPropDecorate(uiLayout *layout, bool is_sep)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
const Depsgraph * depsgraph
void gpencil_point_conversion_init(struct bContext *C, GP_SpaceConversion *r_gsc)
void gpencil_point_to_parent_space(const bGPDspoint *pt, const float diff_mat[4][4], bGPDspoint *r_pt)
void gpencil_point_to_xy_fl(const GP_SpaceConversion *gsc, const bGPDstroke *gps, const bGPDspoint *pt, float *r_x, float *r_y)
static void gpencil_interpolate_update_strokes(bContext *C, tGPDinterpolate *tgpi)
static bGPDstroke * gpencil_stroke_get_related(GHash *used_strokes, bGPDframe *gpf, const int reference_index)
static float gpencil_interpolate_seq_easing_calc(wmOperator *op, float time)
static int gpencil_interpolate_modal(bContext *C, wmOperator *op, const wmEvent *event)
static void gpencil_interpolate_exit(bContext *C, wmOperator *op)
static tGPDinterpolate * gpencil_session_init_interpolation(bContext *C, wmOperator *op)
static bGPDframe * gpencil_get_previous_keyframe(bGPDlayer *gpl, int cfra)
static void gpencil_interpolate_set_points(bContext *C, tGPDinterpolate *tgpi)
void GPENCIL_OT_interpolate(wmOperatorType *ot)
static void gpencil_interpolate_untag_strokes(bGPDlayer *gpl)
static int gpencil_interpolate_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
void GPENCIL_OT_interpolate_sequence(wmOperatorType *ot)
static bool gpencil_view3d_poll(bContext *C)
static void gpencil_interpolate_update_points(const bGPDstroke *gps_from, const bGPDstroke *gps_to, bGPDstroke *new_stroke, float factor)
static bool gpencil_interpolate_reverse_poll(bContext *C)
static int gpencil_interpolate_reverse_exec(bContext *C, wmOperator *UNUSED(op))
static bGPDframe * gpencil_get_next_keyframe(bGPDlayer *gpl, int cfra)
static void gpencil_interpolate_status_indicators(bContext *C, tGPDinterpolate *p)
static void gpencil_interpolate_smooth_stroke(bGPDstroke *gps, float smooth_factor, int smooth_steps)
struct tGPDinterpolate tGPDinterpolate
static bool gpencil_stroke_need_flip(Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, GP_SpaceConversion *gsc, bGPDstroke *gps_from, bGPDstroke *gps_to)
static void gpencil_interpolate_cancel(bContext *C, wmOperator *op)
static void gpencil_mouse_update_shift(tGPDinterpolate *tgpi, wmOperator *op, const wmEvent *event)
void GPENCIL_OT_interpolate_reverse(wmOperatorType *ot)
struct tGPDinterpolate_layer tGPDinterpolate_layer
static int gpencil_interpolate_init(bContext *C, wmOperator *op)
static bool gpencil_interpolate_set_init_values(bContext *C, wmOperator *op, tGPDinterpolate *tgpi)
static void gpencil_interpolate_free_tagged_strokes(bGPDframe *gpf)
static void gpencil_interpolate_update(bContext *C, wmOperator *op, tGPDinterpolate *tgpi)
static int gpencil_interpolate_seq_exec(bContext *C, wmOperator *op)
@ GP_INTERPOLATE_FLIPAUTO
static void gpencil_stroke_pair_table(bContext *C, tGPDinterpolate *tgpi, tGPDinterpolate_layer *tgpil)
static void gpencil_interpolate_seq_ui(bContext *C, wmOperator *op)
bool ED_gpencil_stroke_material_editable(Object *ob, const bGPDlayer *gpl, const bGPDstroke *gps)
bool ED_gpencil_stroke_can_use(const bContext *C, const bGPDstroke *gps)
bGPdata * ED_gpencil_data_get_active(const bContext *C)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static void area(int d1, int d2, int e1, int e2, float weights[2])
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
int RNA_int_get(PointerRNA *ptr, const char *name)
float RNA_float_get(PointerRNA *ptr, const char *name)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_float_factor(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, int default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
struct CurveMapping * custom_ipo
struct ToolSettings * toolsettings
struct GHash * pair_strokes
struct GHash * used_strokes
struct bGPDframe * prevFrame
struct bGPDframe * nextFrame
struct tGPDinterpolate_layer * prev
struct bGPDframe * interFrame
struct ListBase selected_strokes
struct tGPDinterpolate_layer * next
struct Depsgraph * depsgraph
struct GP_SpaceConversion gsc
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
int(* modal)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
void(* cancel)(struct bContext *, struct wmOperator *)
void(* ui)(struct bContext *, struct wmOperator *)
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
struct wmOperatorType * type
void WM_cursor_modal_set(wmWindow *win, int val)
void WM_cursor_modal_restore(wmWindow *win)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)