diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-01-04 13:09:35 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-01-04 13:15:00 +0300 |
commit | c7085be6c6ba2f7415b5b69f451287456296a3b6 (patch) | |
tree | 49b0422e88f655bf2b3e230056f8e72c16dd603c /source/blender/editors/transform/transform_snap.c | |
parent | d11a87b88c4d76aff77912313752d23fffc8e65d (diff) |
Fix T84345: Transforming the cursor fails with absolute grid-snap
Absolute grid snapping was using the pivot, which doesn't make sense
when transforming the cursor.
Diffstat (limited to 'source/blender/editors/transform/transform_snap.c')
-rw-r--r-- | source/blender/editors/transform/transform_snap.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index d407cea0033..e5b16d0ef6e 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -1424,10 +1424,21 @@ static void snap_grid_apply( const float *center_global = t->center_global; const float *asp = t->aspect; - /* use a fallback for cursor selection, - * this isn't useful as a global center for absolute grid snapping - * since its not based on the position of the selection. */ - if (t->around == V3D_AROUND_CURSOR) { + if (t->options & CTX_CURSOR) { + /* Note that we must already have called #transformCenter_from_type, otherwise + * we would be lazy-initializing data which is being transformed, + * causing the transformed cursor location to be used instead of it's initial location. */ + BLI_assert(t->center_cache[V3D_AROUND_CURSOR].is_set); + + /* Use a fallback when transforming the cursor. + * In this case the center is _not_ derived from the cursor which is being transformed. */ + const TransCenterData *cd = transformCenter_from_type(t, V3D_AROUND_CURSOR); + center_global = cd->global; + } + else if (t->around == V3D_AROUND_CURSOR) { + /* Use a fallback for cursor selection, + * this isn't useful as a global center for absolute grid snapping + * since its not based on the position of the selection. */ const TransCenterData *cd = transformCenter_from_type(t, V3D_AROUND_CENTER_MEDIAN); center_global = cd->global; } |