diff options
author | Hans Goudey <h.goudey@me.com> | 2021-02-24 02:15:03 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2021-02-24 02:15:03 +0300 |
commit | b2c7ea6d82c453cfa35bf754e07dbbf08ae0a018 (patch) | |
tree | 7ff8fdb445087a30e130850a3ba197a035980620 /source/blender/blenkernel/intern/node_ui_storage.cc | |
parent | dde7d4417a850222c2e05bd6fc8f6c354f2515e9 (diff) |
Geometry Nodes: Move node UI storage function to BKE
This function will be used in another file with attribute search,
so it makes sense to share from the UI storage header.
Diffstat (limited to 'source/blender/blenkernel/intern/node_ui_storage.cc')
-rw-r--r-- | source/blender/blenkernel/intern/node_ui_storage.cc | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/node_ui_storage.cc b/source/blender/blenkernel/intern/node_ui_storage.cc index 7bf8895262d..e03617a6505 100644 --- a/source/blender/blenkernel/intern/node_ui_storage.cc +++ b/source/blender/blenkernel/intern/node_ui_storage.cc @@ -23,7 +23,9 @@ #include "DNA_node_types.h" #include "DNA_object_types.h" +#include "BKE_context.h" #include "BKE_node_ui_storage.hh" +#include "BKE_object.h" static CLG_LogRef LOG = {"bke.node_ui_storage"}; @@ -38,6 +40,30 @@ static void ui_storage_ensure(bNodeTree &ntree) } } +const NodeUIStorage *BKE_node_tree_ui_storage_get_from_context(const bContext *C, + const bNodeTree &ntree, + const bNode &node) +{ + const NodeTreeUIStorage *ui_storage = ntree.ui_storage; + if (ui_storage == nullptr) { + return nullptr; + } + + const Object *active_object = CTX_data_active_object(C); + const ModifierData *active_modifier = BKE_object_active_modifier(active_object); + if (active_object == nullptr || active_modifier == nullptr) { + return nullptr; + } + + const NodeTreeEvaluationContext context(*active_object, *active_modifier); + const Map<std::string, NodeUIStorage> *storage = ui_storage->context_map.lookup_ptr(context); + if (storage == nullptr) { + return nullptr; + } + + return storage->lookup_ptr_as(StringRef(node.name)); +} + /** * Removes only the UI data associated with a particular evaluation context. The same node tree * can be used for execution in multiple places, but the entire UI storage can't be removed when |