Merge branch 'master' of git@git.blender.org:blender.git into blender2.8
[blender.git] / source / blender / editors / transform / transform_snap_object.c
index 8f10098c4c2dde0ec4fd4d508e8978319e5cafea..2c5052039d251f9bdc6f98e87b62215e958f6e2c 100644 (file)
@@ -101,6 +101,7 @@ typedef struct SnapObjectData_EditMesh {
 struct SnapObjectContext {
        Main *bmain;
        Scene *scene;
+       SceneLayer *scene_layer;
        int flag;
 
        /* Optional: when performing screen-space projection.
@@ -179,7 +180,7 @@ static void create_object_list(
         *
         * To solve that problem, we do it first as an exception.
         * */
-       Base *base_act = sctx->scene->basact;
+       Base *base_act = sctx->scene_layer->basact;
        if (base_act && base_act->object && base_act->object->mode & OB_MODE_PARTICLE_EDIT) {
                struct SnapObject *sobj = MEM_mallocN(sizeof(*sobj), __func__);
                sobj->use_obedit = false;
@@ -188,12 +189,11 @@ static void create_object_list(
                BLI_addtail(r_obj_list, sobj);
        }
 
-       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 &&
+       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 &&
 
-                       !((ignore_object_selected && (base->flag & (SELECT | BA_WAS_SEL))) ||
-                         (ignore_object_active && base == base_act)))
+                       !((ignore_object_selected && ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL))) ||
+                       (ignore_object_active && base == base_act)))
                {
                        Object *ob = base->object;
 
@@ -2116,7 +2116,7 @@ static bool snapObjectsRay(
  * \{ */
 
 SnapObjectContext *ED_transform_snap_object_context_create(
-        Main *bmain, Scene *scene, int flag)
+        Main *bmain, Scene *scene, SceneLayer *sl, int flag)
 {
        SnapObjectContext *sctx = MEM_callocN(sizeof(*sctx), __func__);
 
@@ -2124,6 +2124,7 @@ SnapObjectContext *ED_transform_snap_object_context_create(
 
        sctx->bmain = bmain;
        sctx->scene = scene;
+       sctx->scene_layer = sl;
 
        sctx->cache.object_map = BLI_ghash_ptr_new(__func__);
        sctx->cache.mem_arena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, __func__);
@@ -2132,11 +2133,11 @@ SnapObjectContext *ED_transform_snap_object_context_create(
 }
 
 SnapObjectContext *ED_transform_snap_object_context_create_view3d(
-        Main *bmain, Scene *scene, int flag,
+        Main *bmain, Scene *scene, SceneLayer *sl, int flag,
         /* extra args for view3d */
         const ARegion *ar, const View3D *v3d)
 {
-       SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, flag);
+       SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, sl, flag);
 
        sctx->use_v3d = true;
        sctx->v3d_data.ar = ar;