[Bf-blender-cvs] [6fd1819] soc-2016-layer_manager: Add utility iterator for easy base iterations
Julian Eisel
noreply at git.blender.org
Sat Jul 9 17:27:56 CEST 2016
Commit: 6fd18197a80a9621a384c7df5bea18dfc9702cd2
Author: Julian Eisel
Date: Sat Jul 9 10:41:01 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rB6fd18197a80a9621a384c7df5bea18dfc9702cd2
Add utility iterator for easy base iterations
===================================================================
M source/blender/blenkernel/BKE_object.h
===================================================================
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 07aab06..8d6a1ca 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -275,10 +275,30 @@ bool BKE_object_modifier_update_subframe(struct Scene *scene, struct Object *ob,
/* Object Layers */
#define BKE_OBJECTLAYER_BASES_ITER_START(oblayer, idx_name, base_name) \
- for (int idx_name = 0; idx_name < oblayer->tot_bases; idx_name++) { \
+ for (unsigned int idx_name = 0; idx_name < oblayer->tot_bases; idx_name++) { \
Base *base_name = oblayer->bases[idx_name];
#define BKE_OBJECTLAYER_BASES_ITER_END } (void)0
+/* Use this if BKE_BASES_ITER_START doesn't give enough control over variable names.*/
+#define BKE_BASES_ITER_START_EX(scene, layeridx_name, litem_name, oblayer_name, baseidx_name, base_name) \
+ BKE_LAYERTREE_ITER_START(scene->object_layers, 0, layeridx_name, litem_name) \
+ { \
+ if (litem_name->type->type == LAYER_ITEMTYPE_LAYER) { \
+ LayerTypeObject *oblayer_name = (LayerTypeObject *)litem_name; \
+ BKE_OBJECTLAYER_BASES_ITER_START(oblayer_name, baseidx_name, base_name)
+
+/* Start iterating over all bases of the scene. This is basically a wrapper around layer
+ * tree and object layer iterator to make access a bit easier. Uses default variable names. */
+#define BKE_BASES_ITER_START(scene) \
+ BKE_BASES_ITER_START_EX(scene, i, litem, oblayer, j, base)
+
+/* End BKE_BASES_ITER_START or BKE_BASES_ITER_START_EX. */
+#define BKE_BASES_ITER_END \
+ BKE_OBJECTLAYER_BASES_ITER_END; \
+ } \
+ } \
+ BKE_LAYERTREE_ITER_END /* ends with (void)0 */
+
struct LayerTreeItem *BKE_objectlayer_add(struct LayerTree *tree, struct LayerTreeItem *parent, const char *name);
void BKE_objectlayer_free(struct LayerTreeItem *litem);
void BKE_objectlayer_base_assign(struct Base *base, struct LayerTreeItem *litem, const bool has_reserved);
More information about the Bf-blender-cvs
mailing list