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);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to