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
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 {
25class AttributeAccessor;
26class MutableAttributeAccessor;
27class GreasePencilRuntime;
28class GreasePencilDrawingRuntime;
29namespace greasepencil {
30class DrawingRuntime;
31class Drawing;
32class DrawingReference;
33class TreeNode;
34class Layer;
35class LayerRuntime;
36class LayerGroup;
37class LayerGroupRuntime;
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;
265 uint8_t color[3];
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
struct GreasePencilDrawingBase GreasePencilDrawingBase
struct GreasePencilLayerTreeGroup GreasePencilLayerTreeGroup
struct GreasePencilLayerFramesMapStorage GreasePencilLayerFramesMapStorage
struct GreasePencilDrawingReference GreasePencilDrawingReference
GreasePencilLayerBlendMode
@ GP_LAYER_BLEND_HARDLIGHT
@ GP_LAYER_BLEND_NONE
@ GP_LAYER_BLEND_MULTIPLY
@ GP_LAYER_BLEND_DIVIDE
@ GP_LAYER_BLEND_SUBTRACT
struct GreasePencilFrame GreasePencilFrame
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
struct GreasePencil GreasePencil
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
struct GreasePencilDrawing GreasePencilDrawing
GreasePencilDrawingType
@ GP_DRAWING_REFERENCE
struct GreasePencilRuntimeHandle GreasePencilRuntimeHandle
struct GreasePencilLayerTreeNode GreasePencilLayerTreeNode
struct GreasePencilOnionSkinningSettings GreasePencilOnionSkinningSettings
@ 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 GreasePencilLayerMask GreasePencilLayerMask
struct GreasePencilLayerGroupRuntimeHandle GreasePencilLayerGroupRuntimeHandle
struct GreasePencilDrawingRuntimeHandle GreasePencilDrawingRuntimeHandle
struct GreasePencilLayer GreasePencilLayer
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