Blender  V3.3
Classes | Macros | Typedefs | Enumerations | Functions | Variables
gpencil_paint.c File Reference
#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_hash.h"
#include "BLI_math.h"
#include "BLI_math_geom.h"
#include "BLI_rand.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "PIL_time.h"
#include "DNA_brush_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_material_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_windowmanager_types.h"
#include "BKE_brush.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_deform.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
#include "BKE_gpencil_curve.h"
#include "BKE_gpencil_geom.h"
#include "BKE_gpencil_update_cache.h"
#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_paint.h"
#include "BKE_report.h"
#include "BKE_screen.h"
#include "BKE_tracking.h"
#include "UI_view2d.h"
#include "ED_clip.h"
#include "ED_gpencil.h"
#include "ED_keyframing.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "GPU_immediate.h"
#include "GPU_immediate_util.h"
#include "GPU_state.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_prototypes.h"
#include "WM_api.h"
#include "WM_types.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "gpencil_intern.h"

Go to the source code of this file.

Classes

struct  tGPguide
 
struct  tGPsdata
 

Macros

#define STROKE_HORIZONTAL   1
 
#define STROKE_VERTICAL   2
 
#define MIN_MANHATTEN_PX   (U.gp_manhattandist)
 
#define MIN_EUCLIDEAN_PX   (U.gp_euclideandist)
 

Typedefs

typedef enum eGPencil_PaintStatus eGPencil_PaintStatus
 
typedef enum eGP_StrokeAdd_Result eGP_StrokeAdd_Result
 
typedef enum eGPencil_PaintFlags eGPencil_PaintFlags
 
typedef struct tGPguide tGPguide
 
typedef struct tGPsdata tGPsdata
 

Enumerations

enum  eGPencil_PaintStatus {
  GP_STATUS_IDLING = 0 , GP_STATUS_PAINTING , GP_STATUS_ERROR , GP_STATUS_DONE ,
  GP_STATUS_CAPTURE , GP_STATUS_IDLING = 0 , GP_STATUS_PAINTING , GP_STATUS_ERROR ,
  GP_STATUS_DONE
}
 
enum  eGP_StrokeAdd_Result {
  GP_STROKEADD_INVALID = -2 , GP_STROKEADD_OVERFLOW = -1 , GP_STROKEADD_NORMAL , GP_STROKEADD_FULL ,
  GP_STROKEADD_INVALID = -2 , GP_STROKEADD_OVERFLOW = -1 , GP_STROKEADD_NORMAL , GP_STROKEADD_FULL
}
 
enum  eGPencil_PaintFlags {
  GP_PAINTFLAG_FIRSTRUN = (1 << 0) , GP_PAINTFLAG_STROKEADDED = (1 << 1) , GP_PAINTFLAG_V3D_ERASER_DEPTH = (1 << 2) , GP_PAINTFLAG_SELECTMASK = (1 << 3) ,
  GP_PAINTFLAG_USE_STABILIZER = (1 << 7) , GP_PAINTFLAG_USE_STABILIZER_TEMP = (1 << 8) , GP_PAINTFLAG_FIRSTRUN = (1 << 0) , GP_PAINTFLAG_SELECTMASK = (1 << 3) ,
  GP_PAINTFLAG_HARD_ERASER = (1 << 4) , GP_PAINTFLAG_STROKE_ERASER = (1 << 5) , GP_PAINTFLAG_REQ_VECTOR = (1 << 6)
}
 

Functions

static void gpencil_update_cache (bGPdata *gpd)
 
static void gpencil_session_validatebuffer (tGPsdata *p)
 
static bool gpencil_draw_poll (bContext *C)
 
static bool gpencil_project_check (tGPsdata *p)
 
static void gpencil_get_3d_reference (tGPsdata *p, float vec[3])
 
static bool gpencil_stroke_filtermval (tGPsdata *p, const float mval[2], const float mvalo[2])
 
static void gpencil_reproject_toplane (tGPsdata *p, bGPDstroke *gps)
 
static void gpencil_stroke_convertcoords (tGPsdata *p, const float mval[2], float out[3], float *depth)
 
static void gpencil_brush_jitter (bGPdata *gpd, tGPspoint *pt, const float amplitude)
 
static void gpencil_brush_angle (bGPdata *gpd, Brush *brush, tGPspoint *pt, const float mval[2])
 
static void gpencil_smooth_buffer (tGPsdata *p, float inf, int idx)
 
static void gpencil_smooth_segment (bGPdata *gpd, const float inf, int from_idx, int to_idx)
 
static void gpencil_apply_randomness (tGPsdata *p, BrushGpencilSettings *brush_settings, tGPspoint *pt, const bool press, const bool strength, const bool uv)
 
static short gpencil_stroke_addpoint (tGPsdata *p, const float mval[2], float pressure, double curtime)
 
static void gpencil_stroke_unselect (bGPdata *gpd, bGPDstroke *gps)
 
static void gpencil_stroke_newfrombuffer (tGPsdata *p)
 
static bool gpencil_stroke_eraser_is_occluded (tGPsdata *p, bGPDlayer *gpl, bGPDspoint *pt, const int x, const int y)
 
static float gpencil_stroke_eraser_calc_influence (tGPsdata *p, const float mval[2], const int radius, const int co[2])
 
static void gpencil_free_stroke (bGPdata *gpd, bGPDframe *gpf, bGPDstroke *gps)
 
static void gpencil_stroke_soft_refine (bGPDstroke *gps)
 
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_stroke_doeraser (tGPsdata *p)
 
static Brushgpencil_get_default_eraser (Main *bmain, ToolSettings *ts)
 
static void gpencil_set_default_eraser (Main *bmain, Brush *brush_dft)
 
static void gpencil_init_drawing_brush (bContext *C, tGPsdata *p)
 
static void gpencil_init_colors (tGPsdata *p)
 
static bool gpencil_session_initdata (bContext *C, wmOperator *op, tGPsdata *p)
 
static tGPsdatagpencil_session_initpaint (bContext *C, wmOperator *op)
 
static void gpencil_session_cleanup (tGPsdata *p)
 
static void gpencil_session_free (tGPsdata *p)
 
static void gpencil_paint_initstroke (tGPsdata *p, eGPencil_PaintModes paintmode, Depsgraph *depsgraph)
 
static void gpencil_paint_strokeend (tGPsdata *p)
 
static void gpencil_paint_cleanup (tGPsdata *p)
 
static void gpencil_draw_eraser (bContext *UNUSED(C), int x, int y, void *p_ptr)
 
static void gpencil_draw_toggle_eraser_cursor (tGPsdata *p, short enable)
 
static bool gpencil_is_tablet_eraser_active (const wmEvent *event)
 
static void gpencil_draw_exit (bContext *C, wmOperator *op)
 
static void gpencil_draw_cancel (bContext *C, wmOperator *op)
 
static int gpencil_draw_init (bContext *C, wmOperator *op, const wmEvent *event)
 
static void gpencil_draw_status_indicators (bContext *C, tGPsdata *p)
 
static void gpencil_rotate_v2_v2v2fl (float v[2], const float p[2], const float origin[2], const float angle)
 
static float gpencil_snap_to_grid_fl (float v, const float offset, const float spacing)
 
static void gpencil_snap_to_rotated_grid_fl (float v[2], const float origin[2], const float spacing, const float angle)
 
static void gpencil_origin_set (wmOperator *op, const int mval[2])
 
static void gpencil_origin_get (tGPsdata *p, float origin[2])
 
static void gpencil_speed_guide_init (tGPsdata *p, GP_Sculpt_Guide *guide)
 
static void gpencil_snap_to_guide (const tGPsdata *p, const GP_Sculpt_Guide *guide, float point[2])
 
static void gpencil_draw_apply (bContext *C, wmOperator *op, tGPsdata *p, Depsgraph *depsgraph)
 
static void gpencil_draw_apply_event (bContext *C, wmOperator *op, const wmEvent *event, Depsgraph *depsgraph)
 
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 int gpencil_draw_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static bool gpencil_area_exists (bContext *C, ScrArea *area_test)
 
static tGPsdatagpencil_stroke_begin (bContext *C, wmOperator *op)
 
static void gpencil_brush_angle_segment (tGPsdata *p, tGPspoint *pt_prev, tGPspoint *pt)
 
static void gpencil_add_arc_points (tGPsdata *p, const float mval[2], int segments)
 
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 void gpencil_add_fake_points (const wmEvent *event, tGPsdata *p)
 
static int gpencil_draw_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
void GPENCIL_OT_draw (wmOperatorType *ot)
 
static int gpencil_guide_rotate (bContext *C, wmOperator *op)
 
void GPENCIL_OT_guide_rotate (wmOperatorType *ot)
 

Variables

static const EnumPropertyItem prop_gpencil_drawmodes []
 

Macro Definition Documentation

◆ MIN_EUCLIDEAN_PX

#define MIN_EUCLIDEAN_PX   (U.gp_euclideandist)

Definition at line 263 of file gpencil_paint.c.

◆ MIN_MANHATTEN_PX

#define MIN_MANHATTEN_PX   (U.gp_manhattandist)

Definition at line 261 of file gpencil_paint.c.

◆ STROKE_HORIZONTAL

#define STROKE_HORIZONTAL   1

Definition at line 256 of file gpencil_paint.c.

◆ STROKE_VERTICAL

#define STROKE_VERTICAL   2

Definition at line 257 of file gpencil_paint.c.

Typedef Documentation

◆ eGP_StrokeAdd_Result

◆ eGPencil_PaintFlags

◆ eGPencil_PaintStatus

◆ tGPguide

typedef struct tGPguide tGPguide

◆ tGPsdata

typedef struct tGPsdata tGPsdata

Enumeration Type Documentation

◆ eGP_StrokeAdd_Result

Enumerator
GP_STROKEADD_INVALID 
GP_STROKEADD_OVERFLOW 
GP_STROKEADD_NORMAL 
GP_STROKEADD_FULL 
GP_STROKEADD_INVALID 
GP_STROKEADD_OVERFLOW 
GP_STROKEADD_NORMAL 
GP_STROKEADD_FULL 

Definition at line 89 of file gpencil_paint.c.

◆ eGPencil_PaintFlags

Enumerator
GP_PAINTFLAG_FIRSTRUN 
GP_PAINTFLAG_STROKEADDED 
GP_PAINTFLAG_V3D_ERASER_DEPTH 
GP_PAINTFLAG_SELECTMASK 
GP_PAINTFLAG_USE_STABILIZER 
GP_PAINTFLAG_USE_STABILIZER_TEMP 
GP_PAINTFLAG_FIRSTRUN 
GP_PAINTFLAG_SELECTMASK 
GP_PAINTFLAG_HARD_ERASER 
GP_PAINTFLAG_STROKE_ERASER 
GP_PAINTFLAG_REQ_VECTOR 

Definition at line 97 of file gpencil_paint.c.

◆ eGPencil_PaintStatus

Enumerator
GP_STATUS_IDLING 
GP_STATUS_PAINTING 
GP_STATUS_ERROR 
GP_STATUS_DONE 
GP_STATUS_CAPTURE 
GP_STATUS_IDLING 
GP_STATUS_PAINTING 
GP_STATUS_ERROR 
GP_STATUS_DONE 

Definition at line 81 of file gpencil_paint.c.

Function Documentation

◆ gpencil_add_arc_points()

static void gpencil_add_arc_points ( tGPsdata p,
const float  mval[2],
int  segments 
)
static

◆ gpencil_add_fake_points()

static void gpencil_add_fake_points ( const wmEvent event,
tGPsdata p 
)
static

◆ gpencil_add_guide_points()

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

◆ gpencil_apply_randomness()

static void gpencil_apply_randomness ( tGPsdata p,
BrushGpencilSettings brush_settings,
tGPspoint pt,
const bool  press,
const bool  strength,
const bool  uv 
)
static

◆ gpencil_area_exists()

static bool gpencil_area_exists ( bContext C,
ScrArea area_test 
)
static

Definition at line 3269 of file gpencil_paint.c.

References bScreen::areabase, BLI_findindex(), C, and CTX_wm_screen().

Referenced by gpencil_draw_modal().

◆ gpencil_brush_angle()

static void gpencil_brush_angle ( bGPdata gpd,
Brush brush,
tGPspoint pt,
const float  mval[2] 
)
static

◆ gpencil_brush_angle_segment()

static void gpencil_brush_angle_segment ( tGPsdata p,
tGPspoint pt_prev,
tGPspoint pt 
)
static

◆ gpencil_brush_jitter()

static void gpencil_brush_jitter ( bGPdata gpd,
tGPspoint pt,
const float  amplitude 
)
static

◆ gpencil_draw_apply()

static void gpencil_draw_apply ( bContext C,
wmOperator op,
tGPsdata p,
Depsgraph depsgraph 
)
static

◆ gpencil_draw_apply_event()

static void gpencil_draw_apply_event ( bContext C,
wmOperator op,
const wmEvent event,
Depsgraph depsgraph 
)
static

Definition at line 2823 of file gpencil_paint.c.

References wmTabletData::active, GP_Sculpt_Guide::angle, atan2f, tGPsdata::brush, C, copy_v2_v2(), copy_v2fl_v2i(), tGPsdata::curtime, wmOperator::customdata, DEG2RAD, depsgraph, ED_region_tag_redraw(), ELEM, EVT_TABLET_ERASER, EVT_TABLET_NONE, fabsf, tGPsdata::flags, GP_GUIDE_GRID, GP_GUIDE_ISO, GP_PAINTFLAG_FIRSTRUN, GP_PAINTFLAG_HARD_ERASER, GP_PAINTFLAG_REQ_VECTOR, GP_PAINTFLAG_STROKE_ERASER, GP_PAINTMODE_ERASER, GP_PAINTMODE_SET_CP, ToolSettings::gp_sculpt, GPAINT_TOOL_DRAW, gpencil_draw_apply(), gpencil_rotate_v2_v2v2fl(), gpencil_snap_to_guide(), gpencil_speed_guide_init(), Brush::gpencil_tool, tGPsdata::guide, GP_Sculpt_Settings::guide, tGPsdata::inittime, KM_ALT, KM_SHIFT, M_PI_2, wmEvent::modifier, tGPsdata::mval, wmEvent::mval, tGPsdata::mvali, tGPsdata::mvalo, tGPsdata::ocurtime, tGPsdata::opressure, tGPsdata::paintmode, GpRandomSettings::pen_press, PIL_check_seconds_timer(), pow(), tGPsdata::pressure, wmOperator::ptr, tGPsdata::random_settings, tGPsdata::region, RNA_boolean_get(), RNA_boolean_set(), RNA_collection_add(), RNA_float_set(), RNA_float_set_array(), tGPguide::rot_angle, tGPguide::rot_point, tGPsdata::scene, tGPsdata::shift, tGPsdata::straight, tGPguide::stroke_angle, STROKE_HORIZONTAL, STROKE_VERTICAL, sub_v2_v2v2(), wmEvent::tablet, Scene::toolsettings, GP_Sculpt_Guide::type, tGPguide::unit, GP_Sculpt_Guide::use_guide, and GP_Sculpt_Guide::use_snapping.

Referenced by gpencil_draw_invoke(), and gpencil_draw_modal().

◆ gpencil_draw_cancel()

static void gpencil_draw_cancel ( bContext C,
wmOperator op 
)
static

Definition at line 2450 of file gpencil_paint.c.

References C, and gpencil_draw_exit().

Referenced by GPENCIL_OT_draw().

◆ gpencil_draw_eraser()

static void gpencil_draw_eraser ( bContext UNUSEDC,
int  x,
int  y,
void p_ptr 
)
static

◆ gpencil_draw_exec()

static int gpencil_draw_exec ( bContext C,
wmOperator op 
)
static

◆ gpencil_draw_exit()

static void gpencil_draw_exit ( bContext C,
wmOperator op 
)
static

◆ gpencil_draw_init()

static int gpencil_draw_init ( bContext C,
wmOperator op,
const wmEvent event 
)
static

◆ gpencil_draw_invoke()

static int gpencil_draw_invoke ( bContext C,
wmOperator op,
const wmEvent event 
)
static

◆ gpencil_draw_modal()

static int gpencil_draw_modal ( bContext C,
wmOperator op,
const wmEvent event 
)
static

Definition at line 3561 of file gpencil_paint.c.

References angle(), tGPsdata::area, atan2f, BKE_area_find_region_xy(), BLI_rcti_isect_pt_v(), tGPsdata::brush, C, CTX_data_depsgraph_pointer(), CTX_wm_region(), wmOperator::customdata, DEG_id_tag_update(), ED_gpencil_toggle_brush_cursor(), ED_region_tag_redraw(), ED_region_visible_rect(), ELEM, EVT_DOWNARROWKEY, EVT_ESCKEY, EVT_LEFTARROWKEY, EVT_PAD0, EVT_PAD1, EVT_PAD2, EVT_PAD3, EVT_PAD4, EVT_PAD5, EVT_PAD6, EVT_PAD7, EVT_PAD8, EVT_PAD9, EVT_PADENTER, EVT_PADMINUS, EVT_PADPLUSKEY, EVT_RETKEY, EVT_RIGHTARROWKEY, EVT_SPACEKEY, EVT_UPARROWKEY, EVT_ZKEY, wmOperator::flag, tGPsdata::flags, GP_GUIDE_CIRCULAR, GP_PAINTFLAG_FIRSTRUN, GP_PAINTFLAG_REQ_VECTOR, GP_PAINTMODE_DRAW, GP_PAINTMODE_ERASER, GP_PAINTMODE_SET_CP, ToolSettings::gp_sculpt, GP_STATUS_DONE, GP_STATUS_ERROR, GP_STATUS_IDLING, GP_STATUS_PAINTING, GPAINT_TOOL_DRAW, tGPsdata::gpd, gpencil_add_fake_points(), gpencil_area_exists(), gpencil_draw_apply_event(), gpencil_draw_exit(), gpencil_draw_status_indicators(), gpencil_draw_toggle_eraser_cursor(), gpencil_guide_event_handling(), gpencil_is_tablet_eraser_active(), gpencil_origin_set(), gpencil_smooth_segment(), gpencil_stroke_begin(), Brush::gpencil_tool, GP_Sculpt_Settings::guide, Scene::id, ID_RECALC_COPY_ON_WRITE, ISKEYBOARD, ISMOUSE_MOTION, KM_CTRL, KM_PRESS, KM_RELEASE, LEFTMOUSE, wmEvent::modifier, tGPsdata::mval, wmEvent::mval, tGPsdata::mvali, NA_EDITED, NC_GPENCIL, NDOF_MOTION, NULL, OP_IS_MODAL_CURSOR_REGION, OPERATOR_CANCELLED, OPERATOR_FINISHED, OPERATOR_PASS_THROUGH, OPERATOR_RUNNING_MODAL, tGPsdata::paintmode, wmOperator::ptr, r, tGPsdata::radius, tGPsdata::region, ARegion::regiontype, RGN_TYPE_ANY, RGN_TYPE_TOOLS, RIGHTMOUSE, RNA_enum_get(), RNA_float_set(), bGPdata::runtime, bGPdata_Runtime::sbuffer_used, tGPsdata::scene, tGPsdata::status, tGPsdata::straight, sub_v2_v2v2(), Scene::toolsettings, GP_Sculpt_Guide::type, wmEvent::type, GP_Sculpt_Guide::use_guide, wmEvent::val, WHEELDOWNMOUSE, WHEELUPMOUSE, tGPsdata::win, WM_cursor_modal_restore(), WM_cursor_modal_set(), WM_CURSOR_NSEW_SCROLL, WM_event_add_notifier(), xy, and wmEvent::xy.

Referenced by GPENCIL_OT_draw().

◆ gpencil_draw_poll()

static bool gpencil_draw_poll ( bContext C)
static

◆ gpencil_draw_status_indicators()

static void gpencil_draw_status_indicators ( bContext C,
tGPsdata p 
)
static

◆ gpencil_draw_toggle_eraser_cursor()

static void gpencil_draw_toggle_eraser_cursor ( tGPsdata p,
short  enable 
)
static

◆ gpencil_free_stroke()

static void gpencil_free_stroke ( bGPdata gpd,
bGPDframe gpf,
bGPDstroke gps 
)
static

◆ gpencil_get_3d_reference()

static void gpencil_get_3d_reference ( tGPsdata p,
float  vec[3] 
)
static

◆ gpencil_get_default_eraser()

static Brush* gpencil_get_default_eraser ( Main bmain,
ToolSettings ts 
)
static

◆ gpencil_guide_event_handling()

static void gpencil_guide_event_handling ( bContext C,
wmOperator op,
const wmEvent event,
tGPsdata p 
)
static

◆ gpencil_guide_rotate()

static int gpencil_guide_rotate ( bContext C,
wmOperator op 
)
static

◆ gpencil_init_colors()

static void gpencil_init_colors ( tGPsdata p)
static

◆ gpencil_init_drawing_brush()

static void gpencil_init_drawing_brush ( bContext C,
tGPsdata p 
)
static

◆ gpencil_is_tablet_eraser_active()

static bool gpencil_is_tablet_eraser_active ( const wmEvent event)
static

◆ gpencil_origin_get()

static void gpencil_origin_get ( tGPsdata p,
float  origin[2] 
)
static

◆ gpencil_origin_set()

static void gpencil_origin_set ( wmOperator op,
const int  mval[2] 
)
static

◆ GPENCIL_OT_draw()

void GPENCIL_OT_draw ( wmOperatorType ot)

◆ GPENCIL_OT_guide_rotate()

void GPENCIL_OT_guide_rotate ( wmOperatorType ot)

◆ gpencil_paint_cleanup()

static void gpencil_paint_cleanup ( tGPsdata p)
static

◆ gpencil_paint_initstroke()

static void gpencil_paint_initstroke ( tGPsdata p,
eGPencil_PaintModes  paintmode,
Depsgraph depsgraph 
)
static

Definition at line 2111 of file gpencil_paint.c.

References bGPDlayer::actframe, tGPsdata::align_flag, tGPsdata::area, GP_SpaceConversion::area, BKE_gpencil_layer_active_get(), BKE_gpencil_layer_addnew(), BKE_gpencil_layer_frame_get(), BKE_gpencil_layer_is_editable(), BKE_gpencil_tag_full_update(), BKE_report(), RenderData::cfra, bGPDlayer::color, copy_m4_m4(), copy_v3_v3(), tGPsdata::custom_color, Object::data, DATA_, DEG_id_tag_update(), depsgraph, tGPsdata::disable_fill, ED_view3d_calc_camera_border(), ListBase::first, bGPDframe::flag, bGPDlayer::flag, tGPsdata::flags, GP_FRAME_PAINT, GP_GETFRAME_ADD_COPY, GP_GETFRAME_ADD_NEW, GP_GETFRAME_USE_PREV, GP_LAYER_LOCKED, GP_PAINTFLAG_FIRSTRUN, GP_PAINTMODE_ERASER, GP_PROJECT_VIEWSPACE, GP_STATUS_ERROR, GP_STROKE_3DSPACE, GP_STROKE_ERASER, GP_STROKE_NOFILL, GP_TOOL_FLAG_RETAIN_LAST, tGPsdata::gpd, GP_SpaceConversion::gpd, ToolSettings::gpencil_flags, gpencil_update_cache(), tGPsdata::gpf, tGPsdata::gpl, GP_SpaceConversion::gpl, tGPsdata::gsc, bGPdata::id, ID_RECALC_GEOMETRY, invert_m4_m4(), IS_AUTOKEY_ON, bGPDlayer::layer_invmat, bGPDlayer::layer_mat, bGPdata::layers, LISTBASE_FOREACH, loc_eul_size_to_mat4(), bGPDlayer::location, tGPsdata::mat, GP_SpaceConversion::mat, NULL, tGPsdata::ob_eval, tGPsdata::paintmode, RegionView3D::persp, Scene::r, tGPsdata::region, GP_SpaceConversion::region, ARegion::regiondata, tGPsdata::reports, bGPDlayer::rotation, RPT_INFO, bGPdata::runtime, RV3D_CAMOB, bGPdata_Runtime::sbuffer_brush, bGPdata_Runtime::sbuffer_sflag, bGPDlayer::scale, scene, tGPsdata::scene, ScrArea::spacedata, tGPsdata::status, tGPsdata::subrect, GP_SpaceConversion::subrect, tGPsdata::subrect_data, GP_SpaceConversion::subrect_data, Scene::toolsettings, tGPsdata::v2d, and GP_SpaceConversion::v2d.

Referenced by gpencil_draw_apply(), gpencil_draw_exec(), gpencil_draw_init(), and gpencil_stroke_begin().

◆ gpencil_paint_strokeend()

static void gpencil_paint_strokeend ( tGPsdata p)
static

◆ gpencil_project_check()

static bool gpencil_project_check ( tGPsdata p)
static

◆ gpencil_reproject_toplane()

static void gpencil_reproject_toplane ( tGPsdata p,
bGPDstroke gps 
)
static

◆ gpencil_rotate_v2_v2v2fl()

static void gpencil_rotate_v2_v2v2fl ( float  v[2],
const float  p[2],
const float  origin[2],
const float  angle 
)
static

◆ gpencil_session_cleanup()

static void gpencil_session_cleanup ( tGPsdata p)
static

◆ gpencil_session_free()

static void gpencil_session_free ( tGPsdata p)
static

◆ gpencil_session_initdata()

static bool gpencil_session_initdata ( bContext C,
wmOperator op,
tGPsdata p 
)
static

◆ gpencil_session_initpaint()

static tGPsdata* gpencil_session_initpaint ( bContext C,
wmOperator op 
)
static

◆ gpencil_session_validatebuffer()

static void gpencil_session_validatebuffer ( tGPsdata p)
static

◆ gpencil_set_default_eraser()

static void gpencil_set_default_eraser ( Main bmain,
Brush brush_dft 
)
static

◆ gpencil_smooth_buffer()

static void gpencil_smooth_buffer ( tGPsdata p,
float  inf,
int  idx 
)
static

Apply smooth to buffer while drawing to smooth point C, use 2 before (A, B) and current point (D):

A----B-----C------D

Parameters
pTemp data
infInfluence factor
idxIndex of the last point (need minimum 3 points in the array)

Definition at line 542 of file gpencil_paint.c.

References Freestyle::a, usdtokens::b(), Freestyle::c, copy_v2_v2(), ToolSettings::gp_sculpt, tGPsdata::gpd, GP_Sculpt_Settings::guide, interp_v2_v2v2(), interpf(), tGPspoint::m_xy, madd_v2_v2fl(), NULL, tGPspoint::pressure, bGPdata::runtime, bGPdata_Runtime::sbuffer, bGPdata_Runtime::sbuffer_used, tGPsdata::scene, steps, tGPspoint::strength, Scene::toolsettings, and GP_Sculpt_Guide::use_guide.

Referenced by gpencil_stroke_addpoint().

◆ gpencil_smooth_segment()

static void gpencil_smooth_segment ( bGPdata gpd,
const float  inf,
int  from_idx,
int  to_idx 
)
static

◆ gpencil_snap_to_grid_fl()

static float gpencil_snap_to_grid_fl ( float  v,
const float  offset,
const float  spacing 
)
static

Definition at line 2580 of file gpencil_paint.c.

References offset, and v.

Referenced by gpencil_snap_to_guide(), gpencil_snap_to_rotated_grid_fl(), and gpencil_speed_guide_init().

◆ gpencil_snap_to_guide()

static void gpencil_snap_to_guide ( const tGPsdata p,
const GP_Sculpt_Guide guide,
float  point[2] 
)
static

◆ gpencil_snap_to_rotated_grid_fl()

static void gpencil_snap_to_rotated_grid_fl ( float  v[2],
const float  origin[2],
const float  spacing,
const float  angle 
)
static

Definition at line 2592 of file gpencil_paint.c.

References angle(), gpencil_rotate_v2_v2v2fl(), gpencil_snap_to_grid_fl(), and v.

Referenced by gpencil_snap_to_guide().

◆ gpencil_speed_guide_init()

static void gpencil_speed_guide_init ( tGPsdata p,
GP_Sculpt_Guide guide 
)
static

◆ gpencil_stroke_addpoint()

static short gpencil_stroke_addpoint ( tGPsdata p,
const float  mval[2],
float  pressure,
double  curtime 
)
static

Definition at line 747 of file gpencil_paint.c.

References BrushGpencilSettings::active_smooth, BKE_curvemapping_evaluateF(), BLI_rng_get_float(), tGPsdata::brush, CLAMP, copy_v2_v2(), BrushGpencilSettings::curve_jitter, BrushGpencilSettings::curve_sensitivity, BrushGpencilSettings::curve_strength, PointerRNA::data, tGPsdata::depsgraph, BrushGpencilSettings::draw_angle_factor, BrushGpencilSettings::draw_jitter, BrushGpencilSettings::draw_strength, ED_gpencil_project_point_to_plane(), ED_gpencil_sbuffer_ensure(), ED_gpencil_sbuffer_update_eval(), ED_gpencil_sbuffer_vertex_color_set(), ED_gpencil_tpoint_to_point(), BrushGpencilSettings::flag, float(), GP_BRUSH_GROUP_RANDOM, GP_BRUSH_USE_JITTER_PRESSURE, GP_BRUSH_USE_PRESSURE, GP_BRUSH_USE_STRENGTH_PRESSURE, GP_PAINTMODE_DRAW, GP_PAINTMODE_DRAW_STRAIGHT, GP_STROKEADD_INVALID, GP_STROKEADD_NORMAL, tGPsdata::gpd, gpencil_apply_randomness(), gpencil_brush_angle(), gpencil_brush_jitter(), gpencil_get_3d_reference(), Brush::gpencil_settings, gpencil_smooth_buffer(), GPENCIL_STRENGTH_MIN, tGPsdata::gpl, GpRandomSettings::hsv, if(), tGPsdata::inittime, len_v3v3(), tGPsdata::lock_axis, tGPspoint::m_xy, tGPsdata::material, MIN2, NULL, tGPsdata::ob, tGPsdata::ob_eval, tGPsdata::ownerPtr, tGPsdata::paintmode, GpRandomSettings::pen_press, tGPspoint::pressure, tGPsdata::random_settings, tGPsdata::region, ARegion::regiondata, tGPsdata::rng, bGPdata::runtime, bGPdata_Runtime::sbuffer, bGPdata_Runtime::sbuffer_size, bGPdata_Runtime::sbuffer_used, tGPsdata::scene, square_f(), tGPspoint::strength, tGPspoint::time, Scene::toolsettings, tGPsdata::totpixlen, tGPspoint::uv_fac, tGPspoint::uv_rot, and bGPDspoint::x.

Referenced by gpencil_draw_apply().

◆ gpencil_stroke_begin()

static tGPsdata* gpencil_stroke_begin ( bContext C,
wmOperator op 
)
static

◆ gpencil_stroke_convertcoords()

static void gpencil_stroke_convertcoords ( tGPsdata p,
const float  mval[2],
float  out[3],
float depth 
)
static

◆ gpencil_stroke_doeraser()

static void gpencil_stroke_doeraser ( tGPsdata p)
static

◆ gpencil_stroke_eraser_calc_influence()

static float gpencil_stroke_eraser_calc_influence ( tGPsdata p,
const float  mval[2],
const int  radius,
const int  co[2] 
)
static

◆ gpencil_stroke_eraser_dostroke()

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

◆ gpencil_stroke_eraser_is_occluded()

static bool gpencil_stroke_eraser_is_occluded ( tGPsdata p,
bGPDlayer gpl,
bGPDspoint pt,
const int  x,
const int  y 
)
static

◆ gpencil_stroke_filtermval()

static bool gpencil_stroke_filtermval ( tGPsdata p,
const float  mval[2],
const float  mvalo[2] 
)
static

◆ gpencil_stroke_newfrombuffer()

static void gpencil_stroke_newfrombuffer ( tGPsdata p)
static

Definition at line 922 of file gpencil_paint.c.

References Object::actcol, bGPDlayer::actframe, BrushGpencilSettings::aspect_ratio, bGPDstroke::aspect_ratio, BKE_defvert_ensure_index(), BKE_gpencil_dvert_ensure(), BKE_gpencil_layer_transform_matrix_get(), BKE_gpencil_object_material_get_index_from_brush(), BKE_gpencil_stroke_boundingbox_calc(), BKE_gpencil_stroke_copy_to_keyframes(), BKE_gpencil_stroke_geometry_update(), BKE_gpencil_stroke_simplify_adaptive(), BKE_gpencil_stroke_smooth(), BKE_gpencil_stroke_smooth_point(), BKE_gpencil_stroke_smooth_strength(), BKE_gpencil_stroke_trim(), BKE_gpencil_tag_full_update(), BLI_addhead(), BLI_addtail(), BLI_findlink(), bool, tGPsdata::brush, tGPsdata::C, bGPDstroke::caps, BrushGpencilSettings::caps_type, CLAMP, CLAMP_MIN, copy_v2_v2(), copy_v2_v2_int(), copy_v4_v4(), PointerRNA::data, depsgraph, tGPsdata::depsgraph, DEPTH_INVALID, tGPsdata::depths, BrushGpencilSettings::draw_smoothfac, BrushGpencilSettings::draw_smoothlvl, BrushGpencilSettings::draw_strength, BrushGpencilSettings::draw_subdivide, bGPDstroke::dvert, MDeformVert::dw, ED_gpencil_fill_vertex_color_set(), ED_gpencil_point_vertex_color_set(), ED_gpencil_project_stroke_to_view(), ED_gpencil_stroke_close_by_distance(), ED_gpencil_stroke_extremes_to2d(), ED_gpencil_stroke_join_and_trim(), ED_gpencil_stroke_nearest_to_ends(), ED_view3d_depth_read_cached(), ED_view3d_depth_read_cached_seg(), ELEM, bGPDstroke::fill_opacity_fac, BrushGpencilSettings::flag, bGPDstroke::flag, float(), GP_BRUSH_GROUP_SETTINGS, GP_BRUSH_TRIM_STROKE, GP_PAINTMODE_DRAW, GP_PAINTMODE_DRAW_STRAIGHT, GP_PROJECT_DEPTH_STROKE, GP_PROJECT_DEPTH_STROKE_ENDPOINTS, GP_PROJECT_DEPTH_STROKE_FIRST, GP_PROJECT_DEPTH_VIEW, GP_PROJECT_VIEWSPACE, ToolSettings::gp_sculpt, GP_TOOL_FLAG_AUTOMERGE_STROKE, GP_TOOL_FLAG_CREATE_WEIGHTS, GP_TOOL_FLAG_PAINT_ONBACK, tGPsdata::gpd, gpencil_apply_parent(), gpencil_apply_parent_point(), ToolSettings::gpencil_flags, GPENCIL_MINIMUM_JOIN_DIST, GPENCIL_MULTIEDIT_SESSIONS_ON, gpencil_project_check(), gpencil_reproject_toplane(), Brush::gpencil_settings, GPENCIL_STRENGTH_MIN, gpencil_stroke_convertcoords(), gpencil_stroke_unselect(), gpencil_subdivide_stroke(), gpencil_update_cache(), ToolSettings::gpencil_v3d_align, tGPsdata::gpf, tGPsdata::gpl, tGPsdata::gsc, BrushGpencilSettings::hardeness, bGPDstroke::hardeness, if(), tGPsdata::inittime, bGPDstroke::inittime, BrushGpencilSettings::input_samples, interp_sparse_array(), interpf(), GP_Sculpt_Settings::lock_axis, tGPspoint::m_xy, bGPDstroke::mat_nr, MEM_callocN, MEM_freeN, MEM_mallocN, MIN2, bGPDstroke::next, NULL, tGPsdata::ob, tGPsdata::ownerPtr, tGPsdata::paintmode, bGPDstroke::points, tGPspoint::pressure, bGPDspoint::pressure, bGPDstroke::prev, tGPsdata::region, ARegion::regiondata, round_v2i_v2fl(), bGPdata::runtime, RV3D_CAMOB, bGPdata_Runtime::sbuffer, bGPdata_Runtime::sbuffer_sflag, bGPdata_Runtime::sbuffer_used, tGPsdata::scene, BrushGpencilSettings::simplify_f, Brush::size, tGPspoint::strength, bGPDspoint::strength, bGPDframe::strokes, bGPDstroke::thickness, tGPspoint::time, bGPDspoint::time, Scene::toolsettings, bGPDstroke::totpoints, MDeformVert::totweight, tGPspoint::uv_fac, bGPDspoint::uv_fac, tGPspoint::uv_rot, bGPDspoint::uv_rot, bGPDstroke::uv_scale, tGPspoint::vert_color, bGPDspoint::vert_color, bGPdata::vertex_group_active_index, bGPdata::vertex_group_names, ToolSettings::vgroup_weight, MDeformWeight::weight, and bGPDspoint::x.

Referenced by gpencil_paint_strokeend().

◆ gpencil_stroke_soft_refine()

static void gpencil_stroke_soft_refine ( bGPDstroke gps)
static

Analyze points to be removed when soft eraser is used to avoid that segments gets the end points rounded. The round caps breaks the artistic effect.

Definition at line 1428 of file gpencil_paint.c.

References bGPDspoint::flag, GP_SPOINT_TAG, NULL, bGPDstroke::points, and bGPDstroke::totpoints.

Referenced by gpencil_stroke_eraser_dostroke().

◆ gpencil_stroke_unselect()

static void gpencil_stroke_unselect ( bGPdata gpd,
bGPDstroke gps 
)
static

◆ gpencil_update_cache()

static void gpencil_update_cache ( bGPdata gpd)
static

Variable Documentation

◆ prop_gpencil_drawmodes

const EnumPropertyItem prop_gpencil_drawmodes[]
static
Initial value:
= {
{GP_PAINTMODE_DRAW, "DRAW", 0, "Draw Freehand", "Draw freehand stroke(s)"},
"DRAW_STRAIGHT",
0,
"Draw Straight Lines",
"Draw straight line segment(s)"},
{GP_PAINTMODE_ERASER, "ERASER", 0, "Eraser", "Erase Grease Pencil strokes"},
{0, NULL, 0, NULL, NULL},
}
@ GP_PAINTMODE_ERASER
@ GP_PAINTMODE_DRAW
@ GP_PAINTMODE_DRAW_STRAIGHT

Definition at line 3866 of file gpencil_paint.c.

Referenced by GPENCIL_OT_draw().