25 const bNode *node =
b.node_or_null();
27 const auto &storage = node_storage(*node);
28 for (
const int i :
IndexRange(storage.input_items.items_num)) {
33 b.add_input(socket_type, item.
name, identifier);
35 for (
const int i :
IndexRange(storage.output_items.items_num)) {
38 const std::string identifier =
40 b.add_output(socket_type, item.
name, identifier).propagate_all().reference_pass_all();
58 dst_node->
storage = dst_storage;
73 if (link->
tonode == node) {
75 *ntree, *node, *node, *link);
78 *ntree, *node, *node, *link);
88 C, panel,
tree, node);
91 panel->prop(item_ptr,
"socket_type",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
96 C, panel,
tree, node);
99 panel->prop(item_ptr,
"socket_type",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
134 ntype.
ui_name =
"Evaluate Closure";
155 &RNA_NodeGeometryEvaluateClosureInputItem;
168 &RNA_NodeGeometryEvaluateClosureOutputItem;
182 const bNode &node = output_socket.owner_node();
184 BLI_assert(node.is_type(
"GeometryNodeEvaluateClosure"));
186 if (output_socket.index() >= storage.output_items.items_num) {
190 storage.output_items.items[output_socket.index()];
192 for (
const int i :
IndexRange(storage.input_items.items_num)) {
195 if (output_key.
matches(input_key)) {
196 if (!
tree.typeinfo->validate_link ||
200 return &node.input_socket(
i + 1);
#define NODE_CLASS_CONVERTER
#define NODE_STORAGE_FUNCS(StorageT)
#define GEO_NODE_EVALUATE_CLOSURE
void BLO_read_string(BlendDataReader *reader, char **ptr_p)
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
#define NOD_REGISTER_NODE(REGISTER_FUNC)
bool matches(const SocketInterfaceKey &other) const
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
void node_register_type(bNodeType &ntype)
void node_type_storage(bNodeType &ntype, std::optional< StringRefNull > storagename, void(*freefunc)(bNode *node), void(*copyfunc)(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node))
static void node_declare(NodeDeclarationBuilder &b)
static void node_operators()
static void node_blend_read(bNodeTree &, bNode &node, BlendDataReader &reader)
static const bNodeSocket * node_internally_linked_input(const bNodeTree &, const bNode &, const bNodeSocket &output_socket)
static void node_register()
static void node_free_storage(bNode *node)
static bool node_insert_link(bNodeTree *ntree, bNode *node, bNodeLink *link)
static void node_copy_storage(bNodeTree *, bNode *dst_node, const bNode *src_node)
static void node_init(bNodeTree *, bNode *node)
static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *ptr)
static void node_blend_write(const bNodeTree &, const bNode &node, BlendWriter &writer)
void make_common_operators()
static void draw_items_list_with_operators(const bContext *C, uiLayout *layout, const bNodeTree &tree, const bNode &node)
static void draw_active_item_props(const bNodeTree &tree, const bNode &node, const FunctionRef< void(PointerRNA *item_ptr)> draw_item)
void blend_write(BlendWriter *writer, const bNode &node)
void destruct_array(bNode &node)
void blend_read_data(BlendDataReader *reader, bNode &node)
void copy_array(const bNode &src_node, bNode &dst_node)
bool try_add_item_via_any_extend_socket(bNodeTree &ntree, bNode &extend_node, bNode &storage_node, bNodeLink &link, const std::optional< StringRef > socket_identifier=std::nullopt)
const bNodeSocket * evaluate_closure_node_internally_linked_input(const bNodeSocket &output_socket)
void geo_node_type_base(blender::bke::bNodeType *ntype, std::string idname, const std::optional< int16_t > legacy_type)
NodeInternallyLinkedInputFunction internally_linked_input
NodeBlendWriteFunction blend_write_storage_content
NodeBlendDataReadFunction blend_data_read_storage_content
void(* initfunc)(bNodeTree *ntree, bNode *node)
void(* draw_buttons_ex)(uiLayout *, bContext *C, PointerRNA *ptr)
bool(* insert_link)(bNodeTree *ntree, bNode *node, bNodeLink *link)
NodeDeclareFunction declare
void(* register_operators)()
static void blend_read_data_item(BlendDataReader *reader, ItemT &item)
NodeGeometryEvaluateClosureOutputItem ItemT
static void blend_write_item(BlendWriter *writer, const ItemT &item)
static std::string socket_identifier_for_item(const ItemT &item)
static StructRNA * item_srna
PanelLayout panel(const bContext *C, blender::StringRef idname, bool default_closed)