diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2022-03-04 19:09:35 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2022-03-04 19:09:35 +0300 |
commit | ed9540b33bef1a79ad4cf7f0ba7802c72f63b8d1 (patch) | |
tree | 7e47e2e885741a1e1ccf57274a4ff51734ff9594 | |
parent | b80da18f4769cfd95298d08cde1ce1c1a4a906f7 (diff) |
Fix zoom shifting offset in ortho viewtmp-transform-navigate
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 21 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_input.c | 7 |
2 files changed, 18 insertions, 10 deletions
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index ca20ef58759..ed0a6a4bbb6 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1202,8 +1202,20 @@ void calculateCenter(TransInfo *t) * Adjusts the mouse position relative to the object. */ void tranformViewUpdate(TransInfo *t) { + float zoom_prev = t->zfac; + float zoom_new; if ((t->spacetype == SPACE_VIEW3D) && (t->region->regiontype == RGN_TYPE_WINDOW)) { + if (!t->persp) { + zoom_prev *= len_v3(t->persinv[0]); + } + setTransformViewMatrices(t); + calculateZfac(t); + + zoom_new = t->zfac; + if (!t->persp) { + zoom_new *= len_v3(t->persinv[0]); + } for (int i = 0; i < ARRAY_SIZE(t->orient); i++) { if (t->orient[i].type == V3D_ORIENT_VIEW) { @@ -1216,16 +1228,13 @@ void tranformViewUpdate(TransInfo *t) } } } - - float fac = 1.0f; - if (ELEM(t->spacetype, SPACE_VIEW3D, SPACE_IMAGE, SPACE_NODE)) { - float zfac_prev = t->zfac; + else { calculateZfac(t); - fac = zfac_prev / t->zfac; + zoom_new = t->zfac; } calculateCenter2D(t); - transform_input_update(t, fac); + transform_input_update(t, zoom_prev / zoom_new); } void calculatePropRatio(TransInfo *t) diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index 72a8bc752e1..38dbe742279 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -266,10 +266,9 @@ void initMouseInput( mi->imval[1] = mval[1]; if ((t->spacetype == SPACE_VIEW3D) && (t->region->regiontype == RGN_TYPE_WINDOW)) { - RegionView3D *rv3d = t->region->regiondata; - float z = dot_m4_v3_row_z(rv3d->persmat, t->center_global) + rv3d->persmat[3][2]; - float z_ndc = 0.5f * (1.0f + (z / t->zfac)); - ED_view3d_depth_unproject_v3(t->region, mval, z_ndc, mi->imval_unproj); + float delta[3] = {mval[0] - center[0], mval[1] - center[1]}; + ED_view3d_win_to_delta(t->region, delta, t->zfac, delta); + add_v3_v3v3(mi->imval_unproj, t->center_global, delta); } mi->post = NULL; |