25 const bNode *node =
b.node_or_null();
33 b.add_input(socket_type, name, identifier)
38 b.add_output<
decl::Bundle>(
"Bundle").propagate_all().reference_pass_all();
51 dst_node->
storage = dst_storage;
65 *
tree, *node, *node, *link);
75 C, panel, ntree, node);
78 panel->prop(item_ptr,
"socket_type",
UI_ITEM_NONE,
"Type", ICON_NONE);
90 if (!
U.experimental.use_bundle_and_closure_nodes) {
91 params.set_default_remaining_outputs();
112 void *input_ptr =
params.low_level_lazy_function_params().try_get_input_data_ptr(
i);
117 params.set_output(
"Bundle", std::move(bundle_ptr));
135 ntype.
ui_name =
"Combine Bundle";
136 ntype.
ui_description =
"Combine multiple socket values into one.";
#define NODE_CLASS_CONVERTER
#define NODE_STORAGE_FUNCS(StorageT)
#define GEO_NODE_COMBINE_BUNDLE
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)
constexpr bool is_empty() const
static BundlePtr create()
bool add(const SocketInterfaceKey &key, const bke::bNodeSocketType &type, const void *value)
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)
bNodeSocketType * node_socket_type_find_static(int type, int subtype=0)
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_blend_write(const bNodeTree &, const bNode &node, BlendWriter &writer)
static void node_init(bNodeTree *, bNode *node)
static void node_geo_exec(GeoNodeExecParams params)
static void node_copy_storage(bNodeTree *, bNode *dst_node, const bNode *src_node)
static void node_operators()
static void node_blend_read(bNodeTree &, bNode &node, BlendDataReader &reader)
static void node_declare(NodeDeclarationBuilder &b)
static bool node_insert_link(bNodeTree *tree, bNode *node, bNodeLink *link)
static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *node_ptr)
static void node_register()
static void node_free_storage(bNode *node)
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)
ImplicitSharingPtr< Bundle > BundlePtr
void geo_node_type_base(blender::bke::bNodeType *ntype, std::string idname, const std::optional< int16_t > legacy_type)
NodeGeometryCombineBundleItem * items
const blender::CPPType * geometry_nodes_cpp_type
NodeBlendWriteFunction blend_write_storage_content
std::string ui_description
NodeBlendDataReadFunction blend_data_read_storage_content
void(* initfunc)(bNodeTree *ntree, bNode *node)
void(* draw_buttons_ex)(uiLayout *, bContext *C, PointerRNA *ptr)
NodeGeometryExecFunction geometry_node_execute
bool(* insert_link)(bNodeTree *ntree, bNode *node, bNodeLink *link)
NodeDeclareFunction declare
void(* register_operators)()
static void blend_write_item(BlendWriter *writer, const ItemT &item)
static StructRNA * item_srna
NodeGeometryCombineBundleItem ItemT
static void blend_read_data_item(BlendDataReader *reader, ItemT &item)
static std::string socket_identifier_for_item(const ItemT &item)
PanelLayout panel(const bContext *C, blender::StringRef idname, bool default_closed)