48 #include "RNA_prototypes.h"
162 float diff_mat[4][4];
166 float v_from_start[2], v_to_start[2], v_from_end[2], v_to_end[2];
169 pt = &gps_from->
points[0];
186 const bool isect_lines = (
isect_seg_seg_v2(v_from_start, v_to_start, v_from_end, v_to_end) ==
203 if (dist_start >= dist_end) {
207 return (dist_start >= dist_end);
215 return (dist_start < dist_end);
226 if ((
v1[0] < 0.0f) && (
v1[1] < 0.0f)) {
237 const int reference_index)
240 int lower_index = INT_MAX;
242 if (gps->select_index > reference_index) {
244 if (gps->select_index < lower_index) {
245 lower_index = gps->select_index;
291 if ((is_multiedit) && (gps_from->select_index > 0)) {
296 if (gps_to ==
NULL) {
304 if ((gps_from->totpoints == 0) || (gps_to->
totpoints == 0)) {
320 for (
int i = 0; i < new_stroke->
totpoints; i++) {
369 const float shift = tgpi->
shift;
372 const float factor = tgpil->factor + shift;
399 BLI_addtail(&tgpil->interFrame->strokes, new_stroke);
426 if (gpf->framenum >= cfra) {
442 if (gpf->framenum <= cfra) {
598 BLI_snprintf(status_str,
sizeof(status_str),
"%s%s", msg_str, str_ofs);
610 C,
TIP_(
"ESC/RMB to cancel, Enter/LMB to confirm, WHEEL/MOVE to adjust factor"));
658 if (tgpil->used_strokes !=
NULL) {
661 if (tgpil->pair_strokes !=
NULL) {
763 if (
ELEM(
NULL, gpf_prv, gpf_next)) {
767 "Cannot find valid keyframes to interpolate (Breakdowns keyframes are not allowed)");
807 switch (event->
type) {
823 if (gps_src->totpoints == 0) {
880 if (has_numinput ==
false) {
895 value = (factor + tgpi->
shift) * 100.0f;
897 tgpi->
shift = value / 100.0f;
938 ot->
name =
"Grease Pencil Interpolation";
939 ot->
idname =
"GPENCIL_OT_interpolate";
940 ot->
description =
"Interpolate grease pencil strokes between frames";
952 {0,
"ACTIVE", 0,
"Active",
""},
953 {1,
"ALL", 0,
"All Layers",
""},
965 "Bias factor for which frame has more influence on the interpolated strokes",
971 gpencil_interpolation_layer_items,
974 "Layers included in the interpolation");
977 "interpolate_selected_only",
980 "Interpolate only selected strokes");
987 "Invert destination stroke to match start and end with source stroke");
995 "Number of times to smooth newly created strokes",
1005 "Amount of smoothing to apply to interpolated strokes, to reduce jitter/noise",
1018 const float begin = 0.0f;
1019 const float change = 1.0f;
1020 const float duration = 1.0f;
1112 time, begin, change, duration, amplitude, period);
1212 printf(
"%s: Unknown interpolation type\n", __func__);
1255 if (
ELEM(
NULL, gpf_prv, gpf_next)) {
1259 "Cannot find valid keyframes to interpolate (Breakdowns keyframes are not allowed)");
1271 if ((!all_layers) && (
gpl != active_gpl)) {
1282 if ((gpf_prv ==
NULL) || (gpf_next ==
NULL)) {
1310 if ((is_multiedit) && (gps_from->select_index > 0)) {
1314 if (gps_to ==
NULL) {
1319 if (
ELEM(
NULL, gps_from, gps_to)) {
1322 if ((gps_from->totpoints == 0) || (gps_to->
totpoints == 0)) {
1327 if (gps_from->totpoints > gps_to->
totpoints) {
1330 if (gps_to->
totpoints > gps_from->totpoints) {
1351 for (
int cframe = prevFrame->
framenum + step; cframe < nextFrame->framenum; cframe += step) {
1355 float factor = (
float)(cframe - prevFrame->
framenum) / framerange;
1387 new_stroke, smooth_factor, smooth_steps,
true,
true,
false,
false,
true,
NULL);
1403 if (used_strokes !=
NULL) {
1406 if (pair_strokes !=
NULL) {
1440 uiItemR(row, op->
ptr,
"interpolate_selected_only", 0,
NULL, ICON_NONE);
1461 layout, &gpsettings_ptr,
"interpolation_curve", 0,
false,
true,
true,
false);
1482 {0,
"ACTIVE", 0,
"Active",
""},
1483 {1,
"ALL", 0,
"All Layers",
""},
1494 N_(
"Standard transitions between keyframes")),
1499 "Straight-line interpolation between A and B (i.e. no ease in/out)"},
1504 "Custom interpolation defined using a curve map"},
1508 N_(
"Predefined inertial transitions, useful for motion graphics "
1509 "(from least to most \"dramatic\")")),
1514 "Sinusoidal easing (weakest, almost linear but with a slight curvature)"},
1515 {
GP_IPO_QUAD,
"QUAD", ICON_IPO_QUAD,
"Quadratic",
"Quadratic easing"},
1516 {
GP_IPO_CUBIC,
"CUBIC", ICON_IPO_CUBIC,
"Cubic",
"Cubic easing"},
1517 {
GP_IPO_QUART,
"QUART", ICON_IPO_QUART,
"Quartic",
"Quartic easing"},
1518 {
GP_IPO_QUINT,
"QUINT", ICON_IPO_QUINT,
"Quintic",
"Quintic easing"},
1519 {
GP_IPO_EXPO,
"EXPO", ICON_IPO_EXPO,
"Exponential",
"Exponential easing (dramatic)"},
1524 "Circular easing (strongest and most dynamic)"},
1527 N_(
"Simple physics-inspired easing effects")),
1528 {
GP_IPO_BACK,
"BACK", ICON_IPO_BACK,
"Back",
"Cubic easing with overshoot and settle"},
1533 "Exponentially decaying parabolic bounce, like when objects collide"},
1538 "Exponentially decaying sine wave, like an elastic band"},
1546 ICON_IPO_EASE_IN_OUT,
1548 "Easing type is chosen automatically based on what the type of interpolation used "
1549 "(e.g. 'Ease In' for transitional types, and 'Ease Out' for dynamic effects)"},
1555 "Only on the end closest to the next keyframe"},
1560 "Only on the end closest to the first keyframe"},
1563 ICON_IPO_EASE_IN_OUT,
1565 "Segment between both keyframes"},
1579 ot->
name =
"Interpolate Sequence";
1580 ot->
idname =
"GPENCIL_OT_interpolate_sequence";
1581 ot->
description =
"Generate 'in-betweens' to smoothly interpolate between Grease Pencil frames";
1594 "Number of frames between generated interpolated frames",
1600 gpencil_interpolation_layer_items,
1603 "Layers included in the interpolation");
1606 "interpolate_selected_only",
1609 "Interpolate only selected strokes");
1616 "Invert destination stroke to match start and end with source stroke");
1624 "Number of times to smooth newly created strokes",
1634 "Amount of smoothing to apply to interpolated strokes, to reduce jitter/noise",
1640 gpencil_interpolation_type_items,
1643 "Interpolation method to use the next time 'Interpolate Sequence' is run");
1649 gpencil_interpolation_easing_items,
1652 "Which ends of the segment between the preceding and following grease pencil frames "
1653 "easing interpolation is applied to");
1662 "Amount of overshoot for 'back' easing",
1672 "Amount to boost elastic bounces for 'elastic' easing",
1682 "Time between bounces for elastic easing",
1774 if ((start_key && end_key) &&
ELEM(
NULL, start_key->
prev, end_key->
next) ==
false) {
1779 for (gpf = start_key; gpf && gpf != end_key; gpf = gpfn) {
1803 ot->
name =
"Delete Breakdowns";
1804 ot->
idname =
"GPENCIL_OT_interpolate_reverse";
1806 "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 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 bGPDstroke * BKE_gpencil_stroke_duplicate(struct bGPDstroke *gps_src, bool dup_points, bool dup_curve)
struct bGPDframe * BKE_gpencil_frame_duplicate(const struct bGPDframe *gpf_src, bool dup_strokes)
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
void BKE_gpencil_layer_transform_matrix_get(const struct Depsgraph *depsgraph, struct Object *obact, struct bGPDlayer *gpl, float diff_mat[4][4])
void BKE_gpencil_stroke_flip(struct bGPDstroke *gps)
void BKE_gpencil_stroke_geometry_update(struct bGPdata *gpd, struct bGPDstroke *gps)
void BKE_gpencil_stroke_smooth(struct bGPDstroke *gps, const float influence, const int iterations, const bool smooth_position, const bool smooth_strength, const bool smooth_thickness, const bool smooth_uv, const bool keep_shape, const float *weights)
void BKE_gpencil_stroke_uniform_subdivide(struct bGPdata *gpd, struct bGPDstroke *gps, uint32_t target_number, bool select)
void BKE_report(ReportList *reports, eReportType 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(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(const 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
#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
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
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
#define SET_FLAG_FROM_TEST(value, test, flag)
#define CTX_N_(context, msgid)
#define BLT_I18NCONTEXT_ID_GPENCIL
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 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 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 Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position CLAMP
#define RNA_ENUM_ITEM_HEADING(name, description)
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)
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])
SymEdge< T > * prev(const SymEdge< T > *se)
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_translation_context(PropertyRNA *prop, const char *context)
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
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)