Blender V5.0
NOD_geo_foreach_geometry_element.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
11namespace blender::nodes {
12
17 static int node_type;
18 static constexpr StringRefNull node_idname = "GeometryNodeForeachGeometryElementOutput";
19 static constexpr bool has_type = true;
20 static constexpr bool has_name = true;
22 static constexpr StringRefNull add_item =
23 "NODE_OT_foreach_geometry_element_zone_input_item_add";
24 static constexpr StringRefNull remove_item =
25 "NODE_OT_foreach_geometry_element_zone_input_item_remove";
26 static constexpr StringRefNull move_item =
27 "NODE_OT_foreach_geometry_element_zone_input_item_move";
28 };
29 struct ui_idnames {
30 static constexpr StringRefNull list = "DATA_UL_foreach_geometry_element_input_items";
31 };
32 struct rna_names {
33 static constexpr StringRefNull items = "input_items";
34 static constexpr StringRefNull active_index = "active_input_index";
35 };
36
38 {
39 auto *storage = static_cast<NodeGeometryForeachGeometryElementOutput *>(node.storage);
40 return {&storage->input_items.items,
41 &storage->input_items.items_num,
42 &storage->input_items.active_index};
43 }
44
45 static void copy_item(const ItemT &src, ItemT &dst)
46 {
47 dst = src;
48 dst.name = BLI_strdup_null(dst.name);
49 }
50
51 static void destruct_item(ItemT *item)
52 {
53 MEM_SAFE_FREE(item->name);
54 }
55
56 static void blend_write_item(BlendWriter *writer, const ItemT &item);
57 static void blend_read_data_item(BlendDataReader *reader, ItemT &item);
58
60 {
62 }
63
64 static char **get_name(ItemT &item)
65 {
66 return &item.name;
67 }
68
69 static bool supports_socket_type(const eNodeSocketDatatype socket_type, const int /*ntree_type*/)
70 {
71 return ELEM(socket_type,
79 SOCK_MENU);
80 }
81
83 ItemT &item,
84 const eNodeSocketDatatype socket_type,
85 const char *name)
86 {
87 auto *storage = static_cast<NodeGeometryForeachGeometryElementOutput *>(node.storage);
88 item.socket_type = socket_type;
89 item.identifier = storage->generation_items.next_identifier++;
91 node, item, name);
92 }
93
94 static std::string socket_identifier_for_item(const ItemT &item)
95 {
96 return "Input_" + std::to_string(item.identifier);
97 }
98};
99
103 static int node_type;
104 static constexpr StringRefNull node_idname = "GeometryNodeForeachGeometryElementOutput";
105 static constexpr bool has_type = true;
106 static constexpr bool has_name = true;
108 static constexpr StringRefNull add_item =
109 "NODE_OT_foreach_geometry_element_zone_main_item_add";
110 static constexpr StringRefNull remove_item =
111 "NODE_OT_foreach_geometry_element_zone_main_item_remove";
112 static constexpr StringRefNull move_item =
113 "NODE_OT_foreach_geometry_element_zone_main_item_move";
114 };
115 struct ui_idnames {
116 static constexpr StringRefNull list = "DATA_UL_foreach_geometry_element_main_items";
117 };
118 struct rna_names {
119 static constexpr StringRefNull items = "main_items";
120 static constexpr StringRefNull active_index = "active_main_index";
121 };
122
124 {
125 auto *storage = static_cast<NodeGeometryForeachGeometryElementOutput *>(node.storage);
126 return {&storage->main_items.items,
127 &storage->main_items.items_num,
128 &storage->main_items.active_index};
129 }
130
131 static void copy_item(const ItemT &src, ItemT &dst)
132 {
133 dst = src;
134 dst.name = BLI_strdup_null(dst.name);
135 }
136
137 static void destruct_item(ItemT *item)
138 {
139 MEM_SAFE_FREE(item->name);
140 }
141
142 static void blend_write_item(BlendWriter *writer, const ItemT &item);
143 static void blend_read_data_item(BlendDataReader *reader, ItemT &item);
144
146 {
147 return eNodeSocketDatatype(item.socket_type);
148 }
149
150 static char **get_name(ItemT &item)
151 {
152 return &item.name;
153 }
154
155 static bool supports_socket_type(const eNodeSocketDatatype socket_type, const int /*ntree_type*/)
156 {
157 return ELEM(socket_type,
160 SOCK_RGBA,
164 SOCK_INT);
165 }
166
168 ItemT &item,
169 const eNodeSocketDatatype socket_type,
170 const char *name)
171 {
172 auto *storage = static_cast<NodeGeometryForeachGeometryElementOutput *>(node.storage);
173 item.socket_type = socket_type;
174 item.identifier = storage->generation_items.next_identifier++;
176 node, item, name);
177 }
178
179 static std::string socket_identifier_for_item(const ItemT &item)
180 {
181 return "Main_" + std::to_string(item.identifier);
182 }
183};
184
189 static int node_type;
190 static constexpr StringRefNull node_idname = "GeometryNodeForeachGeometryElementOutput";
191 static constexpr bool has_type = true;
192 static constexpr bool has_name = true;
194 static constexpr StringRefNull add_item =
195 "NODE_OT_foreach_geometry_element_zone_generation_item_add";
196 static constexpr StringRefNull remove_item =
197 "NODE_OT_foreach_geometry_element_zone_generation_item_remove";
198 static constexpr StringRefNull move_item =
199 "NODE_OT_foreach_geometry_element_zone_generation_item_move";
200 };
201 struct ui_idnames {
202 static constexpr StringRefNull list = "DATA_UL_foreach_geometry_element_generation_items";
203 };
204 struct rna_names {
205 static constexpr StringRefNull items = "generation_items";
206 static constexpr StringRefNull active_index = "active_generation_index";
207 };
208
210 {
211 auto *storage = static_cast<NodeGeometryForeachGeometryElementOutput *>(node.storage);
212 return {&storage->generation_items.items,
213 &storage->generation_items.items_num,
214 &storage->generation_items.active_index};
215 }
216
217 static void copy_item(const ItemT &src, ItemT &dst)
218 {
219 dst = src;
220 dst.name = BLI_strdup_null(dst.name);
221 }
222
223 static void destruct_item(ItemT *item)
224 {
225 MEM_SAFE_FREE(item->name);
226 }
227
228 static void blend_write_item(BlendWriter *writer, const ItemT &item);
229 static void blend_read_data_item(BlendDataReader *reader, ItemT &item);
230
232 {
233 return eNodeSocketDatatype(item.socket_type);
234 }
235
236 static char **get_name(ItemT &item)
237 {
238 return &item.name;
239 }
240
241 static bool supports_socket_type(const eNodeSocketDatatype socket_type, const int /*ntree_type*/)
242 {
243 return ELEM(socket_type,
246 SOCK_RGBA,
250 SOCK_INT,
252 }
253
255 ItemT &item,
256 const eNodeSocketDatatype socket_type,
257 const char *name)
258 {
259 auto *storage = static_cast<NodeGeometryForeachGeometryElementOutput *>(node.storage);
260 item.socket_type = socket_type;
261 item.identifier = storage->generation_items.next_identifier++;
263 node, item, name);
264 }
265
266 static std::string socket_identifier_for_item(const ItemT &item)
267 {
268 return "Generation_" + std::to_string(item.identifier);
269 }
270};
271
272} // namespace blender::nodes
char * BLI_strdup_null(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_MALLOC
Definition string.cc:46
#define ELEM(...)
eNodeSocketDatatype
@ SOCK_INT
@ SOCK_VECTOR
@ SOCK_BOOLEAN
@ SOCK_MATRIX
@ SOCK_FLOAT
@ SOCK_GEOMETRY
@ SOCK_ROTATION
@ SOCK_RGBA
@ SOCK_MENU
#define MEM_SAFE_FREE(v)
void set_item_name_and_make_unique(bNode &node, typename Accessor::ItemT &item, const char *value)
const char * name
void * storage
static void init_with_socket_type_and_name(bNode &node, ItemT &item, const eNodeSocketDatatype socket_type, const char *name)
static bool supports_socket_type(const eNodeSocketDatatype socket_type, const int)
static socket_items::SocketItemsRef< ItemT > get_items_from_node(bNode &node)
static socket_items::SocketItemsRef< ItemT > get_items_from_node(bNode &node)
static void init_with_socket_type_and_name(bNode &node, ItemT &item, const eNodeSocketDatatype socket_type, const char *name)
static bool supports_socket_type(const eNodeSocketDatatype socket_type, const int)
static void blend_read_data_item(BlendDataReader *reader, ItemT &item)
static void blend_write_item(BlendWriter *writer, const ItemT &item)
static bool supports_socket_type(const eNodeSocketDatatype socket_type, const int)
static void blend_write_item(BlendWriter *writer, const ItemT &item)
static socket_items::SocketItemsRef< ItemT > get_items_from_node(bNode &node)
static void init_with_socket_type_and_name(bNode &node, ItemT &item, const eNodeSocketDatatype socket_type, const char *name)
static void blend_read_data_item(BlendDataReader *reader, ItemT &item)