diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-03-27 02:37:41 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-03-27 02:37:41 +0400 |
commit | 9f91fc10ab648c7a0a28b3b3ef87078675b497c7 (patch) | |
tree | 603af2eeab0ac05bfb7379b2ac86c46bda79585c /source/blender/blenkernel/intern/node.c | |
parent | 1942452ce52fa917198fee6f389f1bc7e4c620fe (diff) |
move FOREACH_NODETREE internal checks into functions.
BKE_node_tree_iter_init,step()
Diffstat (limited to 'source/blender/blenkernel/intern/node.c')
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index a1d9d8af627..7fcbc14a593 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -3593,3 +3593,56 @@ void clear_scene_in_nodes(Main *bmain, Scene *sce) } } } + + +/* -------------------------------------------------------------------- */ +/* NodeTree Iterator Helpers (FOREACH_NODETREE) */ + +void BKE_node_tree_iter_init(struct NodeTreeIterStore *ntreeiter, struct Main *bmain) +{ + ntreeiter->ngroup = bmain->nodetree.first; + ntreeiter->scene = bmain->scene.first; + ntreeiter->mat = bmain->mat.first; + ntreeiter->tex = bmain->tex.first; + ntreeiter->lamp = bmain->lamp.first; + ntreeiter->world = bmain->world.first; +} +bool BKE_node_tree_iter_step(struct NodeTreeIterStore *ntreeiter, + bNodeTree **r_nodetree, struct ID **r_id) +{ + if (ntreeiter->ngroup) { + *r_nodetree = ntreeiter->ngroup; + *r_id = (ID *)ntreeiter->ngroup; + ntreeiter->ngroup = ntreeiter->ngroup->id.next; + } + else if (ntreeiter->scene) { + *r_nodetree = ntreeiter->scene->nodetree; + *r_id = (ID *)ntreeiter->scene; + ntreeiter->scene = ntreeiter->scene->id.next; + } + else if (ntreeiter->mat) { + *r_nodetree = ntreeiter->mat->nodetree; + *r_id = (ID *)ntreeiter->mat; + ntreeiter->mat = ntreeiter->mat->id.next; + } + else if (ntreeiter->tex) { + *r_nodetree = ntreeiter->tex->nodetree; + *r_id = (ID *)ntreeiter->tex; + ntreeiter->tex = ntreeiter->tex->id.next; + } + else if (ntreeiter->lamp) { + *r_nodetree = ntreeiter->lamp->nodetree; + *r_id = (ID *)ntreeiter->lamp; + ntreeiter->lamp = ntreeiter->lamp->id.next; + } + else if (ntreeiter->world) { + *r_nodetree = ntreeiter->world->nodetree; + *r_id = (ID *)ntreeiter->world; + ntreeiter->world = ntreeiter->world->id.next; + } + else { + return false; + } + + return true; +} |