diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-01-27 13:17:56 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-01-27 13:19:27 +0400 |
commit | bee6c1779e9337fbc0b34d9747b4aeb647b44cfa (patch) | |
tree | be330663109d8224fb9e5af68dfa013b1451b1ef /source/blender/blenkernel | |
parent | 2d3bd587fd26972495d939927513583be108aa4d (diff) |
Code Cleanup: de-duplicate nested node tree checking
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_node.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 17 |
2 files changed, 18 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index e3af696c8a9..fc0359d8ff0 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -353,7 +353,8 @@ void ntreeUserDecrefID(struct bNodeTree *ntree); struct bNodeTree *ntreeFromID(struct ID *id); void ntreeMakeLocal(struct bNodeTree *ntree); -int ntreeHasType(struct bNodeTree *ntree, int type); +bool ntreeHasType(const struct bNodeTree *ntree, int type); +bool ntreeHasTree(const struct bNodeTree *ntree, const struct bNodeTree *lookup); void ntreeUpdateTree(struct Main *main, struct bNodeTree *ntree); /* XXX Currently each tree update call does call to ntreeVerifyNodes too. * Some day this should be replaced by a decent depsgraph automatism! diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 34b016a08ba..79f77416639 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -2289,7 +2289,7 @@ void ntreeInterfaceTypeUpdate(bNodeTree *ntree) /* ************ find stuff *************** */ -int ntreeHasType(bNodeTree *ntree, int type) +bool ntreeHasType(const bNodeTree *ntree, int type) { bNode *node; @@ -2300,6 +2300,21 @@ int ntreeHasType(bNodeTree *ntree, int type) return 0; } +bool ntreeHasTree(const bNodeTree *ntree, const bNodeTree *lookup) +{ + bNode *node; + + if (ntree == lookup) + return true; + + for (node = ntree->nodes.first; node; node = node->next) + if (node->type == NODE_GROUP && node->id) + if (ntreeHasTree((bNodeTree *)node->id, lookup)) + return true; + + return false; +} + bNodeLink *nodeFindLink(bNodeTree *ntree, bNodeSocket *from, bNodeSocket *to) { bNodeLink *link; |