diff options
Diffstat (limited to 'source/blender/editors/transform/transform_snap.c')
-rw-r--r-- | source/blender/editors/transform/transform_snap.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index a09078a8222..9cdec357afd 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -499,7 +499,9 @@ void applySnapping(TransInfo *t, float *vec) /* Time base quirky code to go around find-nearest slowness. */ /* TODO: add exception for object mode, no need to slow it down then. */ if (current - t->tsnap.last >= 0.01) { - t->tsnap.calcSnap(t, vec); + if (t->tsnap.calcSnap) { + t->tsnap.calcSnap(t, vec); + } if (t->tsnap.targetSnap) { t->tsnap.targetSnap(t); } @@ -783,8 +785,15 @@ static void setSnappingCallback(TransInfo *t) if (t->spacetype == SPACE_VIEW3D) { t->tsnap.calcSnap = snap_calc_view3d_fn; } - else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) { - t->tsnap.calcSnap = snap_calc_uv_fn; + else if (t->spacetype == SPACE_IMAGE) { + SpaceImage *sima = t->area->spacedata.first; + Object *obact = t->view_layer->basact ? t->view_layer->basact->object : NULL; + + const bool is_uv_editor = sima->mode == SI_MODE_UV; + const bool has_edit_object = obact && BKE_object_is_in_editmode(obact); + if (is_uv_editor && has_edit_object) { + t->tsnap.calcSnap = snap_calc_uv_fn; + } } else if (t->spacetype == SPACE_NODE) { t->tsnap.calcSnap = snap_calc_node_fn; @@ -959,7 +968,7 @@ static void snap_calc_view3d_fn(TransInfo *t, float *UNUSED(vec)) static void snap_calc_uv_fn(TransInfo *t, float *UNUSED(vec)) { - BLI_assert(t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH); + BLI_assert(t->spacetype == SPACE_IMAGE); if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) { float co[2]; |