diff options
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 |