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.
This commit is contained in:
parent
d11a87b88c
commit
c7085be6c6
Notes:
blender-bot
2023-02-14 03:31:57 +01:00
Referenced by issue #84345, 3D cursor absolute grid snap doesn't work if certain meshes are present in the scene
|
@ -993,6 +993,10 @@ void createTransData(bContext *C, TransInfo *t)
|
|||
else {
|
||||
convert_type = TC_CURSOR_VIEW3D;
|
||||
}
|
||||
|
||||
/* Since we're transforming the cursor, initialize this value before it's modified.
|
||||
* Needed for #snap_grid_apply to access the cursor location. */
|
||||
transformCenter_from_type(t, V3D_AROUND_CURSOR);
|
||||
}
|
||||
else if (!(t->options & CTX_PAINT_CURVE) && (t->spacetype == SPACE_VIEW3D) && ob &&
|
||||
(ob->mode == OB_MODE_SCULPT) && ob->sculpt) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue