64 if (
node ==
nullptr) {
73 if (tree_log ==
nullptr) {
81 const geo_log::ValueLog *value_log = socket_log.value();
82 if (const geo_log::GeometryValueLog *geo_value_log =
83 dynamic_cast<const geo_log::GeometryValueLog *>(value_log)) {
84 for (const GeometryAttributeInfo &attribute : geo_value_log->attributes()) {
85 if (bke::allow_procedural_attribute_access(attribute.name)) {
86 if (names.add(attribute.name)) {
87 attributes.append(&attribute);
98 *snode,
data.node_name);
99 if (node_log ==
nullptr) {
153 if (item ==
nullptr) {
168 if (
node ==
nullptr) {
173 if (socket ==
nullptr) {
191 if (link->fromnode ==
node) {
192 link->fromsock = output_socket;
241 static_cast<void *
>(
data),
struct SpaceNode * CTX_wm_space_node(const bContext *C)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
struct bNode * nodeFindNodebyName(struct bNodeTree *ntree, const char *name)
#define GEO_NODE_INPUT_NAMED_ATTRIBUTE
void BKE_ntree_update_tag_node_property(struct bNodeTree *ntree, struct bNode *node)
void BKE_ntree_update_tag_link_changed(struct bNodeTree *ntree)
General operations, lookup, etc. for blender objects.
#define BLI_assert_unreachable()
#define LISTBASE_FOREACH(type, var, list)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
Object is a sort of wrapper for general info.
void ED_node_tree_propagate_change(const struct bContext *C, struct Main *bmain, struct bNodeTree *ntree)
bScreen * ED_screen_animation_playing(const struct wmWindowManager *wm)
void ED_undo_push(struct bContext *C, const char *str)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
static void attribute_search_update_fn(const bContext *C, void *arg, const char *str, uiSearchItems *items, const bool is_first)
static void attribute_search_exec_fn(bContext *C, void *data_v, void *item_v)
uiBlock * uiLayoutGetBlock(uiLayout *layout)
void UI_but_func_search_set_results_are_suggestions(uiBut *but, bool value)
void UI_but_func_search_set(uiBut *but, uiButSearchCreateFn search_create_fn, uiButSearchUpdateFn search_update_fn, void *arg, bool free_arg, uiFreeArgFunc search_arg_free_fn, uiButHandleFunc search_exec_fn, void *active)
uiBut * uiDefIconTextButR(uiBlock *block, int type, int retval, int icon, const char *str, int x, int y, short width, short height, struct PointerRNA *ptr, const char *propname, int index, float min, float max, float a1, float a2, const char *tip)
void UI_but_func_search_set_sep_string(uiBut *but, const char *search_sep_string)
static const NodeLog * find_node_by_node_editor_context(const SpaceNode &snode, const bNode &node)
static const TreeLog * find_tree_by_node_editor_context(const SpaceNode &snode)
Vector< const GeometryAttributeInfo * > lookup_available_attributes() const
Span< SocketLog > input_logs() const
void foreach_node_log(FunctionRef< void(const NodeLog &)> fn) const
bNodeSocket * node_find_enabled_output_socket(bNode &node, StringRef name)
bNodeSocket * node_find_enabled_input_socket(bNode &node, StringRef name)
BLI_STATIC_ASSERT(std::is_trivially_destructible_v< AttributeSearchData >, "")
void node_geometry_add_attribute_search_button(const bContext &UNUSED(C), const bNode &node, PointerRNA &socket_ptr, uiLayout &layout)
static eCustomDataType data_type_in_attribute_input_node(const eCustomDataType type)
static Vector< const GeometryAttributeInfo * > get_attribute_info_from_context(const bContext &C, AttributeSearchData &data)
void attribute_search_add_items(StringRefNull str, bool can_create_attribute, Span< const nodes::geometry_nodes_eval_log::GeometryAttributeInfo * > infos, uiSearchItems *items, bool is_first)
#define UI_MENU_ARROW_SEP
struct bNodeTree * edittree
char socket_identifier[MAX_NAME]
std::optional< eCustomDataType > data_type