27# include <fmt/format.h>
57 grease_pencil->autolock_inactive_layers();
60 for (Layer *layer : grease_pencil->layers_for_write()) {
61 layer->set_locked(
false);
65 rna_grease_pencil_update(
nullptr,
nullptr,
ptr);
79 return drawing->wrap().user_count();
82static int rna_GreasePencilDrawing_curve_offset_data_length(
PointerRNA *
ptr)
93 drawing->
geometry.wrap().offsets_for_write().data(),
100static bool rna_GreasePencilDrawing_curve_offset_data_lookup_int(
PointerRNA *
ptr,
109 r_ptr->
type = &RNA_IntAttributeValue;
110 r_ptr->
data = &drawing->
geometry.wrap().offsets_for_write()[index];
121 iter, (
void *)sorted_keys.
data(),
sizeof(FramesMapKeyT), sorted_keys.
size(),
false,
nullptr);
131 &RNA_GreasePencilFrame,
135static int rna_GreasePencilLayer_frames_length(
PointerRNA *
ptr)
139 return layer.frames().size();
147 if (index < 0 || index >= layer.sorted_keys().size()) {
150 const FramesMapKeyT frame_key = layer.sorted_keys()[index];
154 r_ptr->
type = &RNA_GreasePencilFrame;
159static std::pair<int, const blender::bke::greasepencil::Layer *> find_layer_of_frame(
163 for (
const Layer *layer : grease_pencil.layers()) {
164 for (
const auto &[key, frame] : layer->frames().items()) {
165 if (&frame == &find_frame) {
166 return {
int(key), layer};
178 if (frame_to_find.is_end()) {
184 auto [frame_number, this_layer] = find_layer_of_frame(grease_pencil, frame_to_find);
185 if (this_layer ==
nullptr) {
189 const Drawing *drawing = grease_pencil.get_drawing_at(*this_layer, frame_number);
191 ptr, &RNA_GreasePencilDrawing,
static_cast<void *
>(
const_cast<Drawing *
>(drawing)));
202 auto [frame_number, this_layer] = find_layer_of_frame(grease_pencil, frame_to_find);
208static void rna_grease_pencil_layer_mask_name_get(
PointerRNA *
ptr,
char *dst)
212 if (mask->layer_name !=
nullptr) {
213 strcpy(dst, mask->layer_name);
220static int rna_grease_pencil_layer_mask_name_length(
PointerRNA *
ptr)
224 if (mask->layer_name !=
nullptr) {
225 return strlen(mask->layer_name);
230static void rna_grease_pencil_layer_mask_name_set(
PointerRNA *
ptr,
const char *value)
236 const std::string oldname(mask->layer_name);
238 grease_pencil->rename_node(*
G_MAIN, *node, value);
242static int rna_grease_pencil_active_mask_index_get(
PointerRNA *
ptr)
248static void rna_grease_pencil_active_mask_index_set(
PointerRNA *
ptr,
int value)
254static void rna_grease_pencil_active_mask_index_range(
270 iter, (
void *)layers.data(),
sizeof(Layer *), layers.size(), 0,
nullptr);
273static int rna_iterator_grease_pencil_layers_length(
PointerRNA *
ptr)
276 return grease_pencil->layers().size();
281 if (!node.name().is_empty()) {
282 strcpy(dst, node.name().c_str());
291 if (!node.name().is_empty()) {
292 return node.name().size();
302 const size_t name_length = node.name().size();
303 std::string name_esc(name_length * 2,
'\0');
304 BLI_str_escape(name_esc.data(), node.name().c_str(), name_length * 2);
305 return fmt::format(
"{}[\"{}\"]", prefix, name_esc.c_str());
308static std::optional<std::string> rna_GreasePencilLayer_path(
const PointerRNA *
ptr)
311 return tree_node_name_path(layer->wrap().as_node(),
"layers");
314static void rna_GreasePencilLayer_name_get(
PointerRNA *
ptr,
char *value)
317 tree_node_name_get(layer->wrap().as_node(), value);
323 return tree_node_name_length(layer->wrap().as_node());
326static void rna_GreasePencilLayer_name_set(
PointerRNA *
ptr,
const char *value)
331 grease_pencil->rename_node(*
G_MAIN, layer->wrap().as_node(), value);
334static int rna_GreasePencilLayer_pass_index_get(
PointerRNA *
ptr)
340 const int layer_idx = *grease_pencil.get_layer_index(layer);
342 const VArray layer_passes = *grease_pencil.attributes().lookup_or_default<
int>(
343 "pass_index", bke::AttrDomain::Layer, 0);
344 return layer_passes[layer_idx];
347static void rna_GreasePencilLayer_pass_index_set(
PointerRNA *
ptr,
int value)
353 const int layer_idx = *grease_pencil.get_layer_index(layer);
356 grease_pencil.attributes_for_write().lookup_or_add_for_write_span<
int>(
357 "pass_index", bke::AttrDomain::Layer);
358 layer_passes.
span[layer_idx] = std::max(0, value);
370 ed::greasepencil::grease_pencil_layer_parent_set(layer, parent, layer.parent_bone_name(),
false);
373static void rna_GreasePencilLayer_bone_set(
PointerRNA *
ptr,
const char *value)
378 ed::greasepencil::grease_pencil_layer_parent_set(layer, layer.parent, value,
false);
381static void rna_GreasePencilLayer_tint_color_get(
PointerRNA *
ptr,
float *values)
387 const int layer_idx = *grease_pencil.get_layer_index(layer);
390 "tint_color", bke::AttrDomain::Layer,
ColorGeometry4f(0.0f, 0.0f, 0.0f, 0.0f));
394static void rna_GreasePencilLayer_tint_color_set(
PointerRNA *
ptr,
const float *values)
400 const int layer_idx = *grease_pencil.get_layer_index(layer);
403 grease_pencil.attributes_for_write().lookup_or_add_for_write_span<
ColorGeometry4f>(
405 bke::AttrDomain::Layer,
407 ColorGeometry4f(0.0f, 0.0f, 0.0f, 0.0f), grease_pencil.layers().size())));
413static float rna_GreasePencilLayer_tint_factor_get(
PointerRNA *
ptr)
419 const int layer_idx = *grease_pencil.get_layer_index(layer);
422 "tint_color", bke::AttrDomain::Layer,
ColorGeometry4f(0.0f, 0.0f, 0.0f, 0.0f));
423 return tint_colors[layer_idx][3];
426static void rna_GreasePencilLayer_tint_factor_set(
PointerRNA *
ptr,
const float value)
432 const int layer_idx = *grease_pencil.get_layer_index(layer);
435 grease_pencil.attributes_for_write().lookup_or_add_for_write_span<
ColorGeometry4f>(
437 bke::AttrDomain::Layer,
439 ColorGeometry4f(0.0f, 0.0f, 0.0f, 0.0f), grease_pencil.layers().size())));
441 tint_colors.
span[layer_idx][3] = value;
445static float rna_GreasePencilLayer_radius_offset_get(
PointerRNA *
ptr)
451 const int layer_idx = *grease_pencil.get_layer_index(layer);
453 const VArray radius_offsets = *grease_pencil.attributes().lookup_or_default<
float>(
454 "radius_offset", bke::AttrDomain::Layer, 0.0f);
455 return radius_offsets[layer_idx];
458static void rna_GreasePencilLayer_radius_offset_set(
PointerRNA *
ptr,
const float value)
464 const int layer_idx = *grease_pencil.get_layer_index(layer);
467 grease_pencil.attributes_for_write().lookup_or_add_for_write_span<
float>(
469 bke::AttrDomain::Layer,
472 radius_offsets.
span[layer_idx] = value;
476static void rna_GreasePencilLayer_matrix_local_get(
PointerRNA *
ptr,
float *values)
480 std::copy_n(layer.local_transform().base_ptr(), 16, values);
483static void rna_GreasePencilLayer_matrix_parent_inverse_get(
PointerRNA *
ptr,
float *values)
487 std::copy_n(layer.parent_inverse().base_ptr(), 16, values);
499 ptr, &RNA_GreasePencilLayerGroup,
static_cast<void *
>(layer_group));
505 if (grease_pencil->has_active_layer()) {
507 ptr, &RNA_GreasePencilLayer,
static_cast<void *
>(grease_pencil->get_active_layer()));
512static void rna_GreasePencil_active_layer_set(
PointerRNA *
ptr,
527 if (!parent_group || parent_group == rna_grease_pencil(
ptr)->root_group_ptr) {
531 ptr, &RNA_GreasePencilLayerGroup,
static_cast<void *
>(parent_group));
537 if (grease_pencil->has_active_group()) {
539 ptr, &RNA_GreasePencilLayerGroup,
static_cast<void *
>(grease_pencil->get_active_group()));
544static void rna_GreasePencil_active_group_set(
PointerRNA *
ptr,
551 if (node->is_group()) {
552 grease_pencil->set_active_node(node);
557static std::optional<std::string> rna_GreasePencilLayerGroup_path(
const PointerRNA *
ptr)
560 return tree_node_name_path(group->wrap().as_node(),
"layer_groups");
563static void rna_GreasePencilLayerGroup_name_get(
PointerRNA *
ptr,
char *value)
566 tree_node_name_get(group->wrap().as_node(), value);
569static int rna_GreasePencilLayerGroup_name_length(
PointerRNA *
ptr)
572 return tree_node_name_length(group->wrap().as_node());
575static void rna_GreasePencilLayerGroup_name_set(
PointerRNA *
ptr,
const char *value)
580 grease_pencil->rename_node(*
G_MAIN, group->wrap().as_node(), value);
592 iter, (
void *)groups.data(),
sizeof(
LayerGroup *), groups.size(), 0,
nullptr);
595static int rna_iterator_grease_pencil_layer_groups_length(
PointerRNA *
ptr)
598 return grease_pencil->layer_groups().size();
611 {0,
nullptr, 0,
nullptr,
nullptr}};
637 "rna_GreasePencilDrawing_curve_offset_data_begin",
638 "rna_iterator_array_next",
639 "rna_iterator_array_end",
640 "rna_iterator_array_get",
641 "rna_GreasePencilDrawing_curve_offset_data_length",
642 "rna_GreasePencilDrawing_curve_offset_data_lookup_int",
647 prop,
"Curve Offsets",
"Offset indices of the first point of each curve");
664 ICON_KEYTYPE_KEYFRAME_VEC,
666 "Normal keyframe, e.g. for key poses"},
669 ICON_KEYTYPE_BREAKDOWN_VEC,
671 "A breakdown pose, e.g. for transitions between key poses"},
674 ICON_KEYTYPE_MOVING_HOLD_VEC,
676 "A keyframe that is part of a moving hold"},
679 ICON_KEYTYPE_EXTREME_VEC,
681 "An 'extreme' pose, or some other purpose as needed"},
684 ICON_KEYTYPE_JITTER_VEC,
686 "A filler or baked keyframe for keying on ones, or some other purpose as needed"},
689 ICON_KEYTYPE_GENERATED_VEC,
691 "A key generated automatically by a tool, not manually created"},
692 {0,
nullptr, 0,
nullptr,
nullptr},
756 "rna_grease_pencil_layer_mask_name_get",
757 "rna_grease_pencil_layer_mask_name_length",
758 "rna_grease_pencil_layer_mask_name_set");
785 srna,
"Grease Pencil Mask Layers",
"Collection of grease pencil masking layers");
790 "rna_grease_pencil_active_mask_index_get",
791 "rna_grease_pencil_active_mask_index_set",
792 "rna_grease_pencil_active_mask_index_range");
801 static const float scale_defaults[3] = {1.0f, 1.0f, 1.0f};
810 {0,
nullptr, 0,
nullptr,
nullptr}};
821 "rna_GreasePencilLayer_name_get",
822 "rna_GreasePencilLayer_name_length",
823 "rna_GreasePencilLayer_name_set");
832 "rna_GreasePencilLayer_frames_begin",
833 "rna_iterator_array_next",
834 "rna_iterator_array_end",
835 "rna_GreasePencilLayer_frames_get",
836 "rna_GreasePencilLayer_frames_length",
837 "rna_GreasePencilLayer_frames_lookup_int",
863 prop,
"Locked",
"Protect layer from further editing and/or frame changes");
894 prop,
"Onion Skinning",
"Display onion skins before and after the current frame");
901 "rna_GreasePencilLayer_tint_color_get",
902 "rna_GreasePencilLayer_tint_color_set",
911 "rna_GreasePencilLayer_tint_factor_get",
912 "rna_GreasePencilLayer_tint_factor_set",
921 "rna_GreasePencilLayer_radius_offset_get",
922 "rna_GreasePencilLayer_radius_offset_set",
936 "The visibility of drawings on this layer is affected by the layers in its masks list");
943 prop,
"Use Lights",
"Enable the use of lights on stroke and fill materials");
950 "rna_GreasePencilLayer_pass_index_get",
951 "rna_GreasePencilLayer_pass_index_set",
958 prop,
nullptr,
"rna_GreasePencilLayer_parent_set",
nullptr,
nullptr);
970 "Name of parent bone. Only used when the parent object is an armature.");
1000 "Only include Layer in this View Layer render output (leave blank to include always)");
1006 prop,
"Use Masks in Render",
"Include the mask layers when rendering the view-layer");
1020 prop,
"Ignore Material Locking",
"Allow editing strokes even if they use locked materials");
1035 prop,
"Inverse Parent Matrix",
"Inverse of layer's parent transformation matrix");
1037 prop,
"rna_GreasePencilLayer_matrix_parent_inverse_get",
nullptr,
nullptr);
1043 prop,
"rna_GreasePencilLayer_parent_layer_group_get",
nullptr,
nullptr,
nullptr);
1045 prop,
"Parent Layer Group",
"The parent layer group this layer is part of");
1063 "rna_GreasePencil_active_layer_get",
1064 "rna_GreasePencil_active_layer_set",
1088 "rna_GreasePencilLayerGroup_name_get",
1089 "rna_GreasePencilLayerGroup_name_length",
1090 "rna_GreasePencilLayerGroup_name_set");
1108 prop,
"Locked",
"Protect group from further editing and/or frame changes");
1117 "The visibility of drawings in the layers in this group is affected by "
1118 "the layers in the masks lists");
1126 prop,
"Onion Skinning",
"Display onion skins before and after the current frame");
1133 prop,
"rna_GreasePencilLayerGroup_parent_group_get",
nullptr,
nullptr,
nullptr);
1143 srna =
RNA_def_struct(brna,
"GreasePencilv3LayerGroup",
nullptr);
1150 "rna_GreasePencil_active_group_get",
1151 "rna_GreasePencil_active_group_set",
1170 "Frames in absolute range of the scene frame"},
1175 "Frames in relative range of the Grease Pencil keyframes"},
1177 {0,
nullptr, 0,
nullptr,
nullptr},
1184 ICON_KEYTYPE_KEYFRAME_VEC,
1186 "Normal keyframe, e.g. for key poses"},
1189 ICON_KEYTYPE_BREAKDOWN_VEC,
1191 "A breakdown pose, e.g. for transitions between key poses"},
1194 ICON_KEYTYPE_MOVING_HOLD_VEC,
1196 "A keyframe that is part of a moving hold"},
1199 ICON_KEYTYPE_EXTREME_VEC,
1201 "An 'extreme' pose, or some other purpose as needed"},
1204 ICON_KEYTYPE_JITTER_VEC,
1206 "A filler or baked keyframe for keying on ones, or some other purpose as needed"},
1209 ICON_KEYTYPE_GENERATED_VEC,
1211 "A key generated automatically by a tool, not manually created"},
1212 {0,
nullptr, 0,
nullptr,
nullptr},
1221 "Maximum number of frames to show before current frame "
1222 "(0 = don't show any frames before current)");
1231 "Maximum number of frames to show after current frame "
1232 "(0 = don't show any frames after current)");
1250 "rna_grease_pencil_update");
1260 "rna_grease_pencil_update");
1281 prop,
"Fade",
"Display onion keyframes with a fade in color transparency");
1289 prop,
"Show Start Frame",
"Display onion keyframes for looping animations");
1306 {0,
"2D", 0,
"2D Layers",
"Display strokes using grease pencil layers to define order"},
1311 "Display strokes using real 3D position in 3D space"},
1312 {0,
nullptr, 0,
nullptr,
nullptr},
1340 "rna_IDMaterials_assign_int");
1346 "rna_iterator_grease_pencil_layers_begin",
1347 "rna_iterator_array_next",
1348 "rna_iterator_array_end",
1349 "rna_iterator_array_dereference_get",
1350 "rna_iterator_grease_pencil_layers_length",
1361 "rna_iterator_grease_pencil_layer_groups_begin",
1362 "rna_iterator_array_next",
1363 "rna_iterator_array_end",
1364 "rna_iterator_array_dereference_get",
1365 "rna_iterator_grease_pencil_layer_groups_length",
1377 "Automatically lock all layers except the active one to avoid accidental changes");
1386 "Stroke Depth Order",
1387 "Defines how the strokes are ordered in 3D space (for objects not displayed 'In Front')");
Generic geometry attributes built on CustomData.
Low-level operations for curves.
Low-level operations for grease pencil.
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int max_ii(int a, int b)
MINLINE void copy_v3_v3(float r[3], const float a[3])
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ GP_LAYER_BLEND_HARDLIGHT
@ GP_LAYER_BLEND_MULTIPLY
@ GP_LAYER_BLEND_SUBTRACT
@ GP_ONION_SKINNING_MODE_ABSOLUTE
@ GP_ONION_SKINNING_MODE_SELECTED
@ GP_ONION_SKINNING_MODE_RELATIVE
@ 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
@ GREASE_PENCIL_AUTOLOCK_LAYERS
@ GREASE_PENCIL_STROKE_ORDER_3D
@ GP_ONION_SKINNING_USE_FADE
@ GP_ONION_SKINNING_SHOW_LOOP
@ GP_ONION_SKINNING_USE_CUSTOM_COLORS
@ 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
#define GREASE_PENCIL_ONION_SKINNING_FILTER_ALL
#define RNA_TRANSLATION_PREC_DEFAULT
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
constexpr PointerRNA PointerRNA_NULL
constexpr const T * data() const
constexpr int64_t size() const
const TreeNode & as_node() const
const LayerGroup * parent_group() const
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
float wrap(float value, float max, float min)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
void * rna_iterator_array_get(CollectionPropertyIterator *iter)
PointerRNA rna_pointer_inherit_refine(const PointerRNA *ptr, StructRNA *type, void *data)
void rna_def_animdata_common(StructRNA *srna)
void rna_def_attributes_common(StructRNA *srna, const AttributeOwnerType type)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, const int length[])
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
const int rna_matrix_dimsize_4x4[]
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structname, const char *propname)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_float_array_default(PropertyRNA *prop, const float *array)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
static void rna_def_grease_pencil_frame(BlenderRNA *brna)
static void rna_def_grease_pencil_data(BlenderRNA *brna)
static void rna_def_grease_pencil_drawing(BlenderRNA *brna)
static void rna_def_grease_pencil_layer_group(BlenderRNA *brna)
static void rna_def_grease_pencil_layer_masks(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_grease_pencil_layer_mask(BlenderRNA *brna)
void RNA_def_grease_pencil(BlenderRNA *brna)
static void rna_def_grease_pencil_onion_skinning(StructRNA *srna)
static void rna_def_grease_pencil_layer_groups(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_grease_pencil_frames(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_grease_pencil_layer(BlenderRNA *brna)
static void rna_def_grease_pencil_layers(BlenderRNA *brna, PropertyRNA *cprop)
void RNA_api_grease_pencil_drawing(StructRNA *srna)
void RNA_api_grease_pencil_frames(StructRNA *srna)
void RNA_api_grease_pencil_layer(StructRNA *srna)
void RNA_api_grease_pencil_layers(StructRNA *srna)
void RNA_api_grease_pencil_layer_groups(StructRNA *srna)
MutableVArraySpan< T > span
void WM_main_add_notifier(uint type, void *reference)