Blender
V4.3
source
blender
nodes
geometry
include
NOD_geo_menu_switch.hh
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2024 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
5
#pragma once
6
7
#include "
DNA_node_types.h
"
8
9
#include "
NOD_socket_items.hh
"
10
11
namespace
blender::nodes
{
12
18
struct
MenuSwitchItemsAccessor
{
19
using
ItemT
=
NodeEnumItem
;
20
static
StructRNA
*
item_srna
;
21
static
int
node_type
;
22
static
constexpr
const
char
*
node_idname
=
"GeometryNodeMenuSwitch"
;
23
static
constexpr
bool
has_type
=
false
;
24
static
constexpr
bool
has_name
=
true
;
25
static
constexpr
bool
has_single_identifier_str
=
true
;
26
27
static
socket_items::SocketItemsRef<NodeEnumItem>
get_items_from_node
(
bNode
&node)
28
{
29
auto
*storage =
static_cast<
NodeMenuSwitch
*
>
(node.storage);
30
return
{&storage->
enum_definition
.
items_array
,
31
&storage->enum_definition.items_num,
32
&storage->enum_definition.active_index};
33
}
34
35
static
void
copy_item
(
const
NodeEnumItem
&src,
NodeEnumItem
&dst)
36
{
37
dst = src;
38
dst.
name
=
BLI_strdup_null
(dst.
name
);
39
dst.
description
=
BLI_strdup_null
(dst.
description
);
40
}
41
42
static
void
destruct_item
(
NodeEnumItem
*item)
43
{
44
MEM_SAFE_FREE
(item->
name
);
45
MEM_SAFE_FREE
(item->
description
);
46
}
47
48
static
void
blend_write
(
BlendWriter
*writer,
const
bNode
&node);
49
static
void
blend_read_data
(
BlendDataReader
*reader,
bNode
&node);
50
51
static
char
**
get_name
(
NodeEnumItem
&item)
52
{
53
return
&item.
name
;
54
}
55
56
static
void
init_with_name
(
bNode
&node,
NodeEnumItem
&item,
const
char
*name)
57
{
58
auto
*storage =
static_cast<
NodeMenuSwitch
*
>
(node.storage);
59
item.
identifier
= storage->enum_definition.next_identifier++;
60
socket_items::set_item_name_and_make_unique<MenuSwitchItemsAccessor>
(node, item, name);
61
}
62
63
static
std::string
socket_identifier_for_item
(
const
NodeEnumItem
&item)
64
{
65
return
"Item_"
+ std::to_string(item.
identifier
);
66
}
67
};
68
69
}
// namespace blender::nodes
BLI_strdup_null
char * BLI_strdup_null(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_MALLOC
Definition
string.c:45
DNA_node_types.h
NodeEnumItem
struct NodeEnumItem NodeEnumItem
MEM_SAFE_FREE
#define MEM_SAFE_FREE(v)
Definition
MEM_guardedalloc.h:201
NOD_socket_items.hh
blender::nodes::socket_items::set_item_name_and_make_unique
void set_item_name_and_make_unique(bNode &node, typename Accessor::ItemT &item, const char *value)
Definition
NOD_socket_items.hh:92
blender::nodes
Definition
BKE_node.hh:63
BlendDataReader
Definition
readfile.cc:612
BlendWriter
Definition
writefile.cc:458
NodeEnumDefinition::items_array
NodeEnumItem * items_array
Definition
DNA_node_types.h:1698
NodeEnumItem
Definition
DNA_node_types.h:1688
NodeEnumItem::identifier
int32_t identifier
Definition
DNA_node_types.h:1692
NodeEnumItem::name
char * name
Definition
DNA_node_types.h:1689
NodeEnumItem::description
char * description
Definition
DNA_node_types.h:1690
NodeMenuSwitch
Definition
DNA_node_types.h:1710
NodeMenuSwitch::enum_definition
NodeEnumDefinition enum_definition
Definition
DNA_node_types.h:1711
StructRNA
Definition
rna_internal_types.hh:545
bNode
Definition
DNA_node_types.h:357
blender::nodes::MenuSwitchItemsAccessor
Definition
NOD_geo_menu_switch.hh:18
blender::nodes::MenuSwitchItemsAccessor::socket_identifier_for_item
static std::string socket_identifier_for_item(const NodeEnumItem &item)
Definition
NOD_geo_menu_switch.hh:63
blender::nodes::MenuSwitchItemsAccessor::copy_item
static void copy_item(const NodeEnumItem &src, NodeEnumItem &dst)
Definition
NOD_geo_menu_switch.hh:35
blender::nodes::MenuSwitchItemsAccessor::init_with_name
static void init_with_name(bNode &node, NodeEnumItem &item, const char *name)
Definition
NOD_geo_menu_switch.hh:56
blender::nodes::MenuSwitchItemsAccessor::get_items_from_node
static socket_items::SocketItemsRef< NodeEnumItem > get_items_from_node(bNode &node)
Definition
NOD_geo_menu_switch.hh:27
blender::nodes::MenuSwitchItemsAccessor::node_idname
static constexpr const char * node_idname
Definition
NOD_geo_menu_switch.hh:22
blender::nodes::MenuSwitchItemsAccessor::has_single_identifier_str
static constexpr bool has_single_identifier_str
Definition
NOD_geo_menu_switch.hh:25
blender::nodes::MenuSwitchItemsAccessor::blend_read_data
static void blend_read_data(BlendDataReader *reader, bNode &node)
Definition
node_geo_menu_switch.cc:540
blender::nodes::MenuSwitchItemsAccessor::node_type
static int node_type
Definition
NOD_geo_menu_switch.hh:21
blender::nodes::MenuSwitchItemsAccessor::destruct_item
static void destruct_item(NodeEnumItem *item)
Definition
NOD_geo_menu_switch.hh:42
blender::nodes::MenuSwitchItemsAccessor::has_name
static constexpr bool has_name
Definition
NOD_geo_menu_switch.hh:24
blender::nodes::MenuSwitchItemsAccessor::blend_write
static void blend_write(BlendWriter *writer, const bNode &node)
Definition
node_geo_menu_switch.cc:527
blender::nodes::MenuSwitchItemsAccessor::get_name
static char ** get_name(NodeEnumItem &item)
Definition
NOD_geo_menu_switch.hh:51
blender::nodes::MenuSwitchItemsAccessor::item_srna
static StructRNA * item_srna
Definition
NOD_geo_menu_switch.hh:20
blender::nodes::MenuSwitchItemsAccessor::has_type
static constexpr bool has_type
Definition
NOD_geo_menu_switch.hh:23
blender::nodes::socket_items::SocketItemsRef
Definition
NOD_socket_items.hh:36
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0