Commit: 46514cf865238c6bbed70971da5ab8e1a8ef9fc2
Author: Ines Almeida
Date:   Sun May 20 19:10:16 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB46514cf865238c6bbed70971da5ab8e1a8ef9fc2

COW Operators: Fix VIEW3D_OT_view_all and camera mode of VIEW3D_OT_viewnumpad

Reviewers: sergey, aligorith

Maniphest Tasks: T54829

Differential Revision: https://developer.blender.org/D3314

===================================================================

M       source/blender/editors/space_view3d/view3d_edit.c
M       source/blender/editors/space_view3d/view3d_intern.h
M       source/blender/editors/space_view3d/view3d_view.c

===================================================================

diff --git a/source/blender/editors/space_view3d/view3d_edit.c 
b/source/blender/editors/space_view3d/view3d_edit.c
index a8e011c2508..61292d9b707 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -62,7 +62,7 @@
 #include "BKE_action.h"
 
 #include "DEG_depsgraph.h"
-
+#include "DEG_depsgraph_query.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -2705,8 +2705,9 @@ static int view3d_all_exec(bContext *C, wmOperator *op)
        ARegion *ar = CTX_wm_region(C);
        View3D *v3d = CTX_wm_view3d(C);
        Scene *scene = CTX_data_scene(C);
-       ViewLayer *view_layer = CTX_data_view_layer(C);
-       Base *base;
+       const Depsgraph *depsgraph = CTX_data_depsgraph(C);
+       ViewLayer *view_layer_eval = DEG_get_evaluated_view_layer(depsgraph);
+       Base *base_eval;
        const bool use_all_regions = RNA_boolean_get(op->ptr, 
"use_all_regions");
        const bool skip_camera = (ED_view3d_camera_lock_check(v3d, 
ar->regiondata) ||
                                  /* any one of the regions may be locked */
@@ -2729,15 +2730,16 @@ static int view3d_all_exec(bContext *C, wmOperator *op)
                INIT_MINMAX(min, max);
        }
 
-       for (base = view_layer->object_bases.first; base; base = base->next) {
-               if (BASE_VISIBLE(base)) {
+       for (base_eval = view_layer_eval->object_bases.first; base_eval; 
base_eval = base_eval->next) {
+               if (BASE_VISIBLE(base_eval)) {
                        changed = true;
 
-                       if (skip_camera && base->object == v3d->camera) {
+                       Object *ob = DEG_get_original_object(base_eval->object);
+                       if (skip_camera && ob == v3d->camera) {
                                continue;
                        }
 
-                       BKE_object_minmax(base->object, min, max, false);
+                       BKE_object_minmax(base_eval->object, min, max, false);
                }
        }
        if (!changed) {
@@ -3702,8 +3704,6 @@ static int viewnumpad_exec(bContext *C, wmOperator *op)
        View3D *v3d;
        ARegion *ar;
        RegionView3D *rv3d;
-       Scene *scene = CTX_data_scene(C);
-       ViewLayer *view_layer = CTX_data_view_layer(C);
        static int perspo = RV3D_PERSP;
        int viewnum, nextperspo;
        bool align_active;
@@ -3737,6 +3737,9 @@ static int viewnumpad_exec(bContext *C, wmOperator *op)
                if ((rv3d->viewlock & RV3D_LOCKED) == 0) {
                        /* lastview -  */
 
+                       ViewLayer *view_layer = CTX_data_view_layer(C);
+                       Scene *scene = CTX_data_scene(C);
+
                        if (rv3d->persp != RV3D_CAMOB) {
                                Object *ob = OBACT(view_layer);
 
diff --git a/source/blender/editors/space_view3d/view3d_intern.h 
b/source/blender/editors/space_view3d/view3d_intern.h
index 006b0117b99..1c86e5ab30b 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -182,6 +182,7 @@ typedef struct V3D_SmoothParams {
 } V3D_SmoothParams;
 
 void ED_view3d_smooth_view_ex(
+        const struct Depsgraph *depsgraph,
         struct wmWindowManager *wm, struct wmWindow *win, struct ScrArea *sa,
         struct View3D *v3d, struct ARegion *ar, const int smooth_viewtx,
         const V3D_SmoothParams *sview);
diff --git a/source/blender/editors/space_view3d/view3d_view.c 
b/source/blender/editors/space_view3d/view3d_view.c
index 12a084b71c3..a8ae31bbabe 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -121,14 +121,14 @@ static void view3d_smooth_view_state_restore(const struct 
SmoothView3DState *sms
 /* the arguments are the desired situation */
 void ED_view3d_smooth_view_ex(
         /* avoid passing in the context */
-        wmWindowManager *wm, wmWindow *win, ScrArea *sa,
+        const Depsgraph *depsgraph, wmWindowManager *wm, wmWindow *win, 
ScrArea *sa,
         View3D *v3d, ARegion *ar, const int smooth_viewtx,
         const V3D_SmoothParams *sview)
 {
        RegionView3D *rv3d = ar->regiondata;
        struct SmoothView3DStore sms = {{0}};
        bool ok = false;
-       
+
        /* initialize sms */
        view3d_smooth_view_state_backup(&sms.dst, v3d, rv3d);
        view3d_smooth_view_state_backup(&sms.src, v3d, rv3d);
@@ -177,8 +177,9 @@ void ED_view3d_smooth_view_ex(
        }
 
        if (sview->camera) {
-               sms.dst.dist = ED_view3d_offset_distance(sview->camera->obmat, 
sview->ofs, VIEW3D_DIST_FALLBACK);
-               ED_view3d_from_object(sview->camera, sms.dst.ofs, sms.dst.quat, 
&sms.dst.dist, &sms.dst.lens);
+               Object *camera_eval = DEG_get_evaluated_object(depsgraph, 
sview->camera);
+               sms.dst.dist = ED_view3d_offset_distance(camera_eval->obmat, 
sview->ofs, VIEW3D_DIST_FALLBACK);
+               ED_view3d_from_object(camera_eval, sms.dst.ofs, sms.dst.quat, 
&sms.dst.dist, &sms.dst.lens);
                sms.to_camera = true; /* restore view3d values in end */
        }
        
@@ -202,9 +203,10 @@ void ED_view3d_smooth_view_ex(
                if (changed) {
                        /* original values */
                        if (sview->camera_old) {
-                               sms.src.dist = 
ED_view3d_offset_distance(sview->camera_old->obmat, rv3d->ofs, 0.0f);
+                               Object *camera_old_eval = 
DEG_get_evaluated_object(depsgraph, sview->camera_old);
+                               sms.src.dist = 
ED_view3d_offset_distance(camera_old_eval->obmat, rv3d->ofs, 0.0f);
                                /* this */
-                               ED_view3d_from_object(sview->camera_old, 
sms.src.ofs, sms.src.quat, &sms.src.dist, &sms.src.lens);
+                               ED_view3d_from_object(camera_old_eval, 
sms.src.ofs, sms.src.quat, &sms.src.dist, &sms.src.lens);
                        }
                        /* grid draw as floor */
                        if ((rv3d->viewlock & RV3D_LOCKED) == 0) {
@@ -226,9 +228,10 @@ void ED_view3d_smooth_view_ex(
                        /* ensure it shows correct */
                        if (sms.to_camera) {
                                /* use ortho if we move from an ortho view to 
an ortho camera */
+                               Object *camera_eval = 
DEG_get_evaluated_object(depsgraph, sview->camera);
                                rv3d->persp = (((rv3d->is_persp == false) &&
-                                               (sview->camera->type == 
OB_CAMERA) &&
-                                               (((Camera 
*)sview->camera->data)->type == CAM_ORTHO)) ?
+                                               (camera_eval->type == 
OB_CAMERA) &&
+                                               (((Camera 
*)camera_eval->data)->type == CAM_ORTHO)) ?
                                                RV3D_ORTHO : RV3D_PERSP);
                        }
 
@@ -277,11 +280,13 @@ void ED_view3d_smooth_view(
         View3D *v3d, ARegion *ar, const int smooth_viewtx,
         const struct V3D_SmoothParams *sview)
 {
+       const Depsgraph *depsgraph = CTX_data_depsgraph(C);
        wmWindowManager *wm = CTX_wm_manager(C);
        wmWindow *win = CTX_wm_window(C);
        ScrArea *sa = CTX_wm_area(C);
 
        ED_view3d_smooth_view_ex(
+               depsgraph,
                wm, win, sa,
                v3d, ar, smooth_viewtx,
                sview);

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

Reply via email to