Blender  V3.3
Classes | Typedefs | Functions
gpencil_sculpt_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_ghash.h"
#include "BLI_math.h"
#include "BLI_rand.h"
#include "BLI_utildefines.h"
#include "PIL_time.h"
#include "BLT_translation.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_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
#include "BKE_brush.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_deform.h"
#include "BKE_gpencil.h"
#include "BKE_gpencil_geom.h"
#include "BKE_gpencil_modifier.h"
#include "BKE_gpencil_update_cache.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_object_deform.h"
#include "BKE_report.h"
#include "UI_interface.h"
#include "WM_api.h"
#include "WM_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
#include "RNA_prototypes.h"
#include "UI_view2d.h"
#include "ED_gpencil.h"
#include "ED_keyframing.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "gpencil_intern.h"

Go to the source code of this file.

Classes

struct  tGP_BrushEditData
 
struct  tGPSB_Grab_StrokeData
 
struct  tGPSB_CloneBrushData
 

Typedefs

typedef struct tGP_BrushEditData tGP_BrushEditData
 
typedef bool(* GP_BrushApplyCb) (tGP_BrushEditData *gso, bGPDstroke *gps, float rotation, int pt_index, const int radius, const int co[2])
 
typedef struct tGPSB_Grab_StrokeData tGPSB_Grab_StrokeData
 
typedef struct tGPSB_CloneBrushData tGPSB_CloneBrushData
 

Functions

static void gpencil_sculpt_compute_lock_axis (tGP_BrushEditData *gso, bGPDspoint *pt, const float save_pt[3])
 
static GP_Sculpt_Settingsgpencil_sculpt_get_settings (Scene *scene)
 
static bool gpencil_brush_invert_check (tGP_BrushEditData *gso)
 
static float gpencil_brush_influence_calc (tGP_BrushEditData *gso, const int radius, const int co[2])
 
static void gpencil_recalc_geometry_tag (bGPDstroke *gps)
 
static void gpencil_update_geometry (bGPdata *gpd)
 
static bool gpencil_brush_smooth_apply (tGP_BrushEditData *gso, bGPDstroke *gps, float UNUSED(rot_eval), int pt_index, const int radius, const int co[2])
 
static bool gpencil_brush_thickness_apply (tGP_BrushEditData *gso, bGPDstroke *gps, float UNUSED(rot_eval), int pt_index, const int radius, const int co[2])
 
static bool gpencil_brush_strength_apply (tGP_BrushEditData *gso, bGPDstroke *gps, float UNUSED(rot_eval), int pt_index, const int radius, const int co[2])
 
static void gpencil_brush_grab_stroke_init (tGP_BrushEditData *gso, bGPDstroke *gps)
 
static bool gpencil_brush_grab_store_points (tGP_BrushEditData *gso, bGPDstroke *gps, float rot_eval, int pt_index, const int radius, const int co[2])
 
static void gpencil_brush_grab_calc_dvec (tGP_BrushEditData *gso)
 
static void gpencil_brush_grab_apply_cached (tGP_BrushEditData *gso, bGPDstroke *gps, const float diff_mat[4][4])
 
static void gpencil_brush_grab_stroke_free (void *ptr)
 
static bool gpencil_brush_push_apply (tGP_BrushEditData *gso, bGPDstroke *gps, float UNUSED(rot_eval), int pt_index, const int radius, const int co[2])
 
static void gpencil_brush_calc_midpoint (tGP_BrushEditData *gso)
 
static bool gpencil_brush_pinch_apply (tGP_BrushEditData *gso, bGPDstroke *gps, float UNUSED(rot_eval), int pt_index, const int radius, const int co[2])
 
static bool gpencil_brush_twist_apply (tGP_BrushEditData *gso, bGPDstroke *gps, float UNUSED(rot_eval), int pt_index, const int radius, const int co[2])
 
static bool gpencil_brush_randomize_apply (tGP_BrushEditData *gso, bGPDstroke *gps, float UNUSED(rot_eval), int pt_index, const int radius, const int co[2])
 
static void gpencil_brush_clone_init (bContext *C, tGP_BrushEditData *gso)
 
static void gpencil_brush_clone_free (tGP_BrushEditData *gso)
 
static void gpencil_brush_clone_add (bContext *C, tGP_BrushEditData *gso)
 
static void gpencil_brush_clone_adjust (tGP_BrushEditData *gso)
 
static bool gpencil_sculpt_brush_apply_clone (bContext *C, tGP_BrushEditData *gso)
 
static void gpencil_sculpt_brush_header_set (bContext *C, tGP_BrushEditData *gso)
 
static bool gpencil_sculpt_brush_init (bContext *C, wmOperator *op)
 
static void gpencil_sculpt_brush_exit (bContext *C, wmOperator *op)
 
static bool gpencil_sculpt_brush_poll (bContext *C)
 
static void gpencil_sculpt_brush_init_stroke (bContext *C, tGP_BrushEditData *gso)
 
static float gpencil_sculpt_rotation_eval_get (tGP_BrushEditData *gso, bGPDstroke *gps_eval, bGPDspoint *pt_eval, int idx_eval)
 
static bool gpencil_sculpt_brush_do_stroke (tGP_BrushEditData *gso, bGPDstroke *gps, const float diff_mat[4][4], GP_BrushApplyCb apply)
 
static bool gpencil_sculpt_brush_do_frame (bContext *C, tGP_BrushEditData *gso, bGPDlayer *gpl, bGPDframe *gpf, const float diff_mat[4][4])
 
static bool get_automasking_strokes_list (tGP_BrushEditData *gso)
 
static bool gpencil_sculpt_brush_apply_standard (bContext *C, tGP_BrushEditData *gso)
 
static void gpencil_sculpt_brush_apply (bContext *C, wmOperator *op, PointerRNA *itemptr)
 
static Brushgpencil_sculpt_get_smooth_brush (tGP_BrushEditData *gso)
 
static void gpencil_sculpt_brush_apply_event (bContext *C, wmOperator *op, const wmEvent *event)
 
static int gpencil_sculpt_brush_exec (bContext *C, wmOperator *op)
 
static int gpencil_sculpt_brush_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int gpencil_sculpt_brush_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
void GPENCIL_OT_sculpt_paint (wmOperatorType *ot)
 

Detailed Description

Brush based operators for editing Grease Pencil strokes.

Definition in file gpencil_sculpt_paint.c.

Typedef Documentation

◆ GP_BrushApplyCb

typedef bool(* GP_BrushApplyCb) (tGP_BrushEditData *gso, bGPDstroke *gps, float rotation, int pt_index, const int radius, const int co[2])

Definition at line 156 of file gpencil_sculpt_paint.c.

◆ tGP_BrushEditData

◆ tGPSB_CloneBrushData

◆ tGPSB_Grab_StrokeData

Function Documentation

◆ get_automasking_strokes_list()

static bool get_automasking_strokes_list ( tGP_BrushEditData gso)
static

◆ gpencil_brush_calc_midpoint()

static void gpencil_brush_calc_midpoint ( tGP_BrushEditData gso)
static

◆ gpencil_brush_clone_add()

static void gpencil_brush_clone_add ( bContext C,
tGP_BrushEditData gso 
)
static

◆ gpencil_brush_clone_adjust()

static void gpencil_brush_clone_adjust ( tGP_BrushEditData gso)
static

◆ gpencil_brush_clone_free()

static void gpencil_brush_clone_free ( tGP_BrushEditData gso)
static

◆ gpencil_brush_clone_init()

static void gpencil_brush_clone_init ( bContext C,
tGP_BrushEditData gso 
)
static

◆ gpencil_brush_grab_apply_cached()

static void gpencil_brush_grab_apply_cached ( tGP_BrushEditData gso,
bGPDstroke gps,
const float  diff_mat[4][4] 
)
static

◆ gpencil_brush_grab_calc_dvec()

static void gpencil_brush_grab_calc_dvec ( tGP_BrushEditData gso)
static

◆ gpencil_brush_grab_store_points()

static bool gpencil_brush_grab_store_points ( tGP_BrushEditData gso,
bGPDstroke gps,
float  rot_eval,
int  pt_index,
const int  radius,
const int  co[2] 
)
static

◆ gpencil_brush_grab_stroke_free()

static void gpencil_brush_grab_stroke_free ( void ptr)
static

Definition at line 580 of file gpencil_sculpt_paint.c.

References data, MEM_freeN, MEM_SAFE_FREE, and ptr.

Referenced by gpencil_sculpt_brush_exit().

◆ gpencil_brush_grab_stroke_init()

static void gpencil_brush_grab_stroke_init ( tGP_BrushEditData gso,
bGPDstroke gps 
)
static

◆ gpencil_brush_influence_calc()

static float gpencil_brush_influence_calc ( tGP_BrushEditData gso,
const int  radius,
const int  co[2] 
)
static

◆ gpencil_brush_invert_check()

static bool gpencil_brush_invert_check ( tGP_BrushEditData gso)
static

◆ gpencil_brush_pinch_apply()

static bool gpencil_brush_pinch_apply ( tGP_BrushEditData gso,
bGPDstroke gps,
float   UNUSEDrot_eval,
int  pt_index,
const int  radius,
const int  co[2] 
)
static

◆ gpencil_brush_push_apply()

static bool gpencil_brush_push_apply ( tGP_BrushEditData gso,
bGPDstroke gps,
float   UNUSEDrot_eval,
int  pt_index,
const int  radius,
const int  co[2] 
)
static

◆ gpencil_brush_randomize_apply()

static bool gpencil_brush_randomize_apply ( tGP_BrushEditData gso,
bGPDstroke gps,
float   UNUSEDrot_eval,
int  pt_index,
const int  radius,
const int  co[2] 
)
static

◆ gpencil_brush_smooth_apply()

static bool gpencil_brush_smooth_apply ( tGP_BrushEditData gso,
bGPDstroke gps,
float   UNUSEDrot_eval,
int  pt_index,
const int  radius,
const int  co[2] 
)
static

◆ gpencil_brush_strength_apply()

static bool gpencil_brush_strength_apply ( tGP_BrushEditData gso,
bGPDstroke gps,
float   UNUSEDrot_eval,
int  pt_index,
const int  radius,
const int  co[2] 
)
static

◆ gpencil_brush_thickness_apply()

static bool gpencil_brush_thickness_apply ( tGP_BrushEditData gso,
bGPDstroke gps,
float   UNUSEDrot_eval,
int  pt_index,
const int  radius,
const int  co[2] 
)
static

◆ gpencil_brush_twist_apply()

static bool gpencil_brush_twist_apply ( tGP_BrushEditData gso,
bGPDstroke gps,
float   UNUSEDrot_eval,
int  pt_index,
const int  radius,
const int  co[2] 
)
static

◆ GPENCIL_OT_sculpt_paint()

void GPENCIL_OT_sculpt_paint ( struct wmOperatorType ot)

◆ gpencil_recalc_geometry_tag()

static void gpencil_recalc_geometry_tag ( bGPDstroke gps)
static

◆ gpencil_sculpt_brush_apply()

static void gpencil_sculpt_brush_apply ( bContext C,
wmOperator op,
PointerRNA itemptr 
)
static

◆ gpencil_sculpt_brush_apply_clone()

static bool gpencil_sculpt_brush_apply_clone ( bContext C,
tGP_BrushEditData gso 
)
static

◆ gpencil_sculpt_brush_apply_event()

static void gpencil_sculpt_brush_apply_event ( bContext C,
wmOperator op,
const wmEvent event 
)
static

◆ gpencil_sculpt_brush_apply_standard()

static bool gpencil_sculpt_brush_apply_standard ( bContext C,
tGP_BrushEditData gso 
)
static

◆ gpencil_sculpt_brush_do_frame()

static bool gpencil_sculpt_brush_do_frame ( bContext C,
tGP_BrushEditData gso,
bGPDlayer gpl,
bGPDframe gpf,
const float  diff_mat[4][4] 
)
static

Definition at line 1595 of file gpencil_sculpt_paint.c.

References bGPDlayer::actframe, tGP_BrushEditData::automasking_strokes, BKE_gpencil_layer_transform_matrix_get(), BKE_gpencil_material_settings(), BKE_gpencil_stroke_geometry_update(), BKE_gpencil_tag_full_update(), BLI_ghash_haskey(), tGP_BrushEditData::brush, C, Object::data, tGP_BrushEditData::depsgraph, ED_gpencil_stroke_can_use(), ED_gpencil_stroke_check_collision(), ED_gpencil_stroke_material_editable(), tGP_BrushEditData::first, Brush::flag, MaterialGPencilStyle::flag, GP_BRUSH_USE_PRESSURE, GP_MATERIAL_FILL_SHOW, GP_SCULPT_FLAGMODE_AUTOMASK_LAYER, GP_SCULPT_FLAGMODE_AUTOMASK_MATERIAL, GP_SCULPT_FLAGMODE_AUTOMASK_STROKE, gpencil_brush_grab_apply_cached(), gpencil_brush_grab_store_points(), gpencil_brush_grab_stroke_init(), gpencil_brush_pinch_apply(), gpencil_brush_push_apply(), gpencil_brush_randomize_apply(), gpencil_brush_smooth_apply(), gpencil_brush_strength_apply(), gpencil_brush_thickness_apply(), gpencil_brush_twist_apply(), gpencil_recalc_geometry_tag(), gpencil_sculpt_brush_do_stroke(), Brush::gpencil_sculpt_tool, Brush::gpencil_settings, bGPDframe_Runtime::gpf_orig, bGPDlayer_Runtime::gpl_orig, bGPDstroke_Runtime::gps_orig, GPSCULPT_TOOL_GRAB, GPSCULPT_TOOL_PINCH, GPSCULPT_TOOL_PUSH, GPSCULPT_TOOL_RANDOMIZE, GPSCULPT_TOOL_SMOOTH, GPSCULPT_TOOL_STRENGTH, GPSCULPT_TOOL_THICKNESS, GPSCULPT_TOOL_TWIST, tGP_BrushEditData::gsc, if(), LISTBASE_FOREACH, bGPDstroke::mat_nr, tGP_BrushEditData::mval, NULL, tGP_BrushEditData::object, tGP_BrushEditData::pressure, bGPDstroke::runtime, bGPDframe::runtime, bGPDlayer::runtime, BrushGpencilSettings::sculpt_mode_flag, Brush::size, bGPDframe::strokes, and bGPDstroke::totpoints.

Referenced by gpencil_sculpt_brush_apply_standard().

◆ gpencil_sculpt_brush_do_stroke()

static bool gpencil_sculpt_brush_do_stroke ( tGP_BrushEditData gso,
bGPDstroke gps,
const float  diff_mat[4][4],
GP_BrushApplyCb  apply 
)
static

◆ gpencil_sculpt_brush_exec()

static int gpencil_sculpt_brush_exec ( bContext C,
wmOperator op 
)
static

◆ gpencil_sculpt_brush_exit()

static void gpencil_sculpt_brush_exit ( bContext C,
wmOperator op 
)
static

◆ gpencil_sculpt_brush_header_set()

static void gpencil_sculpt_brush_header_set ( bContext C,
tGP_BrushEditData gso 
)
static

◆ gpencil_sculpt_brush_init()

static bool gpencil_sculpt_brush_init ( bContext C,
wmOperator op 
)
static

Definition at line 1141 of file gpencil_sculpt_paint.c.

References tGP_BrushEditData::area, tGP_BrushEditData::automasking_strokes, BKE_curvemapping_init(), BKE_gpencil_has_transform_modifiers(), BKE_report(), BLI_findlink(), BLI_ghash_free(), BLI_ghash_ptr_new(), BLI_rng_new(), tGP_BrushEditData::bmain, bool, tGP_BrushEditData::brush, Paint::brush, C, tGP_BrushEditData::cfra, copy_m4_m4(), CTX_data_active_object(), CTX_data_ensure_evaluated_depsgraph(), CTX_data_main(), CTX_data_scene(), CTX_wm_area(), CTX_wm_region(), GP_Sculpt_Settings::cur_falloff, Brush::curve, wmOperator::customdata, tGP_BrushEditData::depsgraph, ED_gpencil_data_get_active(), ED_gpencil_stroke_can_use(), tGP_BrushEditData::first, ListBase::first, GP_Sculpt_Settings::flag, ToolSettings::gp_sculpt, GP_SCULPT_FLAGMODE_AUTOMASK_LAYER, GP_SCULPT_FLAGMODE_AUTOMASK_MATERIAL, GP_SCULPT_FLAGMODE_AUTOMASK_STROKE, GP_SCULPT_SETT_FLAG_FRAME_FALLOFF, ToolSettings::gp_sculptpaint, tGP_BrushEditData::gpd, gpencil_brush_clone_init(), GPENCIL_MULTIEDIT_SESSIONS_ON, gpencil_point_conversion_init(), gpencil_sculpt_brush_header_set(), gpencil_sculpt_get_settings(), Brush::gpencil_sculpt_tool, ToolSettings::gpencil_selectmode_sculpt, Brush::gpencil_settings, gpencil_strokes_copypastebuf, GPSCULPT_TOOL_CLONE, GPSCULPT_TOOL_GRAB, tGP_BrushEditData::gsc, tGP_BrushEditData::inv_mat, invert_m4_m4(), tGP_BrushEditData::is_multiframe, tGP_BrushEditData::is_painting, tGP_BrushEditData::is_transformed, tGP_BrushEditData::mask, MEM_callocN, MEM_freeN, tGP_BrushEditData::mval_prev, bGPDstroke::next, NULL, tGP_BrushEditData::object, Object::obmat, GpSculptPaint::paint, PIL_check_seconds_timer_i(), POINTER_AS_UINT, tGP_BrushEditData::region, wmOperator::reports, tGP_BrushEditData::rng, RPT_ERROR, scene, tGP_BrushEditData::scene, BrushGpencilSettings::sculpt_mode_flag, tGP_BrushEditData::settings, tGP_BrushEditData::stroke_customdata, Scene::toolsettings, UINT_MAX, unit_m4(), tGP_BrushEditData::use_multiframe_falloff, bGPdata::vertex_group_active_index, bGPdata::vertex_group_names, tGP_BrushEditData::vrgroup, and zero_axis_bias_m4().

Referenced by gpencil_sculpt_brush_exec(), and gpencil_sculpt_brush_invoke().

◆ gpencil_sculpt_brush_init_stroke()

static void gpencil_sculpt_brush_init_stroke ( bContext C,
tGP_BrushEditData gso 
)
static

◆ gpencil_sculpt_brush_invoke()

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

◆ gpencil_sculpt_brush_modal()

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

◆ gpencil_sculpt_brush_poll()

static bool gpencil_sculpt_brush_poll ( bContext C)
static

◆ gpencil_sculpt_compute_lock_axis()

static void gpencil_sculpt_compute_lock_axis ( tGP_BrushEditData gso,
bGPDspoint pt,
const float  save_pt[3] 
)
static

◆ gpencil_sculpt_get_settings()

static GP_Sculpt_Settings* gpencil_sculpt_get_settings ( Scene scene)
static

Definition at line 216 of file gpencil_sculpt_paint.c.

References ToolSettings::gp_sculpt, scene, and Scene::toolsettings.

Referenced by gpencil_sculpt_brush_init().

◆ gpencil_sculpt_get_smooth_brush()

static Brush* gpencil_sculpt_get_smooth_brush ( tGP_BrushEditData gso)
static

◆ gpencil_sculpt_rotation_eval_get()

static float gpencil_sculpt_rotation_eval_get ( tGP_BrushEditData gso,
bGPDstroke gps_eval,
bGPDspoint pt_eval,
int  idx_eval 
)
static

◆ gpencil_update_geometry()

static void gpencil_update_geometry ( bGPdata gpd)
static