Blender V4.3
DNA_grease_pencil_types.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "DNA_ID.h"
12#include "DNA_curve_types.h"
13#include "DNA_curves_types.h"
14#include "DNA_listBase.h"
15
16#ifdef __cplusplus
17# include "BLI_bounds_types.hh"
18# include "BLI_function_ref.hh"
20# include "BLI_map.hh"
23# include "BLI_span.hh"
24namespace blender::bke {
28class GreasePencilDrawingRuntime;
29namespace greasepencil {
30class DrawingRuntime;
31class Drawing;
33class TreeNode;
34class Layer;
35class LayerRuntime;
36class LayerGroup;
38} // namespace greasepencil
39} // namespace blender::bke
44#else
49#endif
50
51struct Main;
52struct GreasePencil;
53struct Object;
54
61
71
79
95
115
129
135 /* When set, the frame is implicitly held until the next frame. E.g. it doesn't have a fixed
136 * duration. */
139
144typedef struct GreasePencilFrame {
157 char _pad[3];
158#ifdef __cplusplus
159 static GreasePencilFrame end();
160 bool is_end() const;
161 bool is_implicit_hold() const;
162 bool is_selected() const;
163#endif
165
169
175 /* Array of `frames` keys (sorted in ascending order). */
176 int *keys;
177 /* Array of `frames` values (order matches the keys array). */
179 /* Size of the map (number of key-value pairs). */
180 int num;
181 /* Flag for the status of the storage. */
182 int flag;
184
192
208
220
230
246
249 /* ListBase pointers. */
251 /* Parent pointer. Can be null. */
256 char *name;
271#ifdef __cplusplus
274#endif
276
326
338
359
368
377
379 /* Use custom colors (per object-data) for onion skinning. */
381 /* Fade the opacity of ghost frames further away from the current frame. */
383 /* Show looping frames in onion skinning. */
386
399
400#define GREASE_PENCIL_ONION_SKINNING_FILTER_ALL \
401 (GP_ONION_SKINNING_FILTER_KEYTYPE_KEYFRAME | GP_ONION_SKINNING_FILTER_KEYTYPE_EXTREME | \
402 GP_ONION_SKINNING_FILTER_KEYTYPE_BREAKDOWN | GP_ONION_SKINNING_FILTER_KEYTYPE_JITTER | \
403 GP_ONION_SKINNING_FILTER_KEYTYPE_MOVEHOLD)
404
412 float opacity;
413 /* #GreasePencilOnionSkinningMode. */
415 /* #GreasePencilOnionSkinningFlag. */
417 /* #GreasePencilOnionSkinningFilter. */
419 char _pad[1];
431 float color_before[3];
435 float color_after[3];
436 char _pad2[4];
438
442typedef struct GreasePencil {
445 struct AnimData *adt;
446
454 char _pad[4];
455
456 /* Root group of the layer tree. */
458
469 char _pad2[4];
470
476
482 char _pad3[2];
487
490 char _pad4[4];
491
500#ifdef __cplusplus
501 /* Root group. */
502 const blender::bke::greasepencil::LayerGroup &root_group() const;
504
505 /* Drawings read/write access. */
508 const GreasePencilDrawingBase *drawing(int64_t index) const;
509 GreasePencilDrawingBase *drawing(int64_t index);
510
511 /* Layers, layer groups and nodes read/write access. */
514 const blender::bke::greasepencil::Layer &layer(int64_t index) const;
516
519
522
523 /* Return the index of the layer if it's found, otherwise `std::nullopt`. */
524 std::optional<int> get_layer_index(const blender::bke::greasepencil::Layer &layer) const;
525
526 /* Active layer functions. */
527 bool has_active_layer() const;
528 const blender::bke::greasepencil::Layer *get_active_layer() const;
529 blender::bke::greasepencil::Layer *get_active_layer();
530 void set_active_layer(blender::bke::greasepencil::Layer *layer);
531 bool is_layer_active(const blender::bke::greasepencil::Layer *layer) const;
532 void autolock_inactive_layers();
533
534 /* Active group functions. */
535 bool has_active_group() const;
536 const blender::bke::greasepencil::LayerGroup *get_active_group() const;
537 blender::bke::greasepencil::LayerGroup *get_active_group();
538
539 /* Active node functions. */
540 const blender::bke::greasepencil::TreeNode *get_active_node() const;
541 blender::bke::greasepencil::TreeNode *get_active_node();
542 void set_active_node(blender::bke::greasepencil::TreeNode *node);
543
544 /* Adding layers and layer groups. */
547 bool check_name_is_unique = true);
552 bool check_name_is_unique = true);
554 blender::bke::greasepencil::Layer &duplicate_layer(
555 const blender::bke::greasepencil::Layer &duplicate_layer);
557 blender::bke::greasepencil::Layer &duplicate_layer(
559 const blender::bke::greasepencil::Layer &duplicate_layer);
562 bool check_name_is_unique = true);
566 bool check_name_is_unique = true);
567
572 void add_layers_for_eval(int num_new_layers);
573
574 /* Moving nodes. */
575 void move_node_up(blender::bke::greasepencil::TreeNode &node, int step = 1);
576 void move_node_down(blender::bke::greasepencil::TreeNode &node, int step = 1);
577 void move_node_top(blender::bke::greasepencil::TreeNode &node);
578 void move_node_bottom(blender::bke::greasepencil::TreeNode &node);
579
580 void move_node_after(blender::bke::greasepencil::TreeNode &node,
582 void move_node_before(blender::bke::greasepencil::TreeNode &node,
584 void move_node_into(blender::bke::greasepencil::TreeNode &node,
586
587 /* Search functions. */
588 const blender::bke::greasepencil::TreeNode *find_node_by_name(blender::StringRefNull name) const;
590 blender::IndexMask layer_selection_by_name(const blender::StringRefNull name,
591 blender::IndexMaskMemory &memory) const;
592
593 void rename_node(Main &bmain,
595 blender::StringRefNull new_name);
596
597 void remove_layer(blender::bke::greasepencil::Layer &layer);
598 void remove_group(blender::bke::greasepencil::LayerGroup &group, bool keep_children = false);
599
600 std::string unique_layer_name(blender::StringRef name);
601
602 /* Frames API functions. */
603
616 int frame_number,
617 int duration = 0,
619
625 int frame_number,
626 int duration = 0,
632 bool remove_frames(blender::bke::greasepencil::Layer &layer, blender::Span<int> frame_numbers);
633
638 void add_layers_with_empty_drawings_for_eval(int num);
639
644 void resize_drawings(int new_num);
646 void add_empty_drawings(int add_num);
647 void add_duplicate_drawings(int duplicate_num,
649 bool insert_duplicate_frame(blender::bke::greasepencil::Layer &layer,
650 int src_frame_number,
651 int dst_frame_number,
652 bool do_instance);
653
663 void move_frames(blender::bke::greasepencil::Layer &layer,
664 const blender::Map<int, int> &frame_number_destinations);
665
678 void move_duplicate_frames(blender::bke::greasepencil::Layer &layer,
679 const blender::Map<int, int> &frame_number_destinations,
680 const blender::Map<int, GreasePencilFrame> &duplicate_frames);
681
686 void remove_drawings_with_no_users();
690 void update_drawing_users_for_layer(const blender::bke::greasepencil::Layer &layer);
691
696 const blender::bke::greasepencil::Drawing *get_drawing_at(
697 const blender::bke::greasepencil::Layer &layer, int frame_number) const;
699 const blender::bke::greasepencil::Layer &layer, int frame_number);
704 blender::bke::greasepencil::Drawing *get_editable_drawing_at(
705 const blender::bke::greasepencil::Layer &layer, int frame_number);
706
711 const blender::bke::greasepencil::Drawing *get_eval_drawing(
712 const blender::bke::greasepencil::Layer &layer) const;
713 blender::bke::greasepencil::Drawing *get_eval_drawing(
715
716 std::optional<blender::Bounds<blender::float3>> bounds_min_max(int frame) const;
717 std::optional<blender::Bounds<blender::float3>> bounds_min_max_eval() const;
718
719 blender::bke::AttributeAccessor attributes() const;
720 blender::bke::MutableAttributeAccessor attributes_for_write();
721
722 void count_memory(blender::MemoryCounter &memory) const;
723
724 /* For debugging purposes. */
725 void print_layer_tree();
726#endif
ID and Library types, which are fundamental for SDNA.
eBezTriple_KeyframeType
@ BEZT_KEYTYPE_KEYFRAME
GreasePencilLayerBlendMode
@ GP_LAYER_BLEND_HARDLIGHT
@ GP_LAYER_BLEND_NONE
@ GP_LAYER_BLEND_MULTIPLY
@ GP_LAYER_BLEND_DIVIDE
@ GP_LAYER_BLEND_SUBTRACT
GreasePencilStrokeCapType
@ GP_STROKE_CAP_TYPE_FLAT
@ GP_STROKE_CAP_TYPE_ROUND
@ GP_STROKE_CAP_TYPE_MAX
GreasePencilLayerFramesMapStorageFlag
@ GP_LAYER_FRAMES_STORAGE_DIRTY
@ LAYERGROUP_COLOR_01
@ LAYERGROUP_COLOR_NONE
@ LAYERGROUP_COLOR_06
@ LAYERGROUP_COLOR_04
@ LAYERGROUP_COLOR_05
@ LAYERGROUP_COLOR_03
@ LAYERGROUP_COLOR_08
@ LAYERGROUP_COLOR_07
@ LAYERGROUP_COLOR_02
GreasePencilOnionSkinningMode
@ GP_ONION_SKINNING_MODE_ABSOLUTE
@ GP_ONION_SKINNING_MODE_SELECTED
@ GP_ONION_SKINNING_MODE_RELATIVE
GreasePencilDrawingBaseFlag
@ GreasePencilDrawingBaseFlag_TODO
GreasePencilLayerMaskFlag
@ GP_LAYER_MASK_INVERT
GreasePencilLayerTreeNodeType
@ GP_LAYER_TREE_GROUP
@ GP_FRAME_IMPLICIT_HOLD
GreasePencilLayerTreeNodeFlag
@ GP_LAYER_TREE_NODE_EXPANDED
@ GP_LAYER_TREE_NODE_IGNORE_LOCKED_MATERIALS
@ GP_LAYER_TREE_NODE_LOCKED
@ GP_LAYER_TREE_NODE_MUTE
@ GP_LAYER_TREE_NODE_HIDE
@ GP_LAYER_TREE_NODE_SELECT
@ GP_LAYER_TREE_NODE_HIDE_ONION_SKINNING
@ GP_LAYER_TREE_NODE_USE_LIGHTS
@ GP_LAYER_TREE_NODE_HIDE_MASKS
@ GP_LAYER_TREE_NODE_DISABLE_MASKS_IN_VIEWLAYER
GreasePencilDrawingType
@ GP_DRAWING_REFERENCE
struct GreasePencilRuntimeHandle GreasePencilRuntimeHandle
@ GREASE_PENCIL_AUTOLOCK_LAYERS
@ GREASE_PENCIL_ANIM_CHANNEL_EXPANDED
@ GREASE_PENCIL_STROKE_ORDER_3D
struct GreasePencilLayerRuntimeHandle GreasePencilLayerRuntimeHandle
GreasePencilOnionSkinningFlag
@ GP_ONION_SKINNING_USE_FADE
@ GP_ONION_SKINNING_SHOW_LOOP
@ GP_ONION_SKINNING_USE_CUSTOM_COLORS
GreasePencilOnionSkinningFilter
@ GP_ONION_SKINNING_FILTER_KEYTYPE_MOVEHOLD
@ GP_ONION_SKINNING_FILTER_KEYTYPE_JITTER
@ GP_ONION_SKINNING_FILTER_KEYTYPE_KEYFRAME
@ GP_ONION_SKINNING_FILTER_KEYTYPE_BREAKDOWN
@ GP_ONION_SKINNING_FILTER_KEYTYPE_EXTREME
struct GreasePencilLayerGroupRuntimeHandle GreasePencilLayerGroupRuntimeHandle
struct GreasePencilDrawingRuntimeHandle GreasePencilDrawingRuntimeHandle
These structs are the foundation for all linked lists in the library system.
float wrap(float value, float max, float min)
Definition node_math.h:71
signed short int16_t
Definition stdint.h:76
unsigned short uint16_t
Definition stdint.h:79
unsigned int uint32_t
Definition stdint.h:80
__int64 int64_t
Definition stdint.h:89
unsigned char uint8_t
Definition stdint.h:78
signed char int8_t
Definition stdint.h:75
GreasePencilDrawingBase base
GreasePencilDrawingRuntimeHandle * runtime
struct GreasePencilLayerMask * next
struct GreasePencilLayerMask * prev
GreasePencilLayerTreeNode base
GreasePencilLayerGroupRuntimeHandle * runtime
struct GreasePencilLayerTreeNode * next
struct GreasePencilLayerTreeNode * prev
struct GreasePencilLayerTreeGroup * parent
GreasePencilLayerRuntimeHandle * runtime
GreasePencilLayerTreeNode base
GreasePencilLayerFramesMapStorage frames_storage
GreasePencilLayerTreeNode * active_node
struct Material ** material_array
GreasePencilLayerTreeGroup * root_group_ptr
GreasePencilRuntimeHandle * runtime
GreasePencilDrawingBase ** drawing_array
GreasePencilOnionSkinningSettings onion_skinning_settings
struct AnimData * adt
Definition DNA_ID.h:413