56 using namespace nodes::geo_eval_log;
69 if (node ==
nullptr) {
78 GeoModifierLog::get_tree_log_by_zone_for_node_editor(*snode);
83 if (node->type == GEO_NODE_INPUT_NAMED_ATTRIBUTE) {
85 for (GeoTreeLog *tree_log : log_by_zone.
values()) {
86 tree_log->ensure_socket_values();
87 tree_log->ensure_existing_attributes();
89 if (!names.
add(attribute->name)) {
95 attributes.
append(attribute);
105 tree_log->ensure_socket_values();
106 GeoNodeLog *node_log = tree_log->nodes.lookup_ptr(node->identifier);
107 if (node_log ==
nullptr) {
112 for (
const bNodeSocket *input_socket : node->input_sockets()) {
116 const ValueLog *value_log = tree_log->find_socket_value_log(*input_socket);
117 if (value_log ==
nullptr) {
120 if (
const GeometryInfoLog *
geo_log =
dynamic_cast<const GeometryInfoLog *
>(value_log)) {
123 if (names.
add(attribute.name)) {
124 attributes.
append(&attribute);
184 if (item ==
nullptr) {
199 if (node ==
nullptr) {
205 if (node->type == GEO_NODE_INPUT_NAMED_ATTRIBUTE && item->
data_type.has_value()) {
219 if (socket ==
nullptr) {
257 data->node_id = node.identifier;
265 static_cast<void *
>(data),
SpaceNode * CTX_wm_space_node(const bContext *C)
Main * CTX_data_main(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
void BKE_ntree_update_tag_node_property(bNodeTree *ntree, bNode *node)
General operations, lookup, etc. for blender objects.
#define BLI_assert_unreachable()
#define BLI_STATIC_ASSERT(a, msg)
#define STRNCPY(dst, src)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
Object is a sort of wrapper for general info.
void ED_node_tree_propagate_change(const bContext *C, Main *bmain, bNodeTree *ntree)
bScreen * ED_screen_animation_playing(const wmWindowManager *wm)
void ED_undo_push(bContext *C, const char *str)
void UI_but_placeholder_set(uiBut *but, const char *placeholder_text) ATTR_NONNULL(1)
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)
uiBlock * uiLayoutGetBlock(uiLayout *layout)
uiBut * uiDefIconTextButR(uiBlock *block, int type, int retval, int icon, const char *str, int x, int y, short width, short height, PointerRNA *ptr, const char *propname, int index, float min, float max, const char *tip)
void UI_but_func_search_set_sep_string(uiBut *but, const char *search_sep_string)
Value lookup_default(const Key &key, const Value &default_value) const
ValueIterator values() const
constexpr const char * c_str() const
void append(const T &value)
const bNodeTreeZone * get_zone_by_node(const int32_t node_id) const
Vector< std::unique_ptr< bNodeTreeZone > > zones
bNodeSocket * node_find_enabled_input_socket(bNode &node, StringRef name)
bool allow_procedural_attribute_access(StringRef attribute_name)
static Vector< const GeometryAttributeInfo * > get_attribute_info_from_context(const bContext &C, AttributeSearchData &data)
static eCustomDataType data_type_in_attribute_input_node(const eCustomDataType type)
static void attribute_search_update_fn(const bContext *C, void *arg, const char *str, uiSearchItems *items, const bool is_first)
void node_geometry_add_attribute_search_button(const bContext &, const bNode &node, PointerRNA &socket_ptr, uiLayout &layout, const StringRefNull placeholder)
static void attribute_search_exec_fn(bContext *C, void *data_v, void *item_v)
void update_node_declaration_and_sockets(bNodeTree &ntree, bNode &node)
void attribute_search_add_items(StringRefNull str, bool can_create_attribute, Span< const nodes::geo_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