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
This commit is contained in:
parent
8e0953eb49
commit
46514cf865
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue