Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/functions/FN_multi_function_dependencies.h')
-rw-r--r--source/blender/functions/FN_multi_function_dependencies.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/source/blender/functions/FN_multi_function_dependencies.h b/source/blender/functions/FN_multi_function_dependencies.h
new file mode 100644
index 00000000000..b056dbafad6
--- /dev/null
+++ b/source/blender/functions/FN_multi_function_dependencies.h
@@ -0,0 +1,72 @@
+#ifndef __FN_MULTI_FUNCTION_DEPENDENCIES_H__
+#define __FN_MULTI_FUNCTION_DEPENDENCIES_H__
+
+#include "BLI_set.h"
+
+#include "DNA_image_types.h"
+#include "DNA_object_types.h"
+
+#include "FN_node_tree.h"
+
+namespace FN {
+
+using BLI::Set;
+
+inline Set<Object *> get_objects_used_by_sockets(const FunctionTree &function_tree)
+{
+ Set<Object *> objects;
+ for (const FSocket *fsocket : function_tree.all_sockets()) {
+ if (fsocket->idname() == "fn_ObjectSocket") {
+ Object *object = (Object *)RNA_pointer_get(fsocket->rna(), "value").data;
+ if (object != nullptr) {
+ objects.add(object);
+ }
+ }
+ }
+ for (const FGroupInput *group_input : function_tree.all_group_inputs()) {
+ if (group_input->vsocket().idname() == "fn_ObjectSocket") {
+ Object *object = (Object *)RNA_pointer_get(group_input->vsocket().rna(), "value").data;
+ if (object != nullptr) {
+ objects.add(object);
+ }
+ }
+ }
+ return objects;
+}
+
+inline Set<Image *> get_images_used_by_sockets(const FunctionTree &function_tree)
+{
+ Set<Image *> images;
+ for (const FSocket *fsocket : function_tree.all_sockets()) {
+ if (fsocket->idname() == "fn_ImageSocket") {
+ Image *image = (Image *)RNA_pointer_get(fsocket->rna(), "value").data;
+ if (image != nullptr) {
+ images.add(image);
+ }
+ }
+ }
+ for (const FGroupInput *group_input : function_tree.all_group_inputs()) {
+ if (group_input->vsocket().idname() == "fn_ImageSocket") {
+ Image *image = (Image *)RNA_pointer_get(group_input->vsocket().rna(), "value").data;
+ if (image != nullptr) {
+ images.add(image);
+ }
+ }
+ }
+ return images;
+}
+
+inline void add_ids_used_by_nodes(IDHandleLookup &id_handle_lookup,
+ const FunctionTree &function_tree)
+{
+ for (Object *object : get_objects_used_by_sockets(function_tree)) {
+ id_handle_lookup.add(object->id);
+ }
+ for (Image *image : get_images_used_by_sockets(function_tree)) {
+ id_handle_lookup.add(image->id);
+ }
+}
+
+} // namespace FN
+
+#endif /* __FN_MULTI_FUNCTION_DEPENDENCIES_H__ */