Blender V4.3
BKE_gpencil_legacy.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15struct BlendDataReader;
16struct Brush;
17struct CurveMapping;
18struct Depsgraph;
19struct GHash;
20struct ListBase;
21struct MDeformVert;
22struct Main;
23struct Material;
24struct Object;
25struct Scene;
26struct SpaceImage;
27struct ToolSettings;
28struct ViewLayer;
29struct bDeformGroup;
30struct bGPDcurve;
31struct bGPDframe;
32struct bGPDlayer;
33struct bGPDlayer_Mask;
34struct bGPDstroke;
35struct bGPdata;
36
37#define GPENCIL_SIMPLIFY(scene) \
38 ((scene->r.mode & R_SIMPLIFY) && (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_ENABLE))
39#define GPENCIL_SIMPLIFY_ONPLAY(playing) \
40 (((playing == true) && (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_ON_PLAY)) || \
41 ((scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_ON_PLAY) == 0))
42#define GPENCIL_SIMPLIFY_FILL(scene, playing) \
43 ((GPENCIL_SIMPLIFY_ONPLAY(playing) && GPENCIL_SIMPLIFY(scene) && \
44 (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_FILL)))
45#define GPENCIL_SIMPLIFY_FX(scene, playing) \
46 ((GPENCIL_SIMPLIFY_ONPLAY(playing) && GPENCIL_SIMPLIFY(scene) && \
47 (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_FX)))
48#define GPENCIL_SIMPLIFY_TINT(scene) \
49 (GPENCIL_SIMPLIFY(scene) && (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_TINT))
50#define GPENCIL_SIMPLIFY_AA(scene) \
51 (GPENCIL_SIMPLIFY(scene) && (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_AA))
52
53/* Vertex Color macros. */
54#define GPENCIL_USE_VERTEX_COLOR(toolsettings) \
55 (((toolsettings)->gp_paint->mode == GPPAINT_FLAG_USE_VERTEXCOLOR))
56
57/* ------------ Grease-Pencil API ------------------ */
58
59/* clean vertex groups weights */
64void BKE_gpencil_free_stroke(struct bGPDstroke *gps);
66bool BKE_gpencil_free_strokes(struct bGPDframe *gpf);
68void BKE_gpencil_free_frames(struct bGPDlayer *gpl);
70void BKE_gpencil_free_layers(struct ListBase *list);
74void BKE_gpencil_free_data(struct bGPdata *gpd, bool free_all);
81void BKE_gpencil_tag(struct bGPdata *gpd);
82
85
92struct bGPDframe *BKE_gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe);
99struct bGPDframe *BKE_gpencil_frame_addcopy(struct bGPDlayer *gpl, int cframe);
108struct bGPDlayer *BKE_gpencil_layer_addnew(struct bGPdata *gpd,
109 const char *name,
110 bool setactive,
111 bool add_to_header);
118struct bGPdata *BKE_gpencil_data_addnew(struct Main *bmain, const char name[]);
119
125struct bGPDframe *BKE_gpencil_frame_duplicate(const struct bGPDframe *gpf_src, bool dup_strokes);
131struct bGPDlayer *BKE_gpencil_layer_duplicate(const struct bGPDlayer *gpl_src,
132 bool dup_frames,
133 bool dup_strokes);
134
143 bool dup_points,
144 bool dup_curve);
145
152 const struct bGPdata *gpd,
153 bool internal_copy);
154
162struct bGPDstroke *BKE_gpencil_stroke_new(int mat_idx, int totpoints, short thickness);
173 struct bGPDframe *gpf, int mat_idx, int totpoints, short thickness, bool insert_at_head);
174
176
177/* Stroke and Fill - Alpha Visibility Threshold */
178#define GPENCIL_ALPHA_OPACITY_THRESH 0.001f
179#define GPENCIL_STRENGTH_MIN 0.003f
180
187
188/* How gpencil_layer_getframe() should behave when there
189 * is no existing GP-Frame on the frame requested.
190 */
191typedef enum eGP_GetFrame_Mode {
192 /* Use the preceding gp-frame (i.e. don't add anything) */
194
195 /* Add a new empty/blank frame */
197 /* Make a copy of the active frame */
200
212 int cframe,
213 eGP_GetFrame_Mode addnew);
220struct bGPDframe *BKE_gpencil_layer_frame_find(struct bGPDlayer *gpl, int cframe);
227bool BKE_gpencil_layer_frame_delete(struct bGPDlayer *gpl, struct bGPDframe *gpf);
228
235struct bGPDlayer *BKE_gpencil_layer_named_get(struct bGPdata *gpd, const char *name);
247void BKE_gpencil_layer_active_set(struct bGPdata *gpd, struct bGPDlayer *active);
253void BKE_gpencil_layer_delete(struct bGPdata *gpd, struct bGPDlayer *gpl);
259void BKE_gpencil_layer_autolock_set(struct bGPdata *gpd, bool unlock);
260
266void BKE_gpencil_layer_mask_remove(struct bGPDlayer *gpl, struct bGPDlayer_Mask *mask);
272void BKE_gpencil_layer_mask_remove_ref(struct bGPdata *gpd, const char *name);
278void BKE_gpencil_layer_mask_sort(struct bGPdata *gpd, struct bGPDlayer *gpl);
287void BKE_gpencil_layer_mask_copy(const struct bGPDlayer *gpl_src, struct bGPDlayer *gpl_dst);
291void BKE_gpencil_layer_mask_cleanup(struct bGPdata *gpd, struct bGPDlayer *gpl);
292
298void BKE_gpencil_layer_frames_sort(struct bGPDlayer *gpl, bool *r_has_duplicate_frames);
299
300/* Brush */
306void BKE_gpencil_brush_material_set(struct Brush *brush, struct Material *material);
307
308/* vertex groups */
314void BKE_gpencil_stroke_weights_duplicate(struct bGPDstroke *gps_src, struct bGPDstroke *gps_dst);
315
324void BKE_gpencil_frame_range_selected(struct bGPDlayer *gpl, int *r_initframe, int *r_endframe);
334 struct bGPDframe *gpf, int actnum, int f_init, int f_end, struct CurveMapping *cur_falloff);
335
341void BKE_gpencil_palette_ensure(struct Main *bmain, struct Scene *scene);
342/* Iterators */
346typedef void (*gpIterCb)(struct bGPDlayer *layer,
347 struct bGPDframe *frame,
348 struct bGPDstroke *stroke,
349 void *thunk);
350
352 struct Object *ob,
353 gpIterCb layer_cb,
354 gpIterCb stroke_cb,
355 void *thunk,
356 bool do_onion,
357 int cfra);
358
359extern void (*BKE_gpencil_batch_cache_dirty_tag_cb)(struct bGPdata *gpd);
360extern void (*BKE_gpencil_batch_cache_free_cb)(struct bGPdata *gpd);
361
368 const struct bGPDframe *gpf_eval);
369
376 const struct bGPDlayer *gpl_eval);
382void BKE_gpencil_update_orig_pointers(const struct Object *ob_orig, const struct Object *ob_eval);
383
390 const struct bGPdata *gpd_eval);
391
400 struct Object *obact,
401 struct bGPDlayer *gpl,
402 float diff_mat[4][4]);
403
409void BKE_gpencil_update_layer_transforms(const struct Depsgraph *depsgraph, struct Object *ob);
410
417int BKE_gpencil_material_find_index_by_name_prefix(struct Object *ob, const char *name_prefix);
418
419void BKE_gpencil_blend_read_data(struct BlendDataReader *reader, struct bGPdata *gpd);
420
421#ifdef __cplusplus
422}
423#endif
bool BKE_gpencil_free_strokes(struct bGPDframe *gpf)
void BKE_gpencil_layer_active_set(struct bGPdata *gpd, struct bGPDlayer *active)
void BKE_gpencil_free_data(struct bGPdata *gpd, bool free_all)
void BKE_gpencil_layer_mask_sort(struct bGPdata *gpd, struct bGPDlayer *gpl)
void BKE_gpencil_batch_cache_dirty_tag(struct bGPdata *gpd)
void BKE_gpencil_free_stroke_weights(struct bGPDstroke *gps)
struct bGPDlayer * BKE_gpencil_layer_addnew(struct bGPdata *gpd, const char *name, bool setactive, bool add_to_header)
struct bGPDstroke * BKE_gpencil_stroke_new(int mat_idx, int totpoints, short thickness)
void BKE_gpencil_layer_mask_sort_all(struct bGPdata *gpd)
struct bGPDlayer * BKE_gpencil_layer_named_get(struct bGPdata *gpd, const char *name)
float BKE_gpencil_multiframe_falloff_calc(struct bGPDframe *gpf, int actnum, int f_init, int f_end, struct CurveMapping *cur_falloff)
void BKE_gpencil_layer_mask_copy(const struct bGPDlayer *gpl_src, struct bGPDlayer *gpl_dst)
void BKE_gpencil_free_point_weights(struct MDeformVert *dvert)
void BKE_gpencil_palette_ensure(struct Main *bmain, struct Scene *scene)
void(* gpIterCb)(struct bGPDlayer *layer, struct bGPDframe *frame, struct bGPDstroke *stroke, void *thunk)
struct bGPDframe * BKE_gpencil_frame_addcopy(struct bGPDlayer *gpl, int cframe)
struct bGPdata * BKE_gpencil_data_duplicate(struct Main *bmain, const struct bGPdata *gpd, bool internal_copy)
void BKE_gpencil_free_frames(struct bGPDlayer *gpl)
void BKE_gpencil_layer_mask_remove(struct bGPDlayer *gpl, struct bGPDlayer_Mask *mask)
void BKE_gpencil_layer_frames_sort(struct bGPDlayer *gpl, bool *r_has_duplicate_frames)
void BKE_gpencil_layer_original_pointers_update(const struct bGPDlayer *gpl_orig, const struct bGPDlayer *gpl_eval)
bool BKE_gpencil_layer_is_editable(const struct bGPDlayer *gpl)
void BKE_gpencil_free_legacy_palette_data(struct ListBase *list)
bool BKE_gpencil_layer_frame_delete(struct bGPDlayer *gpl, struct bGPDframe *gpf)
void BKE_gpencil_layer_mask_remove_ref(struct bGPdata *gpd, const char *name)
struct bGPDframe * BKE_gpencil_layer_frame_get(struct bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
struct bGPDlayer * BKE_gpencil_layer_active_get(struct bGPdata *gpd)
void BKE_gpencil_visible_stroke_advanced_iter(struct ViewLayer *view_layer, struct Object *ob, gpIterCb layer_cb, gpIterCb stroke_cb, void *thunk, bool do_onion, int cfra)
void BKE_gpencil_data_update_orig_pointers(const struct bGPdata *gpd_orig, const struct bGPdata *gpd_eval)
void BKE_gpencil_blend_read_data(struct BlendDataReader *reader, struct bGPdata *gpd)
void BKE_gpencil_free_layer_masks(struct bGPDlayer *gpl)
void BKE_gpencil_frame_range_selected(struct bGPDlayer *gpl, int *r_initframe, int *r_endframe)
void BKE_gpencil_frame_original_pointers_update(const struct bGPDframe *gpf_orig, const struct bGPDframe *gpf_eval)
void BKE_gpencil_layer_mask_cleanup(struct bGPdata *gpd, struct bGPDlayer *gpl)
struct bGPDstroke * BKE_gpencil_stroke_add(struct bGPDframe *gpf, int mat_idx, int totpoints, short thickness, bool insert_at_head)
struct bGPDstroke * BKE_gpencil_stroke_duplicate(struct bGPDstroke *gps_src, bool dup_points, bool dup_curve)
struct bGPDcurve * BKE_gpencil_stroke_editcurve_new(int tot_curve_points)
void BKE_gpencil_update_layer_transforms(const struct Depsgraph *depsgraph, struct Object *ob)
void BKE_gpencil_free_stroke_editcurve(struct bGPDstroke *gps)
void BKE_gpencil_free_stroke(struct bGPDstroke *gps)
struct bGPDframe * BKE_gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe)
struct bGPDlayer * BKE_gpencil_layer_duplicate(const struct bGPDlayer *gpl_src, bool dup_frames, bool dup_strokes)
void(* BKE_gpencil_batch_cache_dirty_tag_cb)(struct bGPdata *gpd)
void BKE_gpencil_update_orig_pointers(const struct Object *ob_orig, const struct Object *ob_eval)
struct bGPdata * BKE_gpencil_data_addnew(struct Main *bmain, const char name[])
void BKE_gpencil_layer_transform_matrix_get(const struct Depsgraph *depsgraph, struct Object *obact, struct bGPDlayer *gpl, float diff_mat[4][4])
int BKE_gpencil_material_find_index_by_name_prefix(struct Object *ob, const char *name_prefix)
void BKE_gpencil_batch_cache_free(struct bGPdata *gpd)
void BKE_gpencil_layer_delete(struct bGPdata *gpd, struct bGPDlayer *gpl)
void BKE_gpencil_free_layers(struct ListBase *list)
void(* BKE_gpencil_batch_cache_free_cb)(struct bGPdata *gpd)
struct bGPDframe * BKE_gpencil_frame_duplicate(const struct bGPDframe *gpf_src, bool dup_strokes)
void BKE_gpencil_stroke_weights_duplicate(struct bGPDstroke *gps_src, struct bGPDstroke *gps_dst)
void BKE_gpencil_tag(struct bGPdata *gpd)
void BKE_gpencil_brush_material_set(struct Brush *brush, struct Material *material)
eGP_GetFrame_Mode
@ GP_GETFRAME_ADD_NEW
@ GP_GETFRAME_ADD_COPY
@ GP_GETFRAME_USE_PREV
void BKE_gpencil_layer_autolock_set(struct bGPdata *gpd, bool unlock)
struct bGPDframe * BKE_gpencil_layer_frame_find(struct bGPDlayer *gpl, int cframe)
const Depsgraph * depsgraph