Blender  V3.3
Classes | Macros | Functions | Variables
gpencil.c File Reference
#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "CLG_log.h"
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math_vector.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_material_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_space_types.h"
#include "BKE_action.h"
#include "BKE_anim_data.h"
#include "BKE_collection.h"
#include "BKE_colortools.h"
#include "BKE_deform.h"
#include "BKE_gpencil.h"
#include "BKE_gpencil_geom.h"
#include "BKE_gpencil_update_cache.h"
#include "BKE_icons.h"
#include "BKE_idtype.h"
#include "BKE_image.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_paint.h"
#include "BLI_math_color.h"
#include "DEG_depsgraph_query.h"
#include "BLO_read_write.h"

Go to the source code of this file.

Classes

struct  tGPencilUpdateOnWriteTraverseData
 

Macros

#define DNA_DEPRECATED_ALLOW
 
#define MAT_NR_REMAP(n)
 

Functions

static void greasepencil_copy_data (Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int UNUSED(flag))
 
static void greasepencil_free_data (ID *id)
 
static void greasepencil_foreach_id (ID *id, LibraryForeachIDData *data)
 
static void greasepencil_blend_write (BlendWriter *writer, ID *id, const void *id_address)
 
void BKE_gpencil_blend_read_data (BlendDataReader *reader, bGPdata *gpd)
 
static void greasepencil_blend_read_data (BlendDataReader *reader, ID *id)
 
static void greasepencil_blend_read_lib (BlendLibReader *reader, ID *id)
 
static void greasepencil_blend_read_expand (BlendExpander *expander, ID *id)
 
void BKE_gpencil_batch_cache_dirty_tag (bGPdata *gpd)
 
void BKE_gpencil_batch_cache_free (bGPdata *gpd)
 
void BKE_gpencil_free_point_weights (MDeformVert *dvert)
 
void BKE_gpencil_free_stroke_weights (bGPDstroke *gps)
 
void BKE_gpencil_free_stroke_editcurve (bGPDstroke *gps)
 
void BKE_gpencil_free_stroke (bGPDstroke *gps)
 
bool BKE_gpencil_free_strokes (bGPDframe *gpf)
 
void BKE_gpencil_free_frames (bGPDlayer *gpl)
 
void BKE_gpencil_free_layer_masks (bGPDlayer *gpl)
 
void BKE_gpencil_free_layers (ListBase *list)
 
void BKE_gpencil_free_data (bGPdata *gpd, bool free_all)
 
void BKE_gpencil_eval_delete (bGPdata *gpd_eval)
 
void BKE_gpencil_tag (bGPdata *gpd)
 
bGPDframeBKE_gpencil_frame_addnew (bGPDlayer *gpl, int cframe)
 
bGPDframeBKE_gpencil_frame_addcopy (bGPDlayer *gpl, int cframe)
 
bGPDlayerBKE_gpencil_layer_addnew (bGPdata *gpd, const char *name, const bool setactive, const bool add_to_header)
 
bGPdataBKE_gpencil_data_addnew (Main *bmain, const char name[])
 
bGPDstrokeBKE_gpencil_stroke_new (int mat_idx, int totpoints, short thickness)
 
bGPDstrokeBKE_gpencil_stroke_add (bGPDframe *gpf, int mat_idx, int totpoints, short thickness, const bool insert_at_head)
 
bGPDstrokeBKE_gpencil_stroke_add_existing_style (bGPDframe *gpf, bGPDstroke *existing, int mat_idx, int totpoints, short thickness)
 
bGPDcurveBKE_gpencil_stroke_editcurve_new (const int tot_curve_points)
 
void BKE_gpencil_stroke_weights_duplicate (bGPDstroke *gps_src, bGPDstroke *gps_dst)
 
bGPDcurveBKE_gpencil_stroke_curve_duplicate (bGPDcurve *gpc_src)
 
bGPDstrokeBKE_gpencil_stroke_duplicate (bGPDstroke *gps_src, const bool dup_points, const bool dup_curve)
 
bGPDframeBKE_gpencil_frame_duplicate (const bGPDframe *gpf_src, const bool dup_strokes)
 
void BKE_gpencil_frame_copy_strokes (bGPDframe *gpf_src, struct bGPDframe *gpf_dst)
 
bGPDlayerBKE_gpencil_layer_duplicate (const bGPDlayer *gpl_src, const bool dup_frames, const bool dup_strokes)
 
void BKE_gpencil_data_copy_settings (const bGPdata *gpd_src, bGPdata *gpd_dst)
 
void BKE_gpencil_layer_copy_settings (const bGPDlayer *gpl_src, bGPDlayer *gpl_dst)
 
void BKE_gpencil_frame_copy_settings (const bGPDframe *gpf_src, bGPDframe *gpf_dst)
 
void BKE_gpencil_stroke_copy_settings (const bGPDstroke *gps_src, bGPDstroke *gps_dst)
 
bGPdataBKE_gpencil_data_duplicate (Main *bmain, const bGPdata *gpd_src, bool internal_copy)
 
void BKE_gpencil_stroke_sync_selection (bGPdata *gpd, bGPDstroke *gps)
 
void BKE_gpencil_curve_sync_selection (bGPdata *gpd, bGPDstroke *gps)
 
void BKE_gpencil_stroke_select_index_set (bGPdata *gpd, bGPDstroke *gps)
 
void BKE_gpencil_stroke_select_index_reset (bGPDstroke *gps)
 
void BKE_gpencil_frame_delete_laststroke (bGPDlayer *gpl, bGPDframe *gpf)
 
bool BKE_gpencil_layer_is_editable (const bGPDlayer *gpl)
 
bGPDframeBKE_gpencil_layer_frame_find (bGPDlayer *gpl, int cframe)
 
bGPDframeBKE_gpencil_layer_frame_get (bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
 
bool BKE_gpencil_layer_frame_delete (bGPDlayer *gpl, bGPDframe *gpf)
 
bGPDlayerBKE_gpencil_layer_named_get (bGPdata *gpd, const char *name)
 
bGPDlayer_MaskBKE_gpencil_layer_mask_named_get (bGPDlayer *gpl, const char *name)
 
bGPDlayer_MaskBKE_gpencil_layer_mask_add (bGPDlayer *gpl, const char *name)
 
void BKE_gpencil_layer_mask_remove (bGPDlayer *gpl, bGPDlayer_Mask *mask)
 
void BKE_gpencil_layer_mask_remove_ref (bGPdata *gpd, const char *name)
 
static int gpencil_cb_sort_masks (const void *arg1, const void *arg2)
 
void BKE_gpencil_layer_mask_sort (bGPdata *gpd, bGPDlayer *gpl)
 
void BKE_gpencil_layer_mask_sort_all (bGPdata *gpd)
 
void BKE_gpencil_layer_mask_copy (const bGPDlayer *gpl_src, bGPDlayer *gpl_dst)
 
void BKE_gpencil_layer_mask_cleanup (bGPdata *gpd, bGPDlayer *gpl)
 
void BKE_gpencil_layer_mask_cleanup_all_layers (bGPdata *gpd)
 
static int gpencil_cb_cmp_frame (void *thunk, const void *a, const void *b)
 
void BKE_gpencil_layer_frames_sort (struct bGPDlayer *gpl, bool *r_has_duplicate_frames)
 
bGPDlayerBKE_gpencil_layer_active_get (bGPdata *gpd)
 
bGPDlayerBKE_gpencil_layer_get_by_name (bGPdata *gpd, char *name, int first_if_not_found)
 
void BKE_gpencil_layer_active_set (bGPdata *gpd, bGPDlayer *active)
 
void BKE_gpencil_layer_autolock_set (bGPdata *gpd, const bool unlock)
 
void BKE_gpencil_layer_delete (bGPdata *gpd, bGPDlayer *gpl)
 
MaterialBKE_gpencil_brush_material_get (Brush *brush)
 
void BKE_gpencil_brush_material_set (Brush *brush, Material *ma)
 
MaterialBKE_gpencil_object_material_ensure_from_brush (Main *bmain, Object *ob, Brush *brush)
 
int BKE_gpencil_object_material_ensure (Main *bmain, Object *ob, Material *material)
 
MaterialBKE_gpencil_object_material_new (Main *bmain, Object *ob, const char *name, int *r_index)
 
MaterialBKE_gpencil_object_material_from_brush_get (Object *ob, Brush *brush)
 
int BKE_gpencil_object_material_get_index_from_brush (Object *ob, Brush *brush)
 
MaterialBKE_gpencil_object_material_ensure_from_active_input_toolsettings (Main *bmain, Object *ob, ToolSettings *ts)
 
MaterialBKE_gpencil_object_material_ensure_from_active_input_brush (Main *bmain, Object *ob, Brush *brush)
 
MaterialBKE_gpencil_object_material_ensure_from_active_input_material (Object *ob)
 
MaterialBKE_gpencil_object_material_ensure_active (Object *ob)
 
bool BKE_gpencil_stroke_select_check (const bGPDstroke *gps)
 
void BKE_gpencil_vgroup_remove (Object *ob, bDeformGroup *defgroup)
 
void BKE_gpencil_dvert_ensure (bGPDstroke *gps)
 
void BKE_gpencil_frame_range_selected (bGPDlayer *gpl, int *r_initframe, int *r_endframe)
 
float BKE_gpencil_multiframe_falloff_calc (bGPDframe *gpf, int actnum, int f_init, int f_end, CurveMapping *cur_falloff)
 
void BKE_gpencil_material_index_reassign (bGPdata *gpd, int totcol, int index)
 
bool BKE_gpencil_material_index_used (bGPdata *gpd, int index)
 
void BKE_gpencil_material_remap (struct bGPdata *gpd, const unsigned int *remap, unsigned int remap_len)
 
bool BKE_gpencil_merge_materials_table_get (Object *ob, const float hue_threshold, const float sat_threshold, const float val_threshold, GHash *r_mat_table)
 
bool BKE_gpencil_merge_materials (Object *ob, const float hue_threshold, const float sat_threshold, const float val_threshold, int *r_removed)
 
void BKE_gpencil_stats_update (bGPdata *gpd)
 
int BKE_gpencil_object_material_index_get (Object *ob, Material *ma)
 
int BKE_gpencil_object_material_index_get_by_name (Object *ob, const char *name)
 
MaterialBKE_gpencil_object_material_ensure_by_name (Main *bmain, Object *ob, const char *name, int *r_index)
 
void BKE_gpencil_palette_ensure (Main *bmain, Scene *scene)
 
bool BKE_gpencil_from_image (SpaceImage *sima, bGPdata *gpd, bGPDframe *gpf, const float size, const bool mask)
 
static bool gpencil_is_layer_mask (ViewLayer *view_layer, bGPdata *gpd, bGPDlayer *gpl_mask)
 
Iterator

Iterate over all visible stroke of all visible layers inside a grease pencil datablock.

void BKE_gpencil_visible_stroke_iter (bGPdata *gpd, gpIterCb layer_cb, gpIterCb stroke_cb, void *thunk)
 

Variables

static CLG_LogRef LOG = {"bke.gpencil"}
 
IDTypeInfo IDType_ID_GD
 
void(* BKE_gpencil_batch_cache_dirty_tag_cb )(bGPdata *gpd) = NULL
 
void(* BKE_gpencil_batch_cache_free_cb )(bGPdata *gpd) = NULL
 

Advanced Iterator

Iterate over all visible stroke of all visible layers inside a gpObject. Also take into account onion-skinning.

typedef struct tGPencilUpdateOnWriteTraverseData tGPencilUpdateOnWriteTraverseData
 
void BKE_gpencil_visible_stroke_advanced_iter (ViewLayer *view_layer, Object *ob, gpIterCb layer_cb, gpIterCb stroke_cb, void *thunk, bool do_onion, int cfra)
 
void BKE_gpencil_frame_original_pointers_update (const struct bGPDframe *gpf_orig, const struct bGPDframe *gpf_eval)
 
void BKE_gpencil_layer_original_pointers_update (const struct bGPDlayer *gpl_orig, const struct bGPDlayer *gpl_eval)
 
void BKE_gpencil_data_update_orig_pointers (const bGPdata *gpd_orig, const bGPdata *gpd_eval)
 
void BKE_gpencil_update_orig_pointers (const Object *ob_orig, const Object *ob_eval)
 
void BKE_gpencil_layer_transform_matrix_get (const Depsgraph *depsgraph, Object *obact, bGPDlayer *gpl, float diff_mat[4][4])
 
void BKE_gpencil_update_layer_transforms (const Depsgraph *depsgraph, Object *ob)
 
int BKE_gpencil_material_find_index_by_name_prefix (Object *ob, const char *name_prefix)
 
void BKE_gpencil_frame_selected_hash (bGPdata *gpd, struct GHash *r_list)
 
bool BKE_gpencil_can_avoid_full_copy_on_write (const Depsgraph *depsgraph, bGPdata *gpd)
 
static bool gpencil_update_on_write_layer_cb (GPencilUpdateCache *gpl_cache, void *user_data)
 
static bool gpencil_update_on_write_frame_cb (GPencilUpdateCache *gpf_cache, void *user_data)
 
static bool gpencil_update_on_write_stroke_cb (GPencilUpdateCache *gps_cache, void *user_data)
 
void BKE_gpencil_update_on_write (bGPdata *gpd_orig, bGPdata *gpd_eval)
 

Macro Definition Documentation

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 28 of file gpencil.c.

◆ MAT_NR_REMAP

#define MAT_NR_REMAP (   n)
Value:
if (n < remap_len_short) { \
BLI_assert(n >= 0 && remap[n] < remap_len_short); \
n = remap[n]; \
} \
((void)0)
SyclQueue void void size_t num_bytes void

Typedef Documentation

◆ tGPencilUpdateOnWriteTraverseData

Function Documentation

◆ BKE_gpencil_batch_cache_dirty_tag()

void BKE_gpencil_batch_cache_dirty_tag ( bGPdata gpd)

◆ BKE_gpencil_batch_cache_free()

void BKE_gpencil_batch_cache_free ( bGPdata gpd)

Definition at line 343 of file gpencil.c.

References BKE_gpencil_batch_cache_free_cb.

Referenced by BKE_gpencil_free_data().

◆ BKE_gpencil_blend_read_data()

void BKE_gpencil_blend_read_data ( BlendDataReader reader,
bGPdata gpd 
)

◆ BKE_gpencil_brush_material_get()

Material* BKE_gpencil_brush_material_get ( struct Brush brush)

Get grease pencil material from brush.

Parameters
brushBrush
Returns
Pointer to material

Definition at line 1675 of file gpencil.c.

References Brush::gpencil_settings, BrushGpencilSettings::material, and NULL.

Referenced by BKE_gpencil_object_material_ensure_from_brush(), and BKE_gpencil_object_material_from_brush_get().

◆ BKE_gpencil_brush_material_set()

void BKE_gpencil_brush_material_set ( struct Brush brush,
struct Material material 
)

Set grease pencil brush material.

Parameters
brushBrush
materialMaterial

Definition at line 1687 of file gpencil.c.

References BLI_assert, Brush::gpencil_settings, Material::id, id_us_min(), id_us_plus(), and BrushGpencilSettings::material.

Referenced by BKE_gpencil_brush_preset_set().

◆ BKE_gpencil_can_avoid_full_copy_on_write()

bool BKE_gpencil_can_avoid_full_copy_on_write ( const Depsgraph depsgraph,
bGPdata gpd 
)

◆ BKE_gpencil_curve_sync_selection()

void BKE_gpencil_curve_sync_selection ( bGPdata gpd,
bGPDstroke gps 
)

◆ BKE_gpencil_data_addnew()

bGPdata* BKE_gpencil_data_addnew ( struct Main bmain,
const char  name[] 
)

◆ BKE_gpencil_data_copy_settings()

void BKE_gpencil_data_copy_settings ( const bGPdata gpd_src,
bGPdata gpd_dst 
)

◆ BKE_gpencil_data_duplicate()

bGPdata* BKE_gpencil_data_duplicate ( Main bmain,
const bGPdata gpd_src,
bool  internal_copy 
)

◆ BKE_gpencil_data_update_orig_pointers()

void BKE_gpencil_data_update_orig_pointers ( const bGPdata gpd_orig,
const bGPdata gpd_eval 
)

◆ BKE_gpencil_dvert_ensure()

void BKE_gpencil_dvert_ensure ( struct bGPDstroke gps)

◆ BKE_gpencil_eval_delete()

void BKE_gpencil_eval_delete ( struct bGPdata gpd_eval)

Delete grease pencil evaluated data

Parameters
gpd_evalGrease pencil data-block

Definition at line 498 of file gpencil.c.

References BKE_gpencil_free_data(), BKE_libblock_free_data(), BLI_assert, bGPdata::id, MEM_freeN, and ID::py_instance.

Referenced by BKE_gpencil_prepare_eval_data(), and BKE_object_free_derived_caches().

◆ BKE_gpencil_frame_addcopy()

bGPDframe* BKE_gpencil_frame_addcopy ( struct bGPDlayer gpl,
int  cframe 
)

◆ BKE_gpencil_frame_addnew()

bGPDframe* BKE_gpencil_frame_addnew ( struct bGPDlayer gpl,
int  cframe 
)

◆ BKE_gpencil_frame_copy_settings()

void BKE_gpencil_frame_copy_settings ( const bGPDframe gpf_src,
bGPDframe gpf_dst 
)

Definition at line 1034 of file gpencil.c.

References bGPDframe::flag, bGPDframe::framenum, and bGPDframe::key_type.

Referenced by gpencil_update_on_write_frame_cb().

◆ BKE_gpencil_frame_copy_strokes()

void BKE_gpencil_frame_copy_strokes ( struct bGPDframe gpf_src,
struct bGPDframe gpf_dst 
)

Make a copy of strokes between gpencil frames.

Parameters
gpf_srcSource grease pencil frame
gpf_dstDestination grease pencil frame

Definition at line 920 of file gpencil.c.

References BKE_gpencil_stroke_duplicate(), BLI_addtail(), BLI_listbase_clear(), LISTBASE_FOREACH, NULL, and bGPDframe::strokes.

Referenced by copy_frame_to_eval_ex().

◆ BKE_gpencil_frame_delete_laststroke()

void BKE_gpencil_frame_delete_laststroke ( struct bGPDlayer gpl,
struct bGPDframe gpf 
)

◆ BKE_gpencil_frame_duplicate()

bGPDframe* BKE_gpencil_frame_duplicate ( const bGPDframe gpf_src,
const bool  dup_strokes 
)

◆ BKE_gpencil_frame_original_pointers_update()

void BKE_gpencil_frame_original_pointers_update ( const struct bGPDframe gpf_orig,
const struct bGPDframe gpf_eval 
)

◆ BKE_gpencil_frame_range_selected()

void BKE_gpencil_frame_range_selected ( struct bGPDlayer gpl,
int *  r_initframe,
int *  r_endframe 
)

Get range of selected frames in layer. Always the active frame is considered as selected, so if no more selected the range will be equal to the current active frame.

Parameters
gplLayer.
r_initframeNumber of first selected frame.
r_endframeNumber of last selected frame.

Definition at line 1900 of file gpencil.c.

References bGPDlayer::actframe, bGPDframe::framenum, bGPDlayer::frames, GP_FRAME_SELECT, and LISTBASE_FOREACH.

Referenced by createTransGPencil_curves(), createTransGPencil_strokes(), gpencil_sculpt_brush_apply_standard(), gpencil_vertexpaint_brush_apply_to_layers(), and gpencil_weightpaint_brush_apply_to_layers().

◆ BKE_gpencil_frame_selected_hash()

void BKE_gpencil_frame_selected_hash ( bGPdata gpd,
struct GHash r_list 
)

◆ BKE_gpencil_free_data()

void BKE_gpencil_free_data ( struct bGPdata gpd,
bool  free_all 
)

◆ BKE_gpencil_free_frames()

void BKE_gpencil_free_frames ( struct bGPDlayer gpl)

◆ BKE_gpencil_free_layer_masks()

void BKE_gpencil_free_layer_masks ( bGPDlayer gpl)

◆ BKE_gpencil_free_layers()

void BKE_gpencil_free_layers ( struct ListBase list)

Free all of the gp-layers for a viewport (list should be &gpd->layers or so).

Definition at line 456 of file gpencil.c.

References BKE_gpencil_free_frames(), BKE_gpencil_free_layer_masks(), BLI_freelinkN(), ListBase::first, bGPDlayer::next, and NULL.

Referenced by BKE_gpencil_free_data(), ED_gpencil_anim_copybuf_free(), and ED_undo_gpencil_step().

◆ BKE_gpencil_free_point_weights()

void BKE_gpencil_free_point_weights ( MDeformVert dvert)

◆ BKE_gpencil_free_stroke()

void BKE_gpencil_free_stroke ( struct bGPDstroke gps)

◆ BKE_gpencil_free_stroke_editcurve()

void BKE_gpencil_free_stroke_editcurve ( bGPDstroke gps)

◆ BKE_gpencil_free_stroke_weights()

void BKE_gpencil_free_stroke_weights ( bGPDstroke gps)

◆ BKE_gpencil_free_strokes()

bool BKE_gpencil_free_strokes ( struct bGPDframe gpf)

◆ BKE_gpencil_from_image()

bool BKE_gpencil_from_image ( struct SpaceImage sima,
struct bGPdata gpd,
struct bGPDframe gpf,
float  size,
bool  mask 
)

◆ BKE_gpencil_layer_active_get()

bGPDlayer* BKE_gpencil_layer_active_get ( struct bGPdata gpd)

Get the active grease pencil layer for editing.

Parameters
gpdGrease pencil data-block
Returns
Pointer to layer

Definition at line 1558 of file gpencil.c.

References ELEM, ListBase::first, GP_LAYER_ACTIVE, bGPdata::layers, LISTBASE_FOREACH, and NULL.

Referenced by annotation_actframe_delete_poll(), annotation_paint_initstroke(), BKE_gpencil_convert_curve(), BKE_gpencil_frame_selected_hash(), BKE_gpencil_layer_addnew(), BKE_gpencil_layer_autolock_set(), ED_gpencil_drawing_reference_get(), ED_gpencil_has_keyframe_v3d(), ED_gpencil_set_active_channel(), get_automasking_strokes_list(), gpencil_actframe_delete_exec(), gpencil_actframe_delete_poll(), gpencil_active_layer_annotation_poll(), gpencil_active_layer_poll(), gpencil_blank_frame_add_exec(), GPENCIL_cache_init(), gpencil_convert_layer_exec(), gpencil_convert_poll(), gpencil_create_extensions(), gpencil_curve_edit_mode_poll(), gpencil_draw_datablock(), gpencil_fill_init(), gpencil_frame_duplicate_exec(), gpencil_hide_exec(), gpencil_interpolate_reverse_poll(), gpencil_isolate_layer_exec(), gpencil_layer_copy_exec(), gpencil_layer_duplicate_object_exec(), gpencil_layer_duplicate_object_poll(), gpencil_layer_mask_add_exec(), gpencil_layer_mask_move_exec(), gpencil_layer_mask_remove_exec(), gpencil_layer_move_exec(), gpencil_layer_remove_exec(), gpencil_merge_by_distance_poll(), gpencil_merge_layer_exec(), gpencil_paint_initstroke(), gpencil_primitive_add_poll(), gpencil_primitive_invoke(), gpencil_session_init_fill(), gpencil_stroke_apply_thickness_exec(), gpencil_stroke_arrange_exec(), gpencil_stroke_join_exec(), gpencil_stroke_normalize_poll(), gpencil_stroke_not_in_curve_edit_mode(), gpencil_stroke_separate_exec(), gpencil_strokes_paste_exec(), gpencil_transform_fill_poll(), gpencil_zoom_level_set(), OVERLAY_gpencil_cache_init(), screen_ctx_active_annotation_layer(), screen_ctx_active_gpencil_frame(), screen_ctx_active_gpencil_layer(), and trace_initialize_job_data().

◆ BKE_gpencil_layer_active_set()

void BKE_gpencil_layer_active_set ( struct bGPdata gpd,
struct bGPDlayer active 
)

◆ BKE_gpencil_layer_addnew()

bGPDlayer* BKE_gpencil_layer_addnew ( struct bGPdata gpd,
const char *  name,
bool  setactive,
bool  add_to_header 
)

Add a new gp-layer and make it the active layer.

Parameters
gpdGrease pencil data-block
nameName of the layer
setactiveSet as active
add_to_headerUsed to force the layer added at header
Returns
Pointer to new layer

Definition at line 621 of file gpencil.c.

References ARRAY_SET_ITEMS, BKE_gpencil_layer_active_get(), BKE_gpencil_layer_active_set(), BLI_addhead(), BLI_addtail(), BLI_insertlinkafter(), BLI_strncpy(), BLI_uniquename(), bGPDlayer::color, copy_v3_fl(), copy_v4_v4(), DATA_, bGPDlayer::flag, bGPdata::flag, bGPDlayer::gcolor_next, bGPDlayer::gcolor_prev, GP_DATA_ANNOTATIONS, GP_LAYER_ONIONSKIN, GP_LAYER_USE_LIGHTS, bGPDlayer::info, invert_m4_m4(), bGPDlayer::layer_invmat, bGPDlayer::layer_mat, bGPdata::layers, loc_eul_size_to_mat4(), bGPDlayer::location, MEM_callocN, NULL, bGPDlayer::onion_flag, bGPDlayer::opacity, bGPDlayer::rotation, bGPDlayer::scale, bGPDlayer::thickness, bGPDlayer::vertex_paint_opacity, and zero_v3().

Referenced by annotation_paint_initstroke(), BKE_gpencil_convert_curve(), BKE_gpencil_convert_mesh(), ED_gpencil_create_blank(), ED_gpencil_create_lineart(), ED_gpencil_create_monkey(), ED_gpencil_create_stroke(), gpencil_bake_grease_pencil_animation_exec(), gpencil_data_add_exec(), gpencil_layer_add_exec(), gpencil_layer_change_exec(), gpencil_layer_duplicate_object_exec(), gpencil_paint_initstroke(), gpencil_primitive_set_initdata(), gpencil_session_init_fill(), gpencil_stroke_separate_exec(), gpencil_strokes_paste_exec(), image_to_gpencil_exec(), blender::io::gpencil::GpencilImporterSVG::read(), trace_initialize_job_data(), and view3d_ruler_to_gpencil().

◆ BKE_gpencil_layer_autolock_set()

void BKE_gpencil_layer_autolock_set ( struct bGPdata gpd,
bool  unlock 
)

Set locked layers for autolock mode.

Parameters
gpdGrease pencil data-block
unlockUnlock flag

Definition at line 1623 of file gpencil.c.

References BKE_gpencil_layer_active_get(), BLI_assert, bGPdata::flag, GP_DATA_AUTOLOCK_LAYERS, GP_LAYER_LOCKED, bGPdata::layers, LISTBASE_FOREACH, and NULL.

Referenced by click_select_channel_gplayer(), and ED_gpencil_set_active_channel().

◆ BKE_gpencil_layer_copy_settings()

void BKE_gpencil_layer_copy_settings ( const bGPDlayer gpl_src,
bGPDlayer gpl_dst 
)

◆ BKE_gpencil_layer_delete()

void BKE_gpencil_layer_delete ( struct bGPdata gpd,
struct bGPDlayer gpl 
)

◆ BKE_gpencil_layer_duplicate()

bGPDlayer* BKE_gpencil_layer_duplicate ( const bGPDlayer gpl_src,
const bool  dup_frames,
const bool  dup_strokes 
)

◆ BKE_gpencil_layer_frame_delete()

bool BKE_gpencil_layer_frame_delete ( struct bGPDlayer gpl,
struct bGPDframe gpf 
)

◆ BKE_gpencil_layer_frame_find()

bGPDframe* BKE_gpencil_layer_frame_find ( struct bGPDlayer gpl,
int  cframe 
)

Look up the gp-frame on the requested frame number, but don't add a new one.

Parameters
gplGrease pencil layer
cframeFrame number
Returns
Pointer to frame

Definition at line 1216 of file gpencil.c.

References bGPDframe::framenum, bGPDlayer::frames, ListBase::last, NULL, and bGPDframe::prev.

Referenced by bake_strokes(), BKE_gpencil_stroke_copy_to_keyframes(), clear_strokes(), ED_gpencil_select_frame(), and gpencil_blank_frame_add_exec().

◆ BKE_gpencil_layer_frame_get()

bGPDframe* BKE_gpencil_layer_frame_get ( struct bGPDlayer gpl,
int  cframe,
eGP_GetFrame_Mode  addnew 
)

Get the appropriate gp-frame from a given layer

  • this sets the layer's actframe var (if allowed to)
  • extension beyond range (if first gp-frame is after all frame in interest and cannot add)
Parameters
gplGrease pencil layer
cframeFrame number
addnewAdd option
Returns
Pointer to new frame

Definition at line 1232 of file gpencil.c.

References blender::math::abs(), bGPDlayer::actframe, BKE_gpencil_frame_addcopy(), BKE_gpencil_frame_addnew(), CLOG_STR_ERROR, ListBase::first, bGPDframe::flag, bGPDlayer::flag, bGPDframe::framenum, bGPDlayer::frames, GP_FRAME_PAINT, GP_GETFRAME_ADD_COPY, GP_LAYER_FRAMELOCK, ListBase::last, LOG, bGPDframe::next, NULL, and bGPDframe::prev.

Referenced by annotation_draw_data_layers(), annotation_paint_initstroke(), bake_strokes(), BKE_gpencil_convert_curve(), BKE_gpencil_convert_mesh(), BKE_gpencil_frame_active_set(), BKE_gpencil_frame_delete_laststroke(), BKE_gpencil_frame_retime_get(), ED_gpencil_anim_copybuf_paste(), ED_gpencil_layer_merge(), gpencil_actframe_delete_all_exec(), gpencil_actframe_delete_exec(), gpencil_bake_grease_pencil_animation_exec(), gpencil_blank_frame_add_exec(), gpencil_brush_clone_add(), GPENCIL_cache_populate(), gpencil_convert_check_has_valid_timing(), gpencil_convert_poll(), gpencil_copy_visible_frames_to_eval(), gpencil_create_extensions(), gpencil_delete_temp_stroke_extension(), gpencil_draw_datablock(), gpencil_fill_modal(), gpencil_interpolate_modal(), gpencil_interpolate_seq_exec(), gpencil_layer_add_exec(), gpencil_layer_to_curve(), gpencil_paint_initstroke(), gpencil_prepare_stroke(), gpencil_primitive_interaction_end(), gpencil_select_same_layer(), gpencil_stroke_from_buffer(), gpencil_stroke_separate_exec(), gpencil_strokes_paste_exec(), gpencil_zoom_level_set(), insert_gpencil_key(), blender::io::gpencil::GpencilImporterSVG::read(), trace_start_job(), view3d_ruler_from_gpencil(), and view3d_ruler_to_gpencil().

◆ BKE_gpencil_layer_frames_sort()

void BKE_gpencil_layer_frames_sort ( struct bGPDlayer gpl,
bool r_has_duplicate_frames 
)

Sort grease pencil frames.

Parameters
gplGrease pencil layer
r_has_duplicate_framesDuplicated frames flag

Definition at line 1553 of file gpencil.c.

References BLI_listbase_sort_r(), bGPDlayer::frames, and gpencil_cb_cmp_frame().

Referenced by ANIM_animdata_update(), and posttrans_gpd_clean().

◆ BKE_gpencil_layer_get_by_name()

bGPDlayer* BKE_gpencil_layer_get_by_name ( bGPdata gpd,
char *  name,
int  first_if_not_found 
)

◆ BKE_gpencil_layer_is_editable()

bool BKE_gpencil_layer_is_editable ( const bGPDlayer gpl)

Definition at line 1200 of file gpencil.c.

References bGPDlayer::flag, GP_LAYER_HIDE, GP_LAYER_LOCKED, and NULL.

◆ BKE_gpencil_layer_mask_add()

bGPDlayer_Mask* BKE_gpencil_layer_mask_add ( struct bGPDlayer gpl,
const char *  name 
)

Add grease pencil mask layer.

Parameters
gplGrease pencil layer
nameName of the mask
Returns
Pointer to new mask layer

Definition at line 1435 of file gpencil.c.

References bGPDlayer::act_mask, BLI_addtail(), BLI_strncpy(), mask(), bGPDlayer::mask_layers, and MEM_callocN.

Referenced by gpencil_layer_mask_add_exec().

◆ BKE_gpencil_layer_mask_cleanup()

void BKE_gpencil_layer_mask_cleanup ( struct bGPdata gpd,
struct bGPDlayer gpl 
)

◆ BKE_gpencil_layer_mask_cleanup_all_layers()

void BKE_gpencil_layer_mask_cleanup_all_layers ( struct bGPdata gpd)

Clean any invalid mask layer for all layers.

Definition at line 1525 of file gpencil.c.

References BKE_gpencil_layer_mask_cleanup(), bGPdata::layers, and LISTBASE_FOREACH.

Referenced by gpencil_stroke_separate_exec().

◆ BKE_gpencil_layer_mask_copy()

void BKE_gpencil_layer_mask_copy ( const bGPDlayer gpl_src,
bGPDlayer gpl_dst 
)

◆ BKE_gpencil_layer_mask_named_get()

bGPDlayer_Mask* BKE_gpencil_layer_mask_named_get ( struct bGPDlayer gpl,
const char *  name 
)

Get mask layer by name.

Parameters
gplGrease pencil layer
nameMask name
Returns
Pointer to mask layer

Definition at line 1427 of file gpencil.c.

References BLI_findstring(), bGPDlayer::mask_layers, and NULL.

Referenced by ED_gpencil_layer_merge(), and gpencil_layer_mask_add_exec().

◆ BKE_gpencil_layer_mask_remove()

void BKE_gpencil_layer_mask_remove ( struct bGPDlayer gpl,
struct bGPDlayer_Mask mask 
)

Remove grease pencil mask layer.

Parameters
gplGrease pencil layer
maskGrease pencil mask layer

Definition at line 1446 of file gpencil.c.

References bGPDlayer::act_mask, BLI_freelinkN(), CLAMP_MIN, mask(), and bGPDlayer::mask_layers.

Referenced by BKE_gpencil_layer_mask_cleanup(), BKE_gpencil_layer_mask_remove_ref(), and gpencil_layer_mask_remove_exec().

◆ BKE_gpencil_layer_mask_remove_ref()

void BKE_gpencil_layer_mask_remove_ref ( struct bGPdata gpd,
const char *  name 
)

Remove any reference to mask layer.

Parameters
gpdGrease pencil data-block
nameName of the mask layer

Definition at line 1453 of file gpencil.c.

References BKE_gpencil_layer_mask_remove(), bGPdata::layers, LISTBASE_FOREACH, mask(), and STREQ.

Referenced by BKE_gpencil_layer_delete().

◆ BKE_gpencil_layer_mask_sort()

void BKE_gpencil_layer_mask_sort ( struct bGPdata gpd,
struct bGPDlayer gpl 
)

◆ BKE_gpencil_layer_mask_sort_all()

void BKE_gpencil_layer_mask_sort_all ( struct bGPdata gpd)

Sort all grease pencil mask layer.

Parameters
gpdGrease pencil data-block

Definition at line 1499 of file gpencil.c.

References BKE_gpencil_layer_mask_sort(), bGPdata::layers, and LISTBASE_FOREACH.

Referenced by gpencil_layer_move_exec(), and gpencil_layer_remove_exec().

◆ BKE_gpencil_layer_named_get()

bGPDlayer* BKE_gpencil_layer_named_get ( struct bGPdata gpd,
const char *  name 
)

◆ BKE_gpencil_layer_original_pointers_update()

void BKE_gpencil_layer_original_pointers_update ( const struct bGPDlayer gpl_orig,
const struct bGPDlayer gpl_eval 
)

Update original pointers in evaluated layer.

Parameters
gpl_origOriginal grease-pencil layer.
gpl_evalEvaluated grease pencil layer.

Definition at line 2663 of file gpencil.c.

References BKE_gpencil_frame_original_pointers_update(), ListBase::first, bGPDlayer::frames, bGPDframe_Runtime::gpf_orig, LISTBASE_FOREACH, bGPDframe::next, NULL, and bGPDframe::runtime.

Referenced by BKE_gpencil_data_update_orig_pointers(), gpencil_copy_structure_for_eval(), and gpencil_update_on_write_layer_cb().

◆ BKE_gpencil_layer_transform_matrix_get()

void BKE_gpencil_layer_transform_matrix_get ( const Depsgraph depsgraph,
Object obact,
bGPDlayer gpl,
float  diff_mat[4][4] 
)

◆ BKE_gpencil_material_find_index_by_name_prefix()

int BKE_gpencil_material_find_index_by_name_prefix ( struct Object ob,
const char *  name_prefix 
)

Find material by name prefix.

Parameters
obObject pointer
name_prefixPrefix name of the material
Returns
Index

Definition at line 2855 of file gpencil.c.

References BKE_object_material_get(), Material::gp_style, Material::id, ID::name, NULL, STREQLEN, and Object::totcol.

Referenced by BKE_gpencil_convert_mesh(), blender::io::gpencil::GpencilImporter::create_material(), and ED_gpencil_trace_data_to_strokes().

◆ BKE_gpencil_material_index_reassign()

void BKE_gpencil_material_index_reassign ( struct bGPdata gpd,
int  totcol,
int  index 
)

Reassign strokes using a material.

Parameters
gpdGrease pencil data-block
totcolTotal materials
indexIndex of the material

Definition at line 1948 of file gpencil.c.

References CLAMP_MIN, bGPdata::layers, and LISTBASE_FOREACH.

Referenced by BKE_object_material_slot_remove().

◆ BKE_gpencil_material_index_used()

bool BKE_gpencil_material_index_used ( struct bGPdata gpd,
int  index 
)

Remove strokes using a material.

Parameters
gpdGrease pencil data-block
indexIndex of the material
Returns
True if removed

Definition at line 1963 of file gpencil.c.

References bGPdata::layers, and LISTBASE_FOREACH.

Referenced by BKE_object_material_slot_used().

◆ BKE_gpencil_material_remap()

void BKE_gpencil_material_remap ( struct bGPdata gpd,
const unsigned int *  remap,
unsigned int  remap_len 
)

Remap material

Parameters
gpdGrease pencil data-block
remapRemap index
remap_lenRemap length

Definition at line 1978 of file gpencil.c.

References bGPdata::layers, LISTBASE_FOREACH, and MAT_NR_REMAP.

Referenced by BKE_object_material_remap().

◆ BKE_gpencil_merge_materials()

bool BKE_gpencil_merge_materials ( struct Object ob,
float  hue_threshold,
float  sat_threshold,
float  val_threshold,
int *  r_removed 
)

Merge similar materials

Parameters
obGrease pencil object
hue_thresholdThreshold for Hue
sat_thresholdThreshold for Saturation
val_thresholdThreshold for Value
r_removedNumber of materials removed
Returns
True if done

Definition at line 2122 of file gpencil.c.

References BKE_gpencil_material_settings(), BKE_gpencil_merge_materials_table_get(), BKE_object_material_len_p(), BLI_ghash_free(), BLI_ghash_haskey(), BLI_ghash_int_new(), BLI_ghash_len(), BLI_ghash_lookup(), Object::data, MaterialGPencilStyle::flag, GP_LAYER_HIDE, GP_LAYER_UNLOCK_COLOR, GP_MATERIAL_HIDE, GP_MATERIAL_LOCKED, bGPdata::layers, LISTBASE_FOREACH, NULL, POINTER_AS_INT, and POINTER_FROM_INT.

Referenced by BKE_gpencil_convert_curve(), and gpencil_stroke_merge_material_exec().

◆ BKE_gpencil_merge_materials_table_get()

bool BKE_gpencil_merge_materials_table_get ( struct Object ob,
float  hue_threshold,
float  sat_threshold,
float  val_threshold,
struct GHash r_mat_table 
)

Load a table with material conversion index for merged materials.

Parameters
obGrease pencil object.
hue_thresholdThreshold for Hue.
sat_thresholdThreshold for Saturation.
val_thresholdThreshold for Value.
r_mat_tablereturn material table.
Returns
True if done.

Definition at line 2003 of file gpencil.c.

References BKE_gpencil_material(), BKE_object_material_len_p(), BLI_ghash_free(), BLI_ghash_haskey(), BLI_ghash_insert(), BLI_ghash_int_new(), col, compare_ff(), copy_v3_v3(), MaterialGPencilStyle::fill_rgba, MaterialGPencilStyle::fill_style, MaterialGPencilStyle::flag, GP_MATERIAL_FILL_SHOW, GP_MATERIAL_LOCKED, GP_MATERIAL_STROKE_SHOW, Material::gp_style, MaterialGPencilStyle::mode, NULL, POINTER_FROM_INT, rgb_to_hsv_compat_v(), MaterialGPencilStyle::stroke_rgba, MaterialGPencilStyle::stroke_style, and zero_v3().

Referenced by BKE_gpencil_merge_materials().

◆ BKE_gpencil_multiframe_falloff_calc()

float BKE_gpencil_multiframe_falloff_calc ( struct bGPDframe gpf,
int  actnum,
int  f_init,
int  f_end,
struct CurveMapping cur_falloff 
)

Get Falloff factor base on frame range

Parameters
gpfFrame.
actnumNumber of active frame in layer.
f_initNumber of first selected frame.
f_endNumber of last selected frame.
cur_falloffCurve with falloff factors.

Definition at line 1917 of file gpencil.c.

References BKE_curvemapping_evaluateF(), float(), bGPDframe::framenum, and NULL.

Referenced by createTransGPencil_curves(), createTransGPencil_strokes(), gpencil_sculpt_brush_apply_standard(), gpencil_vertexpaint_brush_apply_to_layers(), and gpencil_weightpaint_brush_apply_to_layers().

◆ BKE_gpencil_object_material_ensure()

int BKE_gpencil_object_material_ensure ( struct Main bmain,
struct Object ob,
struct Material material 
)

Assigns the material to object (if not already present) and returns its index (mat_nr).

Parameters
bmainMain pointer
obGrease pencil object
materialMaterial
Returns
Index of the material

Definition at line 1720 of file gpencil.c.

References BKE_gpencil_object_material_index_get(), BKE_MAT_ASSIGN_USERPREF, BKE_object_material_assign(), BKE_object_material_slot_add(), material, and Object::totcol.

Referenced by ED_gpencil_join_objects_exec(), gpencil_copybuf_validate_colormap(), gpencil_layer_duplicate_object_exec(), gpencil_materials_copy_to_object_exec(), and gpencil_stroke_separate_exec().

◆ BKE_gpencil_object_material_ensure_active()

Material* BKE_gpencil_object_material_ensure_active ( struct Object ob)

Get active color, and add all default settings if we don't find anything.

Parameters
obGrease pencil object
Returns
Material pointer

Definition at line 1807 of file gpencil.c.

References BKE_gpencil_material_attr_init(), BKE_gpencil_object_material_ensure_from_active_input_material(), Material::gp_style, and NULL.

◆ BKE_gpencil_object_material_ensure_by_name()

Material* BKE_gpencil_object_material_ensure_by_name ( Main bmain,
Object ob,
const char *  name,
int *  r_index 
)

◆ BKE_gpencil_object_material_ensure_from_active_input_brush()

Material* BKE_gpencil_object_material_ensure_from_active_input_brush ( struct Main bmain,
struct Object ob,
struct Brush brush 
)

Guaranteed to return a material assigned to object. Returns never NULL.

Parameters
bmainMain pointer
obGrease pencil object.
brushBrush
Returns
Material pointer

Definition at line 1780 of file gpencil.c.

References BKE_gpencil_object_material_ensure_from_active_input_material(), BKE_gpencil_object_material_ensure_from_brush(), BrushGpencilSettings::flag, GP_BRUSH_MATERIAL_PINNED, and Brush::gpencil_settings.

Referenced by BKE_gpencil_object_material_ensure_from_active_input_toolsettings(), gpencil_init_colors(), and gpencil_session_init_fill().

◆ BKE_gpencil_object_material_ensure_from_active_input_material()

Material* BKE_gpencil_object_material_ensure_from_active_input_material ( struct Object ob)

Guaranteed to return a material assigned to object. Returns never NULL. Only use this for materials unrelated to user input.

Parameters
obGrease pencil object
Returns
Material pointer

Definition at line 1797 of file gpencil.c.

References Object::actcol, BKE_material_default_gpencil(), and BKE_object_material_get().

Referenced by BKE_gpencil_object_material_ensure_active(), and BKE_gpencil_object_material_ensure_from_active_input_brush().

◆ BKE_gpencil_object_material_ensure_from_active_input_toolsettings()

Material* BKE_gpencil_object_material_ensure_from_active_input_toolsettings ( struct Main bmain,
struct Object ob,
struct ToolSettings ts 
)

Guaranteed to return a material assigned to object. Returns never NULL.

Parameters
bmainMain pointer
obGrease pencil object
Returns
Material pointer.

Definition at line 1768 of file gpencil.c.

References BKE_gpencil_object_material_ensure_from_active_input_brush(), Paint::brush, ToolSettings::gp_paint, NULL, and GpPaint::paint.

Referenced by ED_gpencil_add_defaults(), and gpencil_primitive_init().

◆ BKE_gpencil_object_material_ensure_from_brush()

Material* BKE_gpencil_object_material_ensure_from_brush ( struct Main bmain,
struct Object ob,
struct Brush brush 
)

◆ BKE_gpencil_object_material_from_brush_get()

Material* BKE_gpencil_object_material_from_brush_get ( struct Object ob,
struct Brush brush 
)

Returns the material for a brush with respect to its pinned state.

Parameters
obGrease pencil object
brushBrush
Returns
Material pointer

Definition at line 1748 of file gpencil.c.

References Object::actcol, BKE_gpencil_brush_material_get(), BKE_object_material_get(), BrushGpencilSettings::flag, GP_BRUSH_MATERIAL_PINNED, and Brush::gpencil_settings.

Referenced by gpencil_brush_cursor_draw().

◆ BKE_gpencil_object_material_get_index_from_brush()

int BKE_gpencil_object_material_get_index_from_brush ( struct Object ob,
struct Brush brush 
)

Returns the material index for a brush with respect to its pinned state.

Parameters
obGrease pencil object
brushBrush
Returns
Material index.

Definition at line 1759 of file gpencil.c.

References Object::actcol, BKE_gpencil_object_material_index_get(), BrushGpencilSettings::flag, GP_BRUSH_MATERIAL_PINNED, Brush::gpencil_settings, and BrushGpencilSettings::material.

Referenced by gpencil_primitive_set_initdata(), gpencil_stroke_from_buffer(), and gpencil_stroke_newfrombuffer().

◆ BKE_gpencil_object_material_index_get()

int BKE_gpencil_object_material_index_get ( struct Object ob,
struct Material ma 
)

◆ BKE_gpencil_object_material_index_get_by_name()

int BKE_gpencil_object_material_index_get_by_name ( Object ob,
const char *  name 
)

◆ BKE_gpencil_object_material_new()

Material* BKE_gpencil_object_material_new ( struct Main bmain,
struct Object ob,
const char *  name,
int *  r_index 
)

Creates a new grease-pencil material and assigns it to object.

Parameters
bmainMain pointer
obGrease pencil object
nameMaterial name
r_indexvalue is set to zero based index of the new material if r_index is not NULL.
Returns
Material pointer.

Definition at line 1734 of file gpencil.c.

References Object::actcol, BKE_gpencil_material_add(), BKE_MAT_ASSIGN_USERPREF, BKE_object_material_assign(), BKE_object_material_slot_add(), Material::id, id_us_min(), bGPDlayer_Mask::name, and Object::totcol.

Referenced by BKE_gpencil_object_material_ensure_by_name(), blender::io::gpencil::GpencilImporter::create_material(), ED_gpencil_trace_data_to_strokes(), eyedropper_add_material(), gpencil_add_from_curve_material(), gpencil_add_material(), gpencil_convert_old_files_exec(), and image_to_gpencil_exec().

◆ BKE_gpencil_palette_ensure()

void BKE_gpencil_palette_ensure ( struct Main bmain,
struct Scene scene 
)

◆ BKE_gpencil_stats_update()

void BKE_gpencil_stats_update ( struct bGPdata gpd)

Calc grease pencil statistics functions.

Parameters
gpdGrease pencil data-block

Definition at line 2180 of file gpencil.c.

References bGPdata::layers, LISTBASE_FOREACH, bGPdata::totframe, bGPdata::totlayer, bGPdata::totpoint, and bGPdata::totstroke.

Referenced by stats_object().

◆ BKE_gpencil_stroke_add()

bGPDstroke* BKE_gpencil_stroke_add ( struct bGPDframe gpf,
int  mat_idx,
int  totpoints,
short  thickness,
bool  insert_at_head 
)

Create a new stroke and add to frame.

Parameters
gpfGrease pencil frame
mat_idxMaterial index
totpointsTotal points
thicknessStroke thickness
insert_at_headAdd to the head of the strokes list
Returns
Pointer to new stroke

Definition at line 792 of file gpencil.c.

References BKE_gpencil_stroke_new(), BLI_addhead(), BLI_addtail(), NULL, and bGPDframe::strokes.

Referenced by BKE_gpencil_convert_mesh(), BKE_gpencil_from_image(), BKE_gpencil_stroke_add_existing_style(), ED_gpencil_create_monkey(), ED_gpencil_create_stroke(), ED_gpencil_trace_data_to_strokes(), gpencil_generate_edgeloops(), and lineart_gpencil_generate().

◆ BKE_gpencil_stroke_add_existing_style()

bGPDstroke* BKE_gpencil_stroke_add_existing_style ( struct bGPDframe gpf,
struct bGPDstroke existing,
int  mat_idx,
int  totpoints,
short  thickness 
)

Add a stroke and copy the temporary drawing color value from one of the existing stroke.

Parameters
gpfGrease pencil frame
existingStroke with the style to copy
mat_idxMaterial index
totpointsTotal points
thicknessStroke thickness
Returns
Pointer to new stroke

Definition at line 810 of file gpencil.c.

References BKE_gpencil_stroke_add(), and bGPDstroke::runtime.

Referenced by BKE_gpencil_stroke_split().

◆ BKE_gpencil_stroke_copy_settings()

void BKE_gpencil_stroke_copy_settings ( const bGPDstroke gps_src,
bGPDstroke gps_dst 
)

◆ BKE_gpencil_stroke_curve_duplicate()

bGPDcurve* BKE_gpencil_stroke_curve_duplicate ( bGPDcurve gpc_src)

Definition at line 844 of file gpencil.c.

References bGPDcurve::curve_points, MEM_dupallocN, and NULL.

Referenced by BKE_gpencil_stroke_duplicate().

◆ BKE_gpencil_stroke_duplicate()

bGPDstroke* BKE_gpencil_stroke_duplicate ( struct bGPDstroke gps_src,
bool  dup_points,
bool  dup_curve 
)

◆ BKE_gpencil_stroke_editcurve_new()

bGPDcurve* BKE_gpencil_stroke_editcurve_new ( const int  tot_curve_points)

◆ BKE_gpencil_stroke_new()

bGPDstroke* BKE_gpencil_stroke_new ( int  mat_idx,
int  totpoints,
short  thickness 
)

◆ BKE_gpencil_stroke_select_check()

bool BKE_gpencil_stroke_select_check ( const bGPDstroke gps)

Definition at line 1825 of file gpencil.c.

References bGPDspoint::flag, GP_SPOINT_SELECT, and bGPDstroke::points.

◆ BKE_gpencil_stroke_select_index_reset()

void BKE_gpencil_stroke_select_index_reset ( struct bGPDstroke gps)

◆ BKE_gpencil_stroke_select_index_set()

void BKE_gpencil_stroke_select_index_set ( struct bGPdata gpd,
struct bGPDstroke gps 
)

◆ BKE_gpencil_stroke_sync_selection()

void BKE_gpencil_stroke_sync_selection ( struct bGPdata gpd,
struct bGPDstroke gps 
)

◆ BKE_gpencil_stroke_weights_duplicate()

void BKE_gpencil_stroke_weights_duplicate ( struct bGPDstroke gps_src,
struct bGPDstroke gps_dst 
)

Make a copy of a given gpencil weights.

Parameters
gps_srcSource grease pencil stroke
gps_dstDestination grease pencil stroke

Definition at line 834 of file gpencil.c.

References BKE_defvert_array_copy(), BLI_assert, bGPDstroke::dvert, NULL, and bGPDstroke::totpoints.

Referenced by BKE_gpencil_stroke_duplicate(), and gpencil_strokes_copy_exec().

◆ BKE_gpencil_tag()

void BKE_gpencil_tag ( struct bGPdata gpd)

Tag data-block for depsgraph update. Wrapper to avoid include Depsgraph tag functions in other modules.

Parameters
gpdGrease pencil data-block.

Definition at line 506 of file gpencil.c.

References DEG_id_tag_update(), bGPdata::id, ID_RECALC_GEOMETRY, and ID_RECALC_TRANSFORM.

Referenced by insert_gpencil_key().

◆ BKE_gpencil_update_layer_transforms()

void BKE_gpencil_update_layer_transforms ( const Depsgraph depsgraph,
Object ob 
)

◆ BKE_gpencil_update_on_write()

void BKE_gpencil_update_on_write ( bGPdata gpd_orig,
bGPdata gpd_eval 
)

◆ BKE_gpencil_update_orig_pointers()

void BKE_gpencil_update_orig_pointers ( const Object ob_orig,
const Object ob_eval 
)

Update pointers of eval data to original data to keep references.

Parameters
ob_origOriginal grease pencil object
ob_evalEvaluated grease pencil object

Definition at line 2700 of file gpencil.c.

References BKE_gpencil_data_update_orig_pointers(), and Object::data.

◆ BKE_gpencil_vgroup_remove()

void BKE_gpencil_vgroup_remove ( struct Object ob,
struct bDeformGroup defgroup 
)

◆ BKE_gpencil_visible_stroke_advanced_iter()

void BKE_gpencil_visible_stroke_advanced_iter ( ViewLayer view_layer,
Object ob,
gpIterCb  layer_cb,
gpIterCb  stroke_cb,
void thunk,
bool  do_onion,
int  cfra 
)

◆ BKE_gpencil_visible_stroke_iter()

void BKE_gpencil_visible_stroke_iter ( bGPdata gpd,
gpIterCb  layer_cb,
gpIterCb  stroke_cb,
void thunk 
)

◆ gpencil_cb_cmp_frame()

static int gpencil_cb_cmp_frame ( void thunk,
const void a,
const void b 
)
static

◆ gpencil_cb_sort_masks()

static int gpencil_cb_sort_masks ( const void arg1,
const void arg2 
)
static

Definition at line 1467 of file gpencil.c.

References bGPDlayer_Mask::sort_index.

Referenced by BKE_gpencil_layer_mask_sort().

◆ gpencil_is_layer_mask()

static bool gpencil_is_layer_mask ( ViewLayer view_layer,
bGPdata gpd,
bGPDlayer gpl_mask 
)
static

Helper to check if a layers is used as mask

Parameters
view_layerActual view layer.
gpdGrease pencil data-block.
gpl_maskActual Layer.
Returns
True if the layer is used as mask.

Definition at line 2361 of file gpencil.c.

References GP_LAYER_DISABLE_MASKS_IN_VIEWLAYER, bGPDlayer::info, bGPdata::layers, LISTBASE_FOREACH, mask(), ViewLayer::name, and STREQ.

Referenced by BKE_gpencil_visible_stroke_advanced_iter().

◆ gpencil_update_on_write_frame_cb()

static bool gpencil_update_on_write_frame_cb ( GPencilUpdateCache gpf_cache,
void user_data 
)
static

◆ gpencil_update_on_write_layer_cb()

static bool gpencil_update_on_write_layer_cb ( GPencilUpdateCache gpl_cache,
void user_data 
)
static

◆ gpencil_update_on_write_stroke_cb()

static bool gpencil_update_on_write_stroke_cb ( GPencilUpdateCache gps_cache,
void user_data 
)
static

◆ greasepencil_blend_read_data()

static void greasepencil_blend_read_data ( BlendDataReader reader,
ID id 
)
static

Definition at line 264 of file gpencil.c.

References BKE_gpencil_blend_read_data().

◆ greasepencil_blend_read_expand()

static void greasepencil_blend_read_expand ( BlendExpander expander,
ID id 
)
static

◆ greasepencil_blend_read_lib()

static void greasepencil_blend_read_lib ( BlendLibReader reader,
ID id 
)
static

◆ greasepencil_blend_write()

static void greasepencil_blend_write ( BlendWriter writer,
ID id,
const void id_address 
)
static

◆ greasepencil_copy_data()

static void greasepencil_copy_data ( Main UNUSEDbmain,
ID id_dst,
const ID id_src,
const int   UNUSEDflag 
)
static

◆ greasepencil_foreach_id()

static void greasepencil_foreach_id ( ID id,
LibraryForeachIDData data 
)
static

◆ greasepencil_free_data()

static void greasepencil_free_data ( ID id)
static

Definition at line 113 of file gpencil.c.

References BKE_gpencil_free_data().

Variable Documentation

◆ BKE_gpencil_batch_cache_dirty_tag_cb

void(* BKE_gpencil_batch_cache_dirty_tag_cb) (bGPdata *gpd) ( bGPdata gpd) = NULL

Definition at line 332 of file gpencil.c.

Referenced by BKE_gpencil_batch_cache_dirty_tag(), and DRW_engines_register().

◆ BKE_gpencil_batch_cache_free_cb

void(* BKE_gpencil_batch_cache_free_cb) (bGPdata *gpd) ( bGPdata gpd) = NULL

Definition at line 333 of file gpencil.c.

Referenced by BKE_gpencil_batch_cache_free(), and DRW_engines_register().

◆ IDType_ID_GD

IDTypeInfo IDType_ID_GD
Initial value:
= {
.id_code = ID_GD,
.id_filter = FILTER_ID_GD,
.main_listbase_index = INDEX_ID_GD,
.struct_size = sizeof(bGPdata),
.name = "GPencil",
.name_plural = "grease_pencils",
.translation_context = BLT_I18NCONTEXT_ID_GPENCIL,
.asset_type_info = NULL,
.copy_data = greasepencil_copy_data,
.free_data = greasepencil_free_data,
.make_local = NULL,
.foreach_id = greasepencil_foreach_id,
.foreach_cache = NULL,
.foreach_path = NULL,
.owner_get = NULL,
.blend_write = greasepencil_blend_write,
.blend_read_data = greasepencil_blend_read_data,
.blend_read_lib = greasepencil_blend_read_lib,
.blend_read_expand = greasepencil_blend_read_expand,
.blend_read_undo_preserve = NULL,
.lib_override_apply_post = NULL,
}
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition: BKE_idtype.h:39
#define BLT_I18NCONTEXT_ID_GPENCIL
@ INDEX_ID_GD
Definition: DNA_ID.h:990
#define FILTER_ID_GD
Definition: DNA_ID.h:904
@ ID_GD
Definition: DNA_ID_enums.h:71
struct bGPdata bGPdata
static void init_data(ModifierData *md)
static void greasepencil_blend_read_lib(BlendLibReader *reader, ID *id)
Definition: gpencil.c:270
static void greasepencil_blend_write(BlendWriter *writer, ID *id, const void *id_address)
Definition: gpencil.c:133
static void greasepencil_free_data(ID *id)
Definition: gpencil.c:113
static void greasepencil_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int UNUSED(flag))
Definition: gpencil.c:60
static void greasepencil_foreach_id(ID *id, LibraryForeachIDData *data)
Definition: gpencil.c:120
static void greasepencil_blend_read_expand(BlendExpander *expander, ID *id)
Definition: gpencil.c:287
static void greasepencil_blend_read_data(BlendDataReader *reader, ID *id)
Definition: gpencil.c:264

Definition at line 299 of file gpencil.c.

◆ LOG

CLG_LogRef LOG = {"bke.gpencil"}
static

Definition at line 58 of file gpencil.c.

Referenced by BKE_gpencil_frame_addnew(), and BKE_gpencil_layer_frame_get().