diff options
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_node_ui_storage.hh | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node_ui_storage.cc | 26 |
2 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_node_ui_storage.hh b/source/blender/blenkernel/BKE_node_ui_storage.hh index 2084382aac5..951c3bdc62d 100644 --- a/source/blender/blenkernel/BKE_node_ui_storage.hh +++ b/source/blender/blenkernel/BKE_node_ui_storage.hh @@ -28,6 +28,7 @@ struct ModifierData; struct Object; struct bNode; struct bNodeTree; +struct bContext; /** * Contains the context necessary to determine when to display settings for a certain node tree @@ -81,6 +82,10 @@ struct NodeTreeUIStorage { blender::Map<NodeTreeEvaluationContext, blender::Map<std::string, NodeUIStorage>> context_map; }; +const NodeUIStorage *BKE_node_tree_ui_storage_get_from_context(const bContext *C, + const bNodeTree &ntree, + const bNode &node); + void BKE_nodetree_ui_storage_free_for_context(bNodeTree &ntree, const NodeTreeEvaluationContext &context); 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 |