diff options
author | Ines Almeida <britalmeida@gmail.com> | 2018-05-20 20:10:16 +0300 |
---|---|---|
committer | Ines Almeida <britalmeida@gmail.com> | 2018-05-20 21:05:26 +0300 |
commit | 46514cf865238c6bbed70971da5ab8e1a8ef9fc2 (patch) | |
tree | 3165b36ebcc3000951a99df96eec0867fe862ce7 /source | |
parent | 8e0953eb495ac17dbd003deb7ead50f271bcd713 (diff) |
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
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_edit.c | 21 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 21 |
3 files changed, 26 insertions, 17 deletions
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); |