Blender V4.5
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_attribute_types.h"
13#include "DNA_curve_types.h"
14#include "DNA_curves_types.h"
15#include "DNA_listBase.h"
16
17#ifdef __cplusplus
18# include "BLI_bounds_types.hh"
19# include "BLI_function_ref.hh"
20# include "BLI_index_mask_fwd.hh"
21# include "BLI_map.hh"
24# include "BLI_span.hh"
25namespace blender::bke {
29class GreasePencilDrawingRuntime;
30namespace greasepencil {
31class DrawingRuntime;
32class Drawing;
34class TreeNode;
35class Layer;
36class LayerRuntime;
37class LayerGroup;
39} // namespace greasepencil
40} // namespace blender::bke
45#else
50#endif
51
52struct Main;
53struct GreasePencil;
54struct Object;
55
62
72
80
89 int8_t type;
90 char _pad[3];
94 uint32_t flag;
96
116
130
136 /* When set, the frame is implicitly held until the next frame. E.g. it doesn't have a fixed
137 * duration. */
140
145typedef struct GreasePencilFrame {
153 uint32_t flag;
157 int8_t type;
158 char _pad[3];
159#ifdef __cplusplus
160 static GreasePencilFrame end();
161 bool is_end() const;
162 bool is_implicit_hold() const;
163 bool is_selected() const;
164#endif
166
170
176 /* Array of `frames` keys (sorted in ascending order). */
177 int *keys;
178 /* Array of `frames` values (order matches the keys array). */
180 /* Size of the map (number of key-value pairs). */
181 int num;
182 /* Flag for the status of the storage. */
183 int flag;
185
193
209
221
231
247
250 /* ListBase pointers. */
252 /* Parent pointer. Can be null. */
257 char *name;
262 int8_t type;
263 char _pad[7];
267 float color[3];
272 uint32_t flag;
273#ifdef __cplusplus
276#endif
278
328
340
361
370
379
381 /* Use custom colors (per object-data) for onion skinning. */
383 /* Fade the opacity of ghost frames further away from the current frame. */
385 /* Show looping frames in onion skinning. */
388
401
402#define GREASE_PENCIL_ONION_SKINNING_FILTER_ALL \
403 (GP_ONION_SKINNING_FILTER_KEYTYPE_KEYFRAME | GP_ONION_SKINNING_FILTER_KEYTYPE_EXTREME | \
404 GP_ONION_SKINNING_FILTER_KEYTYPE_BREAKDOWN | GP_ONION_SKINNING_FILTER_KEYTYPE_JITTER | \
405 GP_ONION_SKINNING_FILTER_KEYTYPE_MOVEHOLD)
406
414 float opacity;
415 /* #GreasePencilOnionSkinningMode. */
416 int8_t mode;
417 /* #GreasePencilOnionSkinningFlag. */
418 uint8_t flag;
419 /* #GreasePencilOnionSkinningFilter. */
420 uint8_t filter;
421 char _pad[1];
433 float color_before[3];
437 float color_after[3];
438 char _pad2[4];
440
444typedef struct GreasePencil {
445#ifdef __cplusplus
447 static constexpr ID_Type id_type = ID_GP;
448#endif
449
452 struct AnimData *adt;
453
461 char _pad[4];
462
463 /* Root group of the layer tree. */
465
470
476
483 char _pad2[4];
484
490
496 char _pad3[2];
500 uint32_t flag;
501
504 char _pad4[4];
505
514#ifdef __cplusplus
515 /* Root group. */
516 const blender::bke::greasepencil::LayerGroup &root_group() const;
518
519 /* Drawings read/write access. */
522 const GreasePencilDrawingBase *drawing(int64_t index) const;
523 GreasePencilDrawingBase *drawing(int64_t index);
524
525 /* Layers, layer groups and nodes read/write access. */
528 const blender::bke::greasepencil::Layer &layer(int64_t index) const;
530
533
536
537 /* Return the index of the layer if it's found, otherwise `std::nullopt`. */
538 std::optional<int> get_layer_index(const blender::bke::greasepencil::Layer &layer) const;
539
540 /* Active layer functions. */
541 bool has_active_layer() const;
542 const blender::bke::greasepencil::Layer *get_active_layer() const;
543 blender::bke::greasepencil::Layer *get_active_layer();
544 void set_active_layer(blender::bke::greasepencil::Layer *layer);
545 bool is_layer_active(const blender::bke::greasepencil::Layer *layer) const;
546 void autolock_inactive_layers();
547
548 /* Active group functions. */
549 bool has_active_group() const;
550 const blender::bke::greasepencil::LayerGroup *get_active_group() const;
551 blender::bke::greasepencil::LayerGroup *get_active_group();
552
553 /* Active node functions. */
554 const blender::bke::greasepencil::TreeNode *get_active_node() const;
555 blender::bke::greasepencil::TreeNode *get_active_node();
556 void set_active_node(blender::bke::greasepencil::TreeNode *node);
557
558 /* Adding layers and layer groups. */
561 bool check_name_is_unique = true);
566 bool check_name_is_unique = true);
568 blender::bke::greasepencil::Layer &duplicate_layer(
569 const blender::bke::greasepencil::Layer &duplicate_layer);
571 blender::bke::greasepencil::Layer &duplicate_layer(
573 const blender::bke::greasepencil::Layer &duplicate_layer);
576 bool check_name_is_unique = true);
580 bool check_name_is_unique = true);
581
586 void add_layers_for_eval(int num_new_layers);
587
588 /* Moving nodes. */
589 void move_node_up(blender::bke::greasepencil::TreeNode &node, int step = 1);
590 void move_node_down(blender::bke::greasepencil::TreeNode &node, int step = 1);
591 void move_node_top(blender::bke::greasepencil::TreeNode &node);
592 void move_node_bottom(blender::bke::greasepencil::TreeNode &node);
593
594 void move_node_after(blender::bke::greasepencil::TreeNode &node,
596 void move_node_before(blender::bke::greasepencil::TreeNode &node,
598 void move_node_into(blender::bke::greasepencil::TreeNode &node,
600
601 /* Search functions. */
602 const blender::bke::greasepencil::TreeNode *find_node_by_name(blender::StringRef name) const;
604 blender::IndexMask layer_selection_by_name(blender::StringRef name,
605 blender::IndexMaskMemory &memory) const;
606
607 void rename_node(Main &bmain,
609 blender::StringRef new_name);
610
611 void remove_layer(blender::bke::greasepencil::Layer &layer);
612 void remove_group(blender::bke::greasepencil::LayerGroup &group, bool keep_children = false);
613
614 std::string unique_layer_name(blender::StringRef name);
615
616 /* Frames API functions. */
617
630 int frame_number,
631 int duration = 0,
633
639 int frame_number,
640 int duration = 0,
646 bool remove_frames(blender::bke::greasepencil::Layer &layer, blender::Span<int> frame_numbers);
647
648 void copy_frames_from_layer(blender::bke::greasepencil::Layer &dst_layer,
649 const GreasePencil &src_grease_pencil,
650 const blender::bke::greasepencil::Layer &src_layer,
651 const std::optional<int> frame_select = std::nullopt);
656 void add_layers_with_empty_drawings_for_eval(int num);
657
662 void resize_drawings(int new_num);
664 void add_empty_drawings(int add_num);
665 void add_duplicate_drawings(int duplicate_num,
667 bool insert_duplicate_frame(blender::bke::greasepencil::Layer &layer,
668 int src_frame_number,
669 int dst_frame_number,
670 bool do_instance);
671
681 void move_frames(blender::bke::greasepencil::Layer &layer,
682 const blender::Map<int, int> &frame_number_destinations);
683
696 void move_duplicate_frames(blender::bke::greasepencil::Layer &layer,
697 const blender::Map<int, int> &frame_number_destinations,
698 const blender::Map<int, GreasePencilFrame> &duplicate_frames);
699
704 void remove_drawings_with_no_users();
708 void update_drawing_users_for_layer(const blender::bke::greasepencil::Layer &layer);
709
714 const blender::bke::greasepencil::Drawing *get_drawing_at(
715 const blender::bke::greasepencil::Layer &layer, int frame_number) const;
717 const blender::bke::greasepencil::Layer &layer, int frame_number);
722 blender::bke::greasepencil::Drawing *get_editable_drawing_at(
723 const blender::bke::greasepencil::Layer &layer, int frame_number);
724
729 const blender::bke::greasepencil::Drawing *get_eval_drawing(
730 const blender::bke::greasepencil::Layer &layer) const;
731 blender::bke::greasepencil::Drawing *get_eval_drawing(
733
734 std::optional<blender::Bounds<blender::float3>> bounds_min_max(int frame,
735 bool use_radius = true) const;
736 std::optional<blender::Bounds<blender::float3>> bounds_min_max_eval(
737 bool use_radius = true) const;
738
739 blender::bke::AttributeAccessor attributes() const;
740 blender::bke::MutableAttributeAccessor attributes_for_write();
741
745 std::optional<int> material_index_max() const;
746
747 void count_memory(blender::MemoryCounter &memory) const;
748
749 /* For debugging purposes. */
750 void print_layer_tree();
751#endif
ATTR_WARN_UNUSED_RESULT const size_t num
ID and Library types, which are fundamental for SDNA.
ID_Type
@ ID_GP
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.
long long int int64_t
VecBase< float, D > step(VecOp< float, D >, VecOp< float, D >) RET
float wrap(float value, float max, float min)
Definition node_math.h:71
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
struct AttributeStorage attribute_storage
Definition DNA_ID.h:404