28#define DNA_DEPRECATED_ALLOW
64 std::optional<Library *> ,
102 for (
i = 0, pt = gps->points;
i < gps->totpoints;
i++, pt++) {
129 for (
int i = 0;
i < gpencil->
totcol;
i++) {
171 if (gps->editcurve !=
nullptr) {
185 if (gpd ==
nullptr) {
205 if (gpd->palettes.first !=
nullptr) {
225 gpl->runtime.icon_id = 0;
242 if (gps->editcurve !=
nullptr) {
272 N_(
"grease_pencils"),
300 if (dvert ==
nullptr) {
308 if (gps ==
nullptr) {
312 if (gps->
dvert ==
nullptr) {
324 if (gps ==
nullptr) {
328 if (editcurve ==
nullptr) {
338 if (gps ==
nullptr) {
377 if (gpl ==
nullptr) {
383 gpf_next = gpf->
next;
399 mask_next =
mask->next;
408 if (list ==
nullptr) {
414 gpl_next = gpl->
next;
461 if (gpl ==
nullptr) {
473 if (gf->framenum == cframe) {
479 if (gf->framenum > cframe) {
490 &
LOG,
"Frame (%d) existed already for this layer_active. Using existing frame", cframe);
499 else if (
state == 0) {
514 if (gpl ==
nullptr) {
528 if (gpf->framenum > cframe) {
535 if (gpf->framenum == cframe) {
548 if (found ==
false) {
564 const bool setactive,
565 const bool add_to_header)
571 if (gpd ==
nullptr) {
585 if (gpl_active ==
nullptr) {
700 if (gps_src ==
nullptr) {
709 const bool dup_points,
715 gps_dst->
prev = gps_dst->
next =
nullptr;
721 if (gps_src->
dvert !=
nullptr) {
726 gps_dst->
dvert =
nullptr;
730 gps_dst->
points =
nullptr;
731 gps_dst->
dvert =
nullptr;
746 if (gpf_src ==
nullptr) {
752 gpf_dst->
prev = gpf_dst->
next =
nullptr;
769 const bool dup_frames,
770 const bool dup_strokes)
776 if (gpl_src ==
nullptr) {
782 gpl_dst->
prev = gpl_dst->
next =
nullptr;
815 if (gpd_src ==
nullptr) {
841 if (gpl ==
nullptr) {
860 if (gpf->framenum == cframe) {
874 if (gpl ==
nullptr) {
895 for (; gpf; gpf = gpf->
next) {
910 if ((found) && (gpf->
framenum == cframe)) {
931 for (; gpf; gpf = gpf->
prev) {
940 if ((found) && (gpf->
framenum == cframe)) {
966 if (
abs(cframe - first) >
abs(cframe - last)) {
987 if ((found) && (gpf->
framenum == cframe)) {
1033 bool changed =
false;
1036 if (
ELEM(
nullptr, gpl, gpf)) {
1056 if (name[0] ==
'\0') {
1077 mask_next =
mask->next;
1107 if (gpl_mask !=
nullptr) {
1111 mask->sort_index = 0;
1129 mask_dst->
prev = mask_dst->
next =
nullptr;
1145 if (thunk !=
nullptr) {
1146 *((
bool *)thunk) =
true;
1210 if (gpl == layer_active) {
1233 if (
ELEM(
nullptr, gpd, gpl)) {
1270 const char *hexcol[] = {
1271 "FFFFFF",
"F2F2F2",
"E6E6E6",
"D9D9D9",
"CCCCCC",
"BFBFBF",
"B2B2B2",
"A6A6A6",
"999999",
1272 "8C8C8C",
"808080",
"737373",
"666666",
"595959",
"4C4C4C",
"404040",
"333333",
"262626",
1273 "1A1A1A",
"000000",
"F2FC24",
"FFEA00",
"FEA711",
"FE8B68",
"FB3B02",
"FE3521",
"D00000",
1274 "A81F3D",
"780422",
"2B0000",
"F1E2C5",
"FEE4B3",
"FEDABB",
"FEC28E",
"D88F57",
"BD6340",
1275 "A2402B",
"63352D",
"6B2833",
"34120C",
"E7CB8F",
"D1B38B",
"C1B17F",
"D7980B",
"FFB100",
1276 "FE8B00",
"FF6A00",
"B74100",
"5F3E1D",
"3B2300",
"FECADA",
"FE65CB",
"FE1392",
"DD3062",
1277 "C04A6D",
"891688",
"4D2689",
"441521",
"2C1139",
"241422",
"FFFF7D",
"FFFF00",
"FF7F00",
1278 "FF7D7D",
"FF7DFF",
"FF00FE",
"FF007F",
"FF0000",
"7F0000",
"0A0A00",
"F6FDFF",
"E9F7FF",
1279 "CFE6FE",
"AAC7FE",
"77B3FE",
"1E74FD",
"0046AA",
"2F4476",
"003052",
"0E0E25",
"EEF5F0",
1280 "D6E5DE",
"ACD8B9",
"6CADC6",
"42A9AF",
"007F7F",
"49675C",
"2E4E4E",
"1D3239",
"0F1C21",
1281 "D8FFF4",
"B8F4F5",
"AECCB5",
"76C578",
"358757",
"409B68",
"468768",
"1F512B",
"2A3C37",
1282 "122E1D",
"EFFFC9",
"E6F385",
"BCF51C",
"D4DC18",
"82D322",
"5C7F00",
"59932B",
"297F00",
1283 "004320",
"1C3322",
"00FF7F",
"00FF00",
"7DFF7D",
"7DFFFF",
"00FFFF",
"7D7DFF",
"7F00FF",
1284 "0000FF",
"3F007F",
"00007F"};
1292 const char *palette_id =
"Palette";
1296 if (palette ==
nullptr) {
1301 if (palette ==
nullptr) {
Blender kernel action and pose functionality.
void BKE_brush_tag_unsaved_changes(Brush *brush)
bool BKE_icon_delete(int icon_id)
IDTypeInfo IDType_ID_GD_LEGACY
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
void * BKE_libblock_alloc(Main *bmain, short type, const char *name, int flag) ATTR_WARN_UNUSED_RESULT
ID * BKE_id_copy(Main *bmain, const ID *id)
void BKE_id_blend_write(BlendWriter *writer, ID *id)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
General operations, lookup, etc. for materials.
PaletteColor * BKE_palette_color_add(Palette *palette)
Palette * BKE_palette_add(Main *bmain, const char *name)
void BKE_paint_palette_set(Paint *paint, Palette *palette)
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
void * BLI_findstring(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_insertlinkafter(ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_listbase_sort(ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
void void void BLI_listbase_sort_r(ListBase *listbase, int(*cmp)(void *, const void *, const void *), void *thunk) ATTR_NONNULL(1
void BLI_insertlinkbefore(ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
void hex_to_rgb(const char *hexcol, float *r_r, float *r_g, float *r_b)
void mul_m4_v3(const float M[4][4], float r[3])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
void loc_eul_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE bool is_one_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE bool is_zero_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void zero_v3(float r[3])
#define STRNCPY_UTF8(dst, src)
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
#define ARRAY_SET_ITEMS(...)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_write_struct_array(writer, struct_name, array_size, data_ptr)
#define BLO_read_struct_list(reader, struct_name, list)
#define BLO_read_struct_array(reader, struct_name, array_size, ptr_p)
#define BLO_write_struct_list(writer, struct_name, list_ptr)
#define BLO_read_struct(reader, struct_name, ptr_p)
void BLO_write_pointer_array(BlendWriter *writer, int64_t num, const void *data_ptr)
void BLO_read_pointer_array(BlendDataReader *reader, int64_t array_size, void **ptr_p)
#define BLT_I18NCONTEXT_ID_GPENCIL
#define CLOG_ERROR(clg_ref,...)
#define CLOG_STR_ERROR(clg_ref, str)
void DEG_id_tag_update(ID *id, unsigned int flags)
#define GP_DEFAULT_CURVE_EDIT_CORNER_ANGLE
#define GP_DEFAULT_PIX_FACTOR
#define GP_DEFAULT_CURVE_RESOLUTION
#define GP_DEFAULT_GRID_LINES
#define GP_DEFAULT_CURVE_ERROR
@ GP_DATA_SHOW_ONIONSKINS
@ GP_DATA_CURVE_ADAPTIVE_RESOLUTION
@ GP_DATA_STROKE_WEIGHTMODE
@ GP_DATA_STROKE_VERTEXMODE
@ GP_DATA_STROKE_PAINTMODE
@ GP_DATA_STROKE_SCULPTMODE
@ GP_DATA_AUTOLOCK_LAYERS
@ GP_DATA_STROKE_EDITMODE
Read Guarded memory(de)allocation.
BMesh const char void * data
static void greasepencil_copy_data(Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
bGPDframe * BKE_gpencil_frame_addcopy(bGPDlayer *gpl, int cframe)
bGPDframe * BKE_gpencil_frame_duplicate(const bGPDframe *gpf_src, const bool dup_strokes)
void BKE_gpencil_tag(bGPdata *gpd)
void BKE_gpencil_free_stroke_weights(bGPDstroke *gps)
bGPDframe * BKE_gpencil_layer_frame_get(bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
bGPDstroke * BKE_gpencil_stroke_duplicate(bGPDstroke *gps_src, const bool dup_points, const bool)
void BKE_gpencil_layer_mask_copy(const bGPDlayer *gpl_src, bGPDlayer *gpl_dst)
bGPDlayer * BKE_gpencil_layer_named_get(bGPdata *gpd, const char *name)
bGPdata * BKE_gpencil_data_addnew(Main *bmain, const char name[])
bGPDlayer * BKE_gpencil_layer_duplicate(const bGPDlayer *gpl_src, const bool dup_frames, const bool dup_strokes)
void BKE_gpencil_free_frames(bGPDlayer *gpl)
static int gpencil_cb_sort_masks(const void *arg1, const void *arg2)
bGPDlayer * BKE_gpencil_layer_active_get(bGPdata *gpd)
void BKE_gpencil_free_point_weights(MDeformVert *dvert)
void BKE_gpencil_layer_mask_remove(bGPDlayer *gpl, bGPDlayer_Mask *mask)
bool BKE_gpencil_layer_is_editable(const bGPDlayer *gpl)
void BKE_gpencil_free_stroke_editcurve(bGPDstroke *gps)
void BKE_gpencil_layer_autolock_set(bGPdata *gpd, const bool unlock)
void BKE_gpencil_free_layers(ListBase *list)
void BKE_gpencil_stroke_weights_duplicate(bGPDstroke *gps_src, bGPDstroke *gps_dst)
static void greasepencil_blend_write(BlendWriter *writer, ID *id, const void *id_address)
static void greasepencil_free_data(ID *id)
bool BKE_gpencil_free_strokes(bGPDframe *gpf)
void BKE_gpencil_layer_frames_sort(bGPDlayer *gpl, bool *r_has_duplicate_frames)
void BKE_gpencil_palette_ensure(Main *bmain, Scene *scene)
void BKE_gpencil_free_legacy_palette_data(ListBase *list)
void BKE_gpencil_free_layer_masks(bGPDlayer *gpl)
bGPdata * BKE_gpencil_data_duplicate(Main *bmain, const bGPdata *gpd_src, bool internal_copy)
static int gpencil_cb_cmp_frame(void *thunk, const void *a, const void *b)
bGPDframe * BKE_gpencil_layer_frame_find(bGPDlayer *gpl, int cframe)
static void greasepencil_foreach_id(ID *id, LibraryForeachIDData *data)
void BKE_gpencil_layer_mask_remove_ref(bGPdata *gpd, const char *name)
bGPDframe * BKE_gpencil_frame_addnew(bGPDlayer *gpl, int cframe)
void BKE_gpencil_blend_read_data(BlendDataReader *reader, bGPdata *gpd)
bool BKE_gpencil_layer_frame_delete(bGPDlayer *gpl, bGPDframe *gpf)
void BKE_gpencil_layer_mask_sort_all(bGPdata *gpd)
void BKE_gpencil_free_data(bGPdata *gpd, bool)
void BKE_gpencil_free_stroke(bGPDstroke *gps)
bGPDlayer * BKE_gpencil_layer_addnew(bGPdata *gpd, const char *name, const bool setactive, const bool add_to_header)
void BKE_gpencil_brush_material_set(Brush *brush, Material *ma)
static void greasepencil_blend_read_data(BlendDataReader *reader, ID *id)
void BKE_gpencil_layer_active_set(bGPdata *gpd, bGPDlayer *active)
void BKE_gpencil_layer_mask_sort(bGPdata *gpd, bGPDlayer *gpl)
void BKE_gpencil_layer_delete(bGPdata *gpd, bGPDlayer *gpl)
#define FILTER_ID_GD_LEGACY
#define ID_IS_LINKED(_id)
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
struct Material * material
struct BrushGpencilSettings * gpencil_settings
struct ToolSettings * toolsettings
bGPDcurve_point * curve_points
struct bGPDlayer_Mask * prev
struct bGPDlayer_Mask * next
bGPDlayer_Runtime runtime
float vertex_paint_opacity
struct bGPDcurve * editcurve
struct MDeformVert * dvert
ListBase vertex_group_names
float curve_edit_corner_angle
int curve_edit_resolution
float curve_edit_threshold