18#include <fmt/format.h>
28 const bNode *node =
b.node_or_null();
36 b.add_output(socket_type, name, identifier)
39 .reference_pass_all();
55 dst_node->
storage = dst_storage;
69 *tree, *node, *node, *link);
78 socket_items::ui::draw_items_list_with_operators<SeparateBundleItemsAccessor>(
79 C, panel, ntree, node);
80 socket_items::ui::draw_active_item_props<SeparateBundleItemsAccessor>(
82 panel->prop(item_ptr,
"socket_type",
UI_ITEM_NONE,
"Type", ICON_NONE);
94 if (!
U.experimental.use_bundle_and_closure_nodes) {
123 fmt::format(fmt::runtime(
TIP_(
"Value not found: \"{}\"")), name));
151 ntype.
ui_name =
"Separate Bundle";
#define NODE_CLASS_CONVERTER
#define GEO_NODE_SEPARATE_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 IndexRange()=default
constexpr bool is_empty() const
void * get_output_data_ptr(int index)
void output_set(int index)
T extract_input(StringRef identifier)
void error_message_add(const NodeWarningType type, StringRef message) const
const bNode & node() const
void set_default_remaining_outputs()
lf::Params & low_level_lazy_function_params()
SocketInterfaceKey(Vector< std::string > identifiers)
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_declare(NodeDeclarationBuilder &b)
static void node_geo_exec(GeoNodeExecParams params)
static void node_free_storage(bNode *node)
static void node_blend_write(const bNodeTree &, const bNode &node, BlendWriter &writer)
static void node_operators()
static void node_register()
static void node_init(bNodeTree *, bNode *node)
static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *node_ptr)
NODE_STORAGE_FUNCS(NodeGeometrySeparateBundle)
static bool node_insert_link(bNodeTree *tree, bNode *node, bNodeLink *link)
static void node_copy_storage(bNodeTree *, bNode *dst_node, const bNode *src_node)
static void node_blend_read(bNodeTree &, bNode &node, BlendDataReader &reader)
void make_common_operators()
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
bool implicitly_convert_socket_value(const bke::bNodeSocketType &from_type, const void *from_value, const bke::bNodeSocketType &to_type, void *r_to_value)
void construct_socket_default_value(const bke::bNodeSocketType &stype, void *r_value)
void geo_node_type_base(blender::bke::bNodeType *ntype, std::string idname, const std::optional< int16_t > legacy_type)
NodeGeometrySeparateBundleItem * items
const blender::CPPType * geometry_nodes_cpp_type
NodeBlendWriteFunction blend_write_storage_content
bool(*) insert_link(bNodeTree *ntree, bNode *node, bNodeLink *link)
void(*) register_operators()
std::string ui_description
NodeBlendDataReadFunction blend_data_read_storage_content
NodeGeometryExecFunction geometry_node_execute
void(*) initfunc(bNodeTree *ntree, bNode *node)
void(*) draw_buttons_ex(uiLayout *, bContext *C, PointerRNA *ptr)
NodeDeclareFunction declare
NodeGeometrySeparateBundleItem ItemT
static void blend_write_item(BlendWriter *writer, const ItemT &item)
static void blend_read_data_item(BlendDataReader *reader, 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)