[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