67 #include "RNA_prototypes.h"
256 #define STROKE_HORIZONTAL 1
257 #define STROKE_VERTICAL 2
261 #define MIN_MANHATTEN_PX (U.gp_manhattandist)
263 #define MIN_EUCLIDEAN_PX (U.gp_euclideandist)
349 int dx = (int)
fabsf(mval[0] - mvalo[0]);
350 int dy = (int)
fabsf(mval[1] - mvalo[1]);
433 rmval[0] = mval[0] - 0.5f;
434 rmval[1] = mval[1] - 0.5f;
445 if ((depth ==
NULL) || (*depth <= 1.0f)) {
477 const float axis[2] = {0.0f, 1.0f};
515 (pt - 1)->pressure = (pt - 1)->pressure - (sen * fac);
549 if ((num_points < 3) || (idx < 3) || (inf == 0.0f)) {
554 const float steps = (idx < 4) ? 3.0f : 4.0f;
561 float sco[2] = {0.0f};
562 float a[2],
b[2],
c[2], d[2];
563 float pressure = 0.0f;
564 float strength = 0.0f;
565 const float average_fac = 1.0f /
steps;
571 pressure += pta->
pressure * average_fac;
572 strength += pta->
strength * average_fac;
577 pressure += ptb->
pressure * average_fac;
578 strength += ptb->
strength * average_fac;
583 pressure += ptc->
pressure * average_fac;
584 strength += ptc->
strength * average_fac;
589 pressure += ptd->
pressure * average_fac;
590 strength += ptd->
strength * average_fac;
608 const short num_points = to_idx - from_idx;
610 if ((num_points < 3) || (inf == 0.0f)) {
619 const float average_fac = 0.25f;
621 for (
int i = from_idx; i < to_idx + 1; i++) {
625 tGPspoint *ptc = i >= 1 ? &points[i - 1] : &points[i];
628 float sco[2] = {0.0f};
629 float pressure = 0.0f;
630 float strength = 0.0f;
635 pressure += pta->
pressure * average_fac;
636 strength += pta->
strength * average_fac;
640 pressure += ptc->
pressure * average_fac;
641 strength += ptc->
strength * average_fac;
646 pressure += ptb->
pressure * average_fac;
647 strength += ptb->
strength * average_fac;
651 pressure += ptc->
pressure * average_fac;
652 strength += ptc->
strength * average_fac;
656 pressure += ptc->
pressure * average_fac;
657 strength += ptc->
strength * average_fac;
660 pressure += ptd->
pressure * average_fac;
661 strength += ptd->
strength * average_fac;
724 if ((brush_settings->
uv_random > 0.0f) && (uv)) {
840 float jitpress = 1.0f;
845 const float exp_factor = brush_settings->
draw_jitter + 2.0f;
846 const float fac = rand *
square_f(exp_factor) * jitpress;
892 for (
int s = 0; s < 3; s++) {
912 for (
int i = 0; i < gps->
totpoints; i++) {
941 const bool is_camera = is_lock_axis_view && (rv3d->persp ==
RV3D_CAMOB) && (!is_depth);
1037 if (dvert !=
NULL) {
1067 if (dvert !=
NULL) {
1077 for (
int i = 0; i < gps->
totpoints; i++, pt++) {
1089 float *depth_arr =
NULL;
1093 int mval_i[2], mval_prev[2] = {0};
1094 int interp_depth = 0;
1095 int found_depth = 0;
1101 for (i = 0, ptc = gpd->
runtime.
sbuffer; i < gpd->runtime.sbuffer_used; i++, ptc++, pt++) {
1107 depths, mval_i, mval_prev, depth_margin + 1, depth_arr + i) == 0))) {
1108 interp_depth =
true;
1117 if (found_depth ==
false) {
1121 depth_arr[i] = 0.9999f;
1128 int first_valid = 0;
1141 last_valid = first_valid;
1154 if (!
ELEM(i, first_valid, last_valid)) {
1158 interp_depth =
true;
1172 for (i = 0, ptc = gpd->
runtime.
sbuffer; i < gpd->runtime.sbuffer_used && ptc;
1188 if (dvert !=
NULL) {
1211 float sfac =
interpf(1.0f, 0.2f, ifac);
1229 if ((!is_depth) && (((align_flag &
GP_PROJECT_VIEWSPACE) && is_lock_axis_view) || is_camera)) {
1262 for (
int i = 0; i < gps->
totpoints; i++) {
1281 float diff_mat[4][4], ctrl1[2], ctrl2[2];
1287 while (doit && gps) {
1298 if (gps_target !=
NULL) {
1339 gp_settings = brush->gpencil_settings;
1342 gp_settings = eraser->gpencil_settings;
1348 const int mval_i[2] = {
x,
y};
1352 float diff_mat[4][4];
1367 if (depth_pt > depth_mval) {
1379 const float mval[2],
1441 for (i = 1; i < gps->
totpoints - 1; i++, pt++) {
1443 pt2 = &gps->
points[i + 1];
1452 for (i = gps->
totpoints - 1; i > 0; i--, pt--) {
1454 pt2 = &gps->
points[i - 1];
1467 const float mval[2],
1502 for (i = 0; (i + 1) < gps->
totpoints; i++) {
1528 const float cull_thresh = 0.005f;
1531 const float strength = 0.1f;
1534 bool do_cull =
false;
1555 for (i = 0; (i + 1) < gps->
totpoints; i++) {
1559 pt2 = gps->
points + i + 1;
1595 bool is_occluded_pt0 =
true, is_occluded_pt1 =
true, is_occluded_pt2 =
true;
1601 if (is_occluded_pt0) {
1605 if (is_occluded_pt1) {
1612 if (!is_occluded_pt0 || !is_occluded_pt1 || !is_occluded_pt2) {
1623 float influence = 0.0f;
1627 pt0->
strength -= influence * strength * f_strength * 0.5f;
1629 pt0->
pressure -= influence * strength * f_thickness * 0.5f;
1633 pt1->
strength -= influence * strength * f_strength;
1635 pt1->
pressure -= influence * strength * f_thickness;
1638 pt2->
strength -= influence * strength * f_strength * 0.5f;
1640 pt2->
pressure -= influence * strength * f_thickness * 0.5f;
1679 if ((inf1 > 0.0f) &&
1685 if ((inf1 > 2.0f) &&
1719 bool use_pressure =
false;
1734 CLAMP(press, 0.01f, 1.0f);
1737 const int calc_radius = (int)p->
radius * press;
1738 rect.
xmin = p->
mval[0] - calc_radius;
1739 rect.
ymin = p->
mval[1] - calc_radius;
1740 rect.
xmax = p->
mval[0] + calc_radius;
1741 rect.
ymax = p->
mval[1] + calc_radius;
1759 bGPDframe *init_gpf = (is_multiedit) ? gpl->frames.first : gpl->actframe;
1765 if ((gpf == gpl->actframe) || ((gpf->flag &
GP_FRAME_SELECT) && (is_multiedit))) {
1794 if (!is_multiedit) {
1833 if (brush->gpencil_settings ==
NULL) {
1838 if (brush_dft ==
NULL) {
1855 brush_dft->
size = 30.0f;
1870 if (brush_dft ==
NULL) {
1876 if (brush == brush_dft) {
1894 bool changed =
false;
1956 if (curarea ==
NULL) {
1991 ushort local_view_bits = 0;
2010 if (*gpd_ptr ==
NULL) {
2117 bool changed =
false;
2148 bool has_layer_to_erase =
false;
2167 if (gpl->actframe && gpl->actframe->strokes.first) {
2172 has_layer_to_erase =
true;
2182 if (has_layer_to_erase ==
false) {
2191 short add_frame_mode;
2359 float viewport_size[4];
2361 immUniform2f(
"viewport_size", viewport_size[2], viewport_size[3]);
2489 if (event !=
NULL) {
2513 TIP_(
"Grease Pencil Erase Session: Hold and drag LMB or RMB to erase | "
2514 "ESC/Enter to end (or click outside this area)"));
2519 TIP_(
"Grease Pencil Line Session: Hold and drag LMB to draw | "
2520 "ESC/Enter to end (or click outside this area)"));
2526 TIP_(
"Grease Pencil Guides: LMB click and release to place reference point | "
2527 "Esc/RMB to cancel"));
2535 TIP_(
"Grease Pencil Freehand Session: Hold and drag LMB to draw | "
2536 "M key to flip guide | O key to move reference point"));
2540 C,
TIP_(
"Grease Pencil Freehand Session: Hold and drag LMB to draw"));
2547 C,
TIP_(
"Grease Pencil Session: ESC/Enter to end (or click outside this area)"));
2569 const float origin[2],
2582 if (spacing > 0.0f) {
2583 v -= spacing * 0.5f;
2585 v = roundf((
v + spacing * 0.5f) / spacing) * spacing;
2593 const float origin[2],
2594 const float spacing,
2647 scale = vec[2] * rv3d->
pixsize;
2675 angle -= half_angle;
2686 switch (guide->
type) {
2759 float last_mouse[2];
2766 bool is_speed_guide = ((guide->
use_guide) &&
2768 if (is_speed_guide) {
2832 bool is_speed_guide = ((guide->
use_guide) &&
2842 if ((is_speed_guide) ||
2847 if ((dx > 0) || (dy > 0)) {
2866 p->
pressure =
event->tablet.pressure;
2926 if (is_speed_guide) {
2971 if (is_speed_guide) {
2985 mousef[0] = p->
mval[0];
2986 mousef[1] = p->
mval[1];
3025 p->
mval[0] = mousef[0];
3026 p->
mval[1] = mousef[1];
3074 bool add_notifier =
false;
3081 add_notifier =
true;
3089 add_notifier =
true;
3094 add_notifier =
true;
3098 add_notifier =
true;
3102 add_notifier =
true;
3107 add_notifier =
false;
3112 add_notifier =
true;
3115 guide->
angle = 0.0f;
3128 add_notifier =
true;
3145 add_notifier =
true;
3187 bool has_layer_to_erase =
false;
3191 if (gpl->actframe && gpl->actframe->strokes.first) {
3192 has_layer_to_erase =
true;
3197 if (!has_layer_to_erase) {
3283 printf(
"\t\t\tGP - wrong area execution abort!\n");
3359 tGPspoint *pt_before = &points[idx_prev - 1];
3360 tGPspoint *pt_prev = &points[idx_prev - 2];
3365 float v_prev[2], v_cur[2], v_half[2];
3368 sub_v2_v2v2(v_prev, pt_prev->m_xy, pt_before->m_xy);
3373 const float min_angle =
DEG2RADF(120.0f);
3375 if (
angle < min_angle) {
3402 float stepcolor = 1.0f / segments;
3405 for (
int i = 0; i < segments; i++) {
3406 pt = &points[idx_prev + i - 1];
3411 pt->pressure = pt_prev->pressure;
3412 pt->strength = pt_prev->strength;
3415 pt->vert_color, pt_before->vert_color, pt_prev->vert_color, stepcolor * (i + 1));
3420 CLAMP(pt->pressure, pt_prev->pressure * 0.5f, 1.0f);
3434 const float start[2],
3454 tGPspoint *pt_before = &points[idx_prev - 1];
3468 for (
int i = 0; i < segments; i++) {
3469 pt = &points[idx_prev + i - 1];
3476 pt->pressure = pt_before->pressure;
3477 pt->strength = pt_before->strength;
3478 copy_v4_v4(pt->vert_color, pt_before->vert_color);
3482 float step = 1.0f / (
float)(segments + 1);
3485 for (
int i = 0; i < segments; i++) {
3486 pt = &points[idx_prev + i - 1];
3493 pt->pressure = pt_before->pressure;
3494 pt->strength = pt_before->strength;
3495 copy_v4_v4(pt->vert_color, pt_before->vert_color);
3514 bool is_speed_guide = ((guide->
use_guide) &&
3523 if (input_samples == 0) {
3529 float mouse_prv[2], mouse_cur[2];
3530 float min_dist = 4.0f * samples;
3536 float dist =
len_v2v2(mouse_prv, mouse_cur);
3548 if ((dist > 3.0f) && (dist > min_dist)) {
3549 int slices = (dist / min_dist) + 1;
3551 if (is_speed_guide) {
3589 bool drawmode =
false;
3591 switch (event->
type) {
3684 bool in_bounds =
false;
3694 if (current_region) {
3698 p->
region = current_region;
3761 bool is_speed_guide = ((guide->
use_guide) &&
3775 if (!is_speed_guide && (size_after - size_before > 1)) {
3776 for (
int r = 0;
r < 5;
r++) {
3783 printf(
"\t\t\t\tGP - add error done!\n");
3795 switch (event->
type) {
3871 "Draw Straight Lines",
3872 "Draw straight line segment(s)"},
3882 ot->
name =
"Grease Pencil Draw";
3884 ot->
description =
"Draw a new stroke in the active Grease Pencil object";
3909 "Wait for first click instead of painting immediately");
3913 ot->
srna,
"disable_straight",
false,
"No Straight lines",
"Disable key for straight lines");
3920 "Disable fill to use stroke as fill boundary");
3933 "Speed guide angle",
3947 float oldangle = guide->
angle;
3961 ot->
name =
"Rotate Guide Angle";
3962 ot->
idname =
"GPENCIL_OT_guide_rotate";
3976 ot->
srna,
"angle", 0.0f, -10000.0f, 10000.0f,
"Angle",
"Guide angle", -10000.0f, 10000.0f);
typedef float(TangentPoint)[2]
void BKE_brush_gpencil_paint_presets(struct Main *bmain, struct ToolSettings *ts, bool reset)
struct Brush * BKE_brush_add_gpencil(struct Main *bmain, struct ToolSettings *ts, const char *name, eObjectMode mode)
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 bScreen * CTX_wm_screen(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
void CTX_wm_operator_poll_msg_set(struct bContext *C, const char *msg)
struct Main * CTX_data_main(const bContext *C)
struct ToolSettings * CTX_data_tool_settings(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
struct bGPDlayer * BKE_gpencil_layer_active_get(struct bGPdata *gpd)
void BKE_gpencil_free_stroke_weights(struct bGPDstroke *gps)
void BKE_gpencil_stroke_select_index_reset(struct bGPDstroke *gps)
struct bGPDlayer * BKE_gpencil_layer_addnew(struct bGPdata *gpd, const char *name, bool setactive, bool add_to_header)
void BKE_gpencil_dvert_ensure(struct bGPDstroke *gps)
bool BKE_gpencil_layer_is_editable(const struct bGPDlayer *gpl)
struct Material * BKE_gpencil_object_material_ensure_from_active_input_brush(struct Main *bmain, struct Object *ob, struct Brush *brush)
#define GPENCIL_ALPHA_OPACITY_THRESH
struct bGPDframe * BKE_gpencil_layer_frame_get(struct bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
int BKE_gpencil_object_material_get_index_from_brush(struct Object *ob, struct Brush *brush)
#define GPENCIL_STRENGTH_MIN
struct bGPdata * BKE_gpencil_data_addnew(struct Main *bmain, const char name[])
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_editcurve_stroke_sync_selection(struct bGPdata *gpd, struct bGPDstroke *gps, struct bGPDcurve *gpc)
void BKE_gpencil_stroke_copy_to_keyframes(struct bGPdata *gpd, struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps, bool tail)
void BKE_gpencil_stroke_simplify_adaptive(struct bGPdata *gpd, struct bGPDstroke *gps, float epsilon)
void BKE_gpencil_stroke_geometry_update(struct bGPdata *gpd, struct bGPDstroke *gps)
bool BKE_gpencil_stroke_smooth_strength(struct bGPDstroke *gps, int point_index, float influence, int iterations, struct bGPDstroke *r_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_boundingbox_calc(struct bGPDstroke *gps)
struct bGPDstroke * BKE_gpencil_stroke_delete_tagged_points(struct bGPdata *gpd, struct bGPDframe *gpf, struct bGPDstroke *gps, struct bGPDstroke *next_stroke, int tag_flags, bool select, bool flat_cap, int limit)
bool BKE_gpencil_stroke_smooth_point(struct bGPDstroke *gps, int point_index, float influence, int iterations, bool smooth_caps, bool keep_shape, struct bGPDstroke *r_gps)
bool BKE_gpencil_stroke_trim(struct bGPdata *gpd, struct bGPDstroke *gps)
void BKE_gpencil_tag_full_update(struct bGPdata *gpd, struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps)
General operations, lookup, etc. for materials.
short BKE_object_material_slot_find_index(struct Object *ob, struct Material *ma)
void BKE_paint_brush_set(struct Paint *paint, struct Brush *br)
struct Brush * BKE_paint_brush(struct Paint *paint)
void BKE_report(ReportList *reports, eReportType type, const char *message)
struct ARegion * BKE_area_find_region_xy(struct ScrArea *area, int regiontype, const int xy[2]) ATTR_NONNULL(3)
BLI_INLINE float BLI_hash_int_01(unsigned int k)
BLI_INLINE unsigned int BLI_hash_int_2d(unsigned int kx, unsigned int ky)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(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 int max_ii(int a, int b)
MINLINE float square_f(float a)
MINLINE float interpf(float a, float b, float t)
int interp_sparse_array(float *array, int list_size, float skipval)
MINLINE float cross_tri_v2(const float v1[2], const float v2[2], const float v3[2])
float closest_to_line_v2(float r_close[2], const float p[2], const float l1[2], const float l2[2])
void unit_m4(float m[4][4])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
void loc_eul_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3])
float angle_compat_rad(float angle, float angle_compat)
float angle_v2v2v2(const float a[2], const float b[2], const float c[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void round_v2i_v2fl(int r[2], const float a[2])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE void copy_v2fl_v2i(float r[2], const int a[2])
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void madd_v2_v2fl(float r[2], const float a[2], float f)
float angle_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2(float r[2], const float a[2])
MINLINE float len_v2v2_int(const int v1[2], const int v2[2])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v2_fl(float r[2], float f)
void interp_v2_v2v2(float r[2], const float a[2], const float b[2], float t)
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
void dist_ensure_v2_v2fl(float v1[2], const float v2[2], float dist)
MINLINE void copy_v3_v3(float r[3], const float a[3])
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], float t)
void mid_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE float dot_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
void rotate_v2_v2fl(float r[2], const float p[2], float angle)
MINLINE float len_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void zero_v3(float r[3])
MINLINE float normalize_v2(float r[2])
void BLI_rng_free(struct RNG *rng) ATTR_NONNULL(1)
struct RNG * BLI_rng_new(unsigned int seed)
float BLI_rng_get_float(struct RNG *rng) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
bool BLI_rcti_isect_pt_v(const struct rcti *rect, const int xy[2])
bool BLI_rcti_isect_pt(const struct rcti *rect, int x, int y)
#define POINTER_AS_UINT(i)
typedef double(DMatrix)[4][4]
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
struct Object * DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct Object *object)
@ ID_RECALC_COPY_ON_WRITE
@ GP_BRUSH_USE_STRENGTH_RAND_PRESS
@ GP_BRUSH_USE_STRENGTH_AT_STROKE
@ GP_BRUSH_USE_UV_RAND_PRESS
@ GP_BRUSH_USE_PRESS_AT_STROKE
@ GP_BRUSH_USE_UV_AT_STROKE
@ GP_BRUSH_USE_PRESSURE_RAND_PRESS
@ GP_BRUSH_STABILIZE_MOUSE_TEMP
@ GP_BRUSH_OCCLUDE_ERASER
@ GP_BRUSH_DEFAULT_ERASER
@ GP_BRUSH_USE_STRENGTH_PRESSURE
@ GP_BRUSH_GROUP_SETTINGS
@ GP_BRUSH_USE_JITTER_PRESSURE
@ GP_BRUSH_ICON_ERASE_SOFT
#define GP_MAX_INPUT_SAMPLES
#define GPENCIL_MULTIEDIT_SESSIONS_ON(gpd)
#define GPENCIL_PAINT_MODE(gpd)
@ GP_DATA_STROKE_WEIGHTMODE
@ GP_DATA_STROKE_PAINTMODE
@ GP_DATA_STROKE_SCULPTMODE
@ GP_DATA_STROKE_EDITMODE
#define GPENCIL_LAZY_MODE(brush, shift)
Object is a sort of wrapper for general info.
@ GP_PROJECT_DEPTH_STROKE_ENDPOINTS
@ GP_PROJECT_DEPTH_STROKE
@ GP_PROJECT_DEPTH_STROKE_FIRST
@ GP_TOOL_FLAG_RETAIN_LAST
@ GP_TOOL_FLAG_PAINT_ONBACK
@ GP_TOOL_FLAG_AUTOMERGE_STROKE
@ GP_TOOL_FLAG_CREATE_WEIGHTS
@ OP_IS_MODAL_CURSOR_REGION
#define GPENCIL_MINIMUM_JOIN_DIST
#define IS_AUTOKEY_ON(scene)
bool ED_operator_regionactive(struct bContext *C)
void ED_region_tag_redraw(struct ARegion *region)
void ED_workspace_status_text(struct bContext *C, const char *str)
const rcti * ED_region_visible_rect(ARegion *region)
bool ED_view3d_depth_read_cached(const ViewDepths *vd, const int mval[2], int margin, float *r_depth)
void ED_view3d_win_to_delta(const struct ARegion *region, const float xy_delta[2], float zfac, float r_out[3])
eV3DProjStatus ED_view3d_project_float_global(const struct ARegion *region, const float co[3], float r_co[2], eV3DProjTest flag)
bool ED_view3d_depth_read_cached_seg(const ViewDepths *vd, const int mval_sta[2], const int mval_end[2], int margin, float *depth)
void ED_view3d_depths_free(ViewDepths *depths)
float ED_view3d_calc_zfac(const struct RegionView3D *rv3d, const float co[3])
bool ED_view3d_depth_unproject_v3(const struct ARegion *region, const int mval[2], double depth, float r_location_world[3])
void view3d_region_operator_needs_opengl(struct wmWindow *win, struct ARegion *region)
bool ED_view3d_autodist_simple(struct ARegion *region, const int mval[2], float mouse_worldloc[3], int margin, const float *force_depth)
void ED_view3d_calc_camera_border(const struct Scene *scene, struct Depsgraph *depsgraph, const struct ARegion *region, const struct View3D *v3d, const struct RegionView3D *rv3d, struct rctf *r_viewborder, bool no_shift)
void ED_view3d_depth_override(struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, struct Object *obact, eV3DDepthOverrideMode mode, struct ViewDepths **r_depths)
float ED_view3d_calc_depth_for_comparison(const struct RegionView3D *rv3d, const float co[3])
_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 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
@ GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR
@ GPU_SHADER_2D_UNIFORM_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_smooth(bool enable)
void GPU_viewport_size_get_f(float coords[4])
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
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
Platform independent time functions.
#define RNA_BEGIN(sptr, itemptr, propname)
#define ND_SPACE_PROPERTIES
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
const Depsgraph * depsgraph
@ GP_PAINTMODE_DRAW_STRAIGHT
void gpencil_point_3d_to_xy(const GP_SpaceConversion *gsc, short flag, const float pt[3], float xy[2])
void gpencil_point_to_parent_space(const bGPDspoint *pt, const float diff_mat[4][4], bGPDspoint *r_pt)
void gpencil_apply_parent_point(struct Depsgraph *depsgraph, struct Object *obact, bGPDlayer *gpl, bGPDspoint *pt)
void gpencil_undo_finish(void)
void gpencil_apply_parent(struct Depsgraph *depsgraph, struct Object *obact, bGPDlayer *gpl, bGPDstroke *gps)
bool gpencil_stroke_inside_circle(const float mval[2], int rad, int x0, int y0, int x1, int y1)
void gpencil_subdivide_stroke(bGPdata *gpd, bGPDstroke *gps, int subdivide)
void gpencil_point_to_xy(const GP_SpaceConversion *gsc, const struct bGPDstroke *gps, const struct bGPDspoint *pt, int *r_x, int *r_y)
void GPENCIL_OT_guide_rotate(wmOperatorType *ot)
static tGPsdata * gpencil_session_initpaint(bContext *C, wmOperator *op)
static void gpencil_update_cache(bGPdata *gpd)
static int gpencil_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static float gpencil_stroke_eraser_calc_influence(tGPsdata *p, const float mval[2], const int radius, const int co[2])
void GPENCIL_OT_draw(wmOperatorType *ot)
static void gpencil_stroke_doeraser(tGPsdata *p)
static tGPsdata * gpencil_stroke_begin(bContext *C, wmOperator *op)
static void gpencil_free_stroke(bGPdata *gpd, bGPDframe *gpf, bGPDstroke *gps)
static void gpencil_paint_strokeend(tGPsdata *p)
static void gpencil_brush_angle(bGPdata *gpd, Brush *brush, tGPspoint *pt, const float mval[2])
static void gpencil_session_validatebuffer(tGPsdata *p)
@ GP_PAINTFLAG_HARD_ERASER
@ GP_PAINTFLAG_SELECTMASK
@ GP_PAINTFLAG_REQ_VECTOR
@ GP_PAINTFLAG_STROKE_ERASER
static void gpencil_reproject_toplane(tGPsdata *p, bGPDstroke *gps)
static void gpencil_get_3d_reference(tGPsdata *p, float vec[3])
static void gpencil_rotate_v2_v2v2fl(float v[2], const float p[2], const float origin[2], const float angle)
static int gpencil_draw_exec(bContext *C, wmOperator *op)
static void gpencil_guide_event_handling(bContext *C, wmOperator *op, const wmEvent *event, tGPsdata *p)
static bool gpencil_project_check(tGPsdata *p)
static void gpencil_brush_angle_segment(tGPsdata *p, tGPspoint *pt_prev, tGPspoint *pt)
static void gpencil_session_free(tGPsdata *p)
static short gpencil_stroke_addpoint(tGPsdata *p, const float mval[2], float pressure, double curtime)
static bool gpencil_is_tablet_eraser_active(const wmEvent *event)
static void gpencil_add_fake_points(const wmEvent *event, tGPsdata *p)
static void gpencil_stroke_eraser_dostroke(tGPsdata *p, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps, const float mval[2], const int radius, const rcti *rect)
static void gpencil_add_arc_points(tGPsdata *p, const float mval[2], int segments)
static void gpencil_stroke_convertcoords(tGPsdata *p, const float mval[2], float out[3], float *depth)
static void gpencil_snap_to_guide(const tGPsdata *p, const GP_Sculpt_Guide *guide, float point[2])
static void gpencil_draw_eraser(bContext *UNUSED(C), int x, int y, void *p_ptr)
static void gpencil_stroke_newfrombuffer(tGPsdata *p)
static void gpencil_stroke_soft_refine(bGPDstroke *gps)
static bool gpencil_stroke_filtermval(tGPsdata *p, const float mval[2], const float mvalo[2])
static void gpencil_paint_cleanup(tGPsdata *p)
static void gpencil_add_guide_points(const tGPsdata *p, const GP_Sculpt_Guide *guide, const float start[2], const float end[2], int segments)
static bool gpencil_session_initdata(bContext *C, wmOperator *op, tGPsdata *p)
static void gpencil_origin_get(tGPsdata *p, float origin[2])
static float gpencil_snap_to_grid_fl(float v, const float offset, const float spacing)
static bool gpencil_draw_poll(bContext *C)
static void gpencil_apply_randomness(tGPsdata *p, BrushGpencilSettings *brush_settings, tGPspoint *pt, const bool press, const bool strength, const bool uv)
static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
#define STROKE_HORIZONTAL
static int gpencil_draw_init(bContext *C, wmOperator *op, const wmEvent *event)
static bool gpencil_stroke_eraser_is_occluded(tGPsdata *p, bGPDlayer *gpl, bGPDspoint *pt, const int x, const int y)
static void gpencil_smooth_buffer(tGPsdata *p, float inf, int idx)
static Brush * gpencil_get_default_eraser(Main *bmain, ToolSettings *ts)
static void gpencil_origin_set(wmOperator *op, const int mval[2])
static void gpencil_smooth_segment(bGPdata *gpd, const float inf, int from_idx, int to_idx)
static void gpencil_init_drawing_brush(bContext *C, tGPsdata *p)
static void gpencil_snap_to_rotated_grid_fl(float v[2], const float origin[2], const float spacing, const float angle)
static int gpencil_guide_rotate(bContext *C, wmOperator *op)
static void gpencil_init_colors(tGPsdata *p)
static void gpencil_brush_jitter(bGPdata *gpd, tGPspoint *pt, const float amplitude)
static void gpencil_draw_apply_event(bContext *C, wmOperator *op, const wmEvent *event, Depsgraph *depsgraph)
static void gpencil_draw_cancel(bContext *C, wmOperator *op)
static void gpencil_speed_guide_init(tGPsdata *p, GP_Sculpt_Guide *guide)
static void gpencil_draw_apply(bContext *C, wmOperator *op, tGPsdata *p, Depsgraph *depsgraph)
static void gpencil_draw_status_indicators(bContext *C, tGPsdata *p)
static void gpencil_stroke_unselect(bGPdata *gpd, bGPDstroke *gps)
static void gpencil_set_default_eraser(Main *bmain, Brush *brush_dft)
static void gpencil_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode, Depsgraph *depsgraph)
static const EnumPropertyItem prop_gpencil_drawmodes[]
static void gpencil_session_cleanup(tGPsdata *p)
static void gpencil_draw_exit(bContext *C, wmOperator *op)
static bool gpencil_area_exists(bContext *C, ScrArea *area_test)
static void gpencil_draw_toggle_eraser_cursor(tGPsdata *p, short enable)
int ED_gpencil_session_active(void)
void ED_gpencil_stroke_close_by_distance(bGPDstroke *gps, const float threshold)
Object * ED_gpencil_add_object(bContext *C, const float loc[3], ushort local_view_bits)
bool ED_gpencil_stroke_material_editable(Object *ob, const bGPDlayer *gpl, const bGPDstroke *gps)
void ED_gpencil_project_point_to_plane(const Scene *scene, const Object *ob, bGPDlayer *gpl, const RegionView3D *rv3d, const float origin[3], const int axis, bGPDspoint *pt)
void ED_gpencil_project_stroke_to_plane(const Scene *scene, const Object *ob, const RegionView3D *rv3d, bGPDlayer *gpl, bGPDstroke *gps, const float origin[3], const int axis)
void ED_gpencil_project_stroke_to_view(bContext *C, bGPDlayer *gpl, bGPDstroke *gps)
bGPDstroke * ED_gpencil_stroke_join_and_trim(bGPdata *gpd, bGPDframe *gpf, bGPDstroke *gps, bGPDstroke *gps_dst, const int pt_index)
bool ED_gpencil_stroke_can_use_direct(const ScrArea *area, const bGPDstroke *gps)
void ED_gpencil_fill_vertex_color_set(ToolSettings *ts, Brush *brush, bGPDstroke *gps)
void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable, void *customdata)
void ED_gpencil_init_random_settings(Brush *brush, const int mval[2], GpRandomSettings *random_settings)
bGPDstroke * ED_gpencil_stroke_nearest_to_ends(bContext *C, const GP_SpaceConversion *gsc, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps, const float ctrl1[2], const float ctrl2[2], const float radius, int *r_index)
bool ED_gpencil_stroke_check_collision(const GP_SpaceConversion *gsc, bGPDstroke *gps, const float mval[2], const int radius, const float diff_mat[4][4])
bGPdata ** ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *r_ptr)
void ED_gpencil_sbuffer_update_eval(bGPdata *gpd, Object *ob_eval)
void ED_gpencil_point_vertex_color_set(ToolSettings *ts, Brush *brush, bGPDspoint *pt, tGPspoint *tpt)
void ED_gpencil_stroke_extremes_to2d(const GP_SpaceConversion *gsc, const float diff_mat[4][4], bGPDstroke *gps, float r_ctrl1[2], float r_ctrl2[2])
void ED_gpencil_tpoint_to_point(ARegion *region, float origin[3], const tGPspoint *tpt, bGPDspoint *pt)
void ED_gpencil_drawing_reference_get(const Scene *scene, const Object *ob, char align_flag, float r_vec[3])
bool ED_gpencil_data_owner_is_annotation(PointerRNA *owner_ptr)
void ED_gpencil_sbuffer_vertex_color_set(Depsgraph *depsgraph, Object *ob, ToolSettings *ts, Brush *brush, Material *material, float random_color[3], float pen_pressure)
tGPspoint * ED_gpencil_sbuffer_ensure(tGPspoint *buffer_array, int *buffer_size, int *buffer_used, const bool clear)
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
ccl_device_inline float2 fabs(const float2 &a)
ccl_device_inline float3 pow(float3 v, float e)
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
INLINE Rall1d< T, V, S > sin(const Rall1d< T, V, S > &arg)
static void area(int d1, int d2, int e1, int e2, float weights[2])
T distance(const T &a, const T &b)
T midpoint(const T &a, const T &b)
static const pxr::TfToken out("out", pxr::TfToken::Immortal)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
void RNA_collection_add(PointerRNA *ptr, const char *name, PointerRNA *r_value)
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)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
void RNA_float_set_array(PointerRNA *ptr, const char *name, const float *values)
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_collection_runtime(StructOrFunctionRNA *cont_, const char *identifier, StructRNA *type, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
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 * curve_sensitivity
struct CurveMapping * curve_strength
struct CurveMapping * curve_jitter
struct CurveMapping * curve_rand_pressure
struct CurveMapping * curve_rand_strength
struct CurveMapping * curve_rand_saturation
struct CurveMapping * curve_rand_hue
float draw_random_strength
struct CurveMapping * curve_rand_uv
struct CurveMapping * curve_rand_value
float smooth_stroke_factor
struct BrushGpencilSettings * gpencil_settings
struct Object * reference_object
struct GP_Sculpt_Guide guide
struct ToolSettings * toolsettings
unsigned short local_view_uuid
struct bGPDcurve * editcurve
struct MDeformVert * dvert
ListBase vertex_group_names
int vertex_group_active_index
eGPencil_PaintStatus status
eGPencil_PaintModes paintmode
eGPencil_PaintFlags flags
GpRandomSettings random_settings
struct Depsgraph * depsgraph
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 *)
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
double PIL_check_seconds_timer(void)
long int PIL_check_seconds_timer_i(void)
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)
#define ISMOUSE_MOTION(event_type)
#define ISKEYBOARD(event_type)
bool WM_paint_cursor_end(wmPaintCursor *handle)
wmPaintCursor * WM_paint_cursor_activate(short space_type, short region_type, bool(*poll)(bContext *C), wmPaintCursorDraw draw, void *customdata)