Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-12-18 02:03:50 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-12-18 02:08:23 +0300
commit879c9665985b36c93f21a49663df033a010d2829 (patch)
tree9ae83125c3e325f7197f8be50149a79b637a6a23 /source/blender/editors/transform/transform_snap.c
parent779e2522982f37b1ddbb559cbeaaa78ef9a95fc5 (diff)
Transform: option to use incremental snapping
This resolves this issue where users would enable a snapping mode besides incremental (vertex for eg), then notice strange behavior w/ rotate and scale. While this ability can be useful, it's quite an obscure use case. Now changing snap-modes keeps rotate and scale using incremental snap, with the option for these modes to be affected by other snapping modes. D4022 by @kioku w/ own minor edits.
Diffstat (limited to 'source/blender/editors/transform/transform_snap.c')
-rw-r--r--source/blender/editors/transform/transform_snap.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 6af920c120d..c2c864b51ad 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -137,6 +137,21 @@ bool activeSnap(const TransInfo *t)
((t->modifiers & (MOD_SNAP | MOD_SNAP_INVERT)) == MOD_SNAP_INVERT);
}
+static bool doForceIncrementSnap(const TransInfo *t)
+{
+ const ToolSettings *ts = t->settings;
+ if (t->mode == TFM_TRANSLATION) {
+ return ts->snap_force_increment_flag & SCE_SNAP_FORCE_INCREMENT_TRANSLATE;
+ }
+ if (t->mode == TFM_ROTATION) {
+ return ts->snap_force_increment_flag & SCE_SNAP_FORCE_INCREMENT_ROTATE;
+ }
+ if (t->mode == TFM_RESIZE) {
+ return ts->snap_force_increment_flag & SCE_SNAP_FORCE_INCREMENT_SCALE;
+ }
+ return false;
+}
+
void drawSnapping(const struct bContext *C, TransInfo *t)
{
unsigned char col[4], selectedCol[4], activeCol[4];
@@ -405,8 +420,10 @@ void applyGridAbsolute(TransInfo *t)
void applySnapping(TransInfo *t, float *vec)
{
- if (t->tsnap.project && t->tsnap.mode == SCE_SNAP_MODE_FACE) {
- /* Each Trans Data already makes the snap to face */
+ /* Each Trans Data already makes the snap to face */
+ if (doForceIncrementSnap(t) ||
+ (t->tsnap.project && t->tsnap.mode == SCE_SNAP_MODE_FACE))
+ {
return;
}
@@ -1450,8 +1467,8 @@ void snapGridIncrement(TransInfo *t, float *val)
/* only do something if using absolute or incremental grid snapping
* and there is no valid snap point */
- if (!(t->tsnap.mode & (SCE_SNAP_MODE_INCREMENT | SCE_SNAP_MODE_GRID)) ||
- validSnap(t))
+ if ((!(t->tsnap.mode & (SCE_SNAP_MODE_INCREMENT | SCE_SNAP_MODE_GRID)) ||
+ validSnap(t)) && !doForceIncrementSnap(t))
{
return;
}
@@ -1494,7 +1511,7 @@ static void applyGridIncrement(TransInfo *t, float *val, int max_index, const fl
const float *asp = use_aspect ? t->aspect : asp_local;
int i;
- BLI_assert(t->tsnap.mode & (SCE_SNAP_MODE_INCREMENT | SCE_SNAP_MODE_GRID));
+ BLI_assert((t->tsnap.mode & (SCE_SNAP_MODE_INCREMENT | SCE_SNAP_MODE_GRID)) || doForceIncrementSnap(t));
BLI_assert(max_index <= 2);
/* Early bailing out if no need to snap */