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 | |
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')
-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 |