[Bf-blender-cvs] [37242f0a47b] blender2.8: Merge branch 'master' into blender2.8
mano-wii
noreply at git.blender.org
Fri Jul 14 22:05:04 CEST 2017
Commit: 37242f0a47bf811610d24ed53431956bc199ccde
Author: mano-wii
Date: Fri Jul 14 16:56:36 2017 -0300
Branches: blender2.8
https://developer.blender.org/rB37242f0a47bf811610d24ed53431956bc199ccde
Merge branch 'master' into blender2.8
# Conflicts:
# source/blender/editors/transform/transform_snap_object.c
===================================================================
===================================================================
diff --cc source/blender/editors/transform/transform_snap_object.c
index 1d58dd62c7e,61f4914a3f0..39d76c89e4d
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@@ -140,42 -139,55 +140,54 @@@ struct SnapObjectContext
* \{ */
- #define ITER_SNAP_OBJECTS(use_obedit, ob, obmat, sctx, snap_select, obedit, CODE) \
- Base *base_act = sctx->scene_layer->basact;\
- /* Need an exception for particle edit because the base is flagged with BA_HAS_RECALC_DATA\
- * which makes the loop skip it, even the derived mesh will never change\
- *\
- * To solve that problem, we do it first as an exception.\
- * */\
- if (base_act && base_act->object && base_act->object->mode & OB_MODE_PARTICLE_EDIT) {\
- use_obedit = false;\
- ob = base_act->object;\
- obmat = ob->obmat;\
- CODE\
- }\
- for (Base *base = sctx->scene_layer->object_bases.first; base != NULL; base = base->next) {\
- if ((BASE_VISIBLE_NEW(base)) && (base->flag_legacy & (BA_HAS_RECALC_OB | BA_HAS_RECALC_DATA)) == 0 &&\
- !((snap_select == SNAP_NOT_SELECTED && ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL))) ||\
- (snap_select == SNAP_NOT_ACTIVE && base == base_act)))\
- {\
- Object *ob_iter = base->object;\
- if (ob_iter->transflag & OB_DUPLI) {\
- DupliObject *dupli_ob;\
- ListBase *lb = object_duplilist(sctx->bmain->eval_ctx, sctx->scene, ob_iter);\
- for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) {\
- use_obedit = obedit && dupli_ob->ob->data == obedit->data;;\
- ob = use_obedit ? obedit : dupli_ob->ob;\
- obmat = dupli_ob->mat;\
- CODE\
- }\
- free_object_duplilist(lb);\
- }\
- use_obedit = obedit && ob_iter->data == obedit->data;\
- ob = use_obedit ? obedit : ob_iter;\
- obmat = ob->obmat;\
- CODE\
- }\
- }\
+ typedef void(*IterSnapObjsCallback)(SnapObjectContext *sctx, bool is_obedit, Object *ob, float obmat[4][4], void *data);
+
+ /**
+ * Walks through all objects in the scene to create the list of objets to snap.
+ *
+ * \param sctx: Snap context to store data.
+ * \param snap_select : from enum SnapSelect.
+ * \param obedit : Object Edited to use its coordinates of BMesh(if any) to do the snapping.
+ */
+ static void iter_snap_objects(
+ SnapObjectContext *sctx,
+ const SnapSelect snap_select,
+ Object *obedit,
+ IterSnapObjsCallback sob_callback,
+ void *data)
+ {
- Base *base_act = sctx->scene->basact;
++ Base *base_act = sctx->scene_layer->basact;
+ /* Need an exception for particle edit because the base is flagged with BA_HAS_RECALC_DATA
+ * which makes the loop skip it, even the derived mesh will never change
+ *
+ * To solve that problem, we do it first as an exception.
+ * */
+ if (base_act && base_act->object && base_act->object->mode & OB_MODE_PARTICLE_EDIT) {
+ sob_callback(sctx, false, base_act->object, base_act->object->obmat, data);
+ }
+
- for (Base *base = sctx->scene->base.first; base != NULL; base = base->next) {
- if ((BASE_VISIBLE_BGMODE(sctx->v3d_data.v3d, sctx->scene, base)) &&
- (base->flag & (BA_HAS_RECALC_OB | BA_HAS_RECALC_DATA)) == 0 &&
- !((snap_select == SNAP_NOT_SELECTED && (base->flag & (SELECT | BA_WAS_SEL))) ||
++ for (Base *base = sctx->scene_layer->object_bases.first; base != NULL; base = base->next) {
++ if ((BASE_VISIBLE_NEW(base)) && (base->flag_legacy & (BA_HAS_RECALC_OB | BA_HAS_RECALC_DATA)) == 0 &&
++ !((snap_select == SNAP_NOT_SELECTED && ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL))) ||
+ (snap_select == SNAP_NOT_ACTIVE && base == base_act)))
+ {
+ bool use_obedit;
+ Object *obj = base->object;
+ if (obj->transflag & OB_DUPLI) {
+ DupliObject *dupli_ob;
+ ListBase *lb = object_duplilist(sctx->bmain->eval_ctx, sctx->scene, obj);
+ for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) {
+ use_obedit = obedit && dupli_ob->ob->data == obedit->data;
+ sob_callback(sctx, use_obedit, use_obedit ? obedit : dupli_ob->ob, dupli_ob->mat, data);
+ }
+ free_object_duplilist(lb);
+ }
+
+ use_obedit = obedit && obj->data == obedit->data;
+ sob_callback(sctx, use_obedit, use_obedit ? obedit : obj, obj->obmat, data);
+ }
+ }
+ }
/**
More information about the Bf-blender-cvs
mailing list