Blender V5.0
NOD_geo_viewer.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include "DNA_node_types.h"
8
10#include "NOD_socket_items.hh"
11
12namespace blender::nodes {
13
21 static int node_type;
22 static constexpr StringRefNull node_idname = "GeometryNodeViewer";
23 static constexpr bool has_type = true;
24 static constexpr bool has_name = true;
26 static constexpr StringRefNull add_item = "NODE_OT_geometry_nodes_viewer_item_add";
27 static constexpr StringRefNull remove_item = "NODE_OT_geometry_nodes_viewer_item_remove";
28 static constexpr StringRefNull move_item = "NODE_OT_geometry_nodes_viewer_item_move";
29 };
30 struct ui_idnames {
31 static constexpr StringRefNull list = "NODE_UL_geometry_nodes_viewer_items";
32 };
33 struct rna_names {
34 static constexpr StringRefNull items = "viewer_items";
35 static constexpr StringRefNull active_index = "active_index";
36 };
37
39 {
40 auto *storage = static_cast<NodeGeometryViewer *>(node.storage);
41 return {&storage->items, &storage->items_num, &storage->active_index};
42 }
43
45 {
46 dst = src;
47 dst.name = BLI_strdup_null(dst.name);
48 }
49
51 {
52 MEM_SAFE_FREE(item->name);
53 }
54
55 static void blend_write_item(BlendWriter *writer, const ItemT &item);
56 static void blend_read_data_item(BlendDataReader *reader, ItemT &item);
57
62
63 static char **get_name(NodeGeometryViewerItem &item)
64 {
65 return &item.name;
66 }
67
70 const eNodeSocketDatatype socket_type,
71 const char *name)
72 {
73 auto *storage = static_cast<NodeGeometryViewer *>(node.storage);
74 item.socket_type = socket_type;
75 item.identifier = storage->next_identifier++;
77 }
78
79 static bool supports_socket_type(const eNodeSocketDatatype socket_type, const int /*ntree_type*/)
80 {
81 return ELEM(socket_type,
97 }
98
99 static std::string socket_identifier_for_item(const NodeGeometryViewerItem &item)
100 {
101 /* These special cases exist for compatibility with older Blender versions when the viewer did
102 * not have a dynamic number of inputs yet. */
103 if (item.identifier == 0 && item.socket_type == SOCK_GEOMETRY) {
104 return "Geometry";
105 }
106 if (item.identifier == 1 && item.socket_type != SOCK_GEOMETRY) {
107 return "Value";
108 }
109 return "Item_" + std::to_string(item.identifier);
110 }
111};
112
113void geo_viewer_node_log(const bNode &node,
114 const Span<bke::SocketValueVariant *> input_values,
115 geo_eval_log::ViewerNodeLog &r_log);
116
117} // 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_CLOSURE
@ SOCK_BOOLEAN
@ SOCK_MATERIAL
@ SOCK_MATRIX
@ SOCK_FLOAT
@ SOCK_IMAGE
@ SOCK_COLLECTION
@ SOCK_BUNDLE
@ SOCK_GEOMETRY
@ SOCK_ROTATION
@ SOCK_OBJECT
@ SOCK_STRING
@ SOCK_RGBA
#define MEM_SAFE_FREE(v)
void set_item_name_and_make_unique(bNode &node, typename Accessor::ItemT &item, const char *value)
void geo_viewer_node_log(const bNode &node, const Span< bke::SocketValueVariant * > input_values, geo_eval_log::ViewerNodeLog &r_log)
const char * name
void * storage
static void blend_read_data_item(BlendDataReader *reader, ItemT &item)
static void copy_item(const NodeGeometryViewerItem &src, NodeGeometryViewerItem &dst)
static std::string socket_identifier_for_item(const NodeGeometryViewerItem &item)
static void destruct_item(NodeGeometryViewerItem *item)
static socket_items::SocketItemsRef< NodeGeometryViewerItem > get_items_from_node(bNode &node)
static eNodeSocketDatatype get_socket_type(const NodeGeometryViewerItem &item)
static bool supports_socket_type(const eNodeSocketDatatype socket_type, const int)
static constexpr StringRefNull node_idname
static void blend_write_item(BlendWriter *writer, const ItemT &item)
static void init_with_socket_type_and_name(bNode &node, NodeGeometryViewerItem &item, const eNodeSocketDatatype socket_type, const char *name)
static char ** get_name(NodeGeometryViewerItem &item)