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:
authormano-wii <germano.costa@ig.com.br>2018-10-30 20:21:50 +0300
committermano-wii <germano.costa@ig.com.br>2018-10-30 20:22:30 +0300
commitc8e61343867889fda08f800701956245bac4d30f (patch)
treefc671bb47ce6bf63c095cfbda1751296997b6647 /source/blender
parent6f311ef57ec8760d020b6745be87a6770e5c58ce (diff)
Fix T56499: Adapt incremental snapping to orthographic viewport scale.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/include/ED_view3d.h2
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c30
-rw-r--r--source/blender/editors/transform/transform.c2
3 files changed, 33 insertions, 1 deletions
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 5913a037b87..2a54d24b412 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -522,6 +522,8 @@ void ED_view3d_distance_set(struct RegionView3D *rv3d, const float dist);
float ED_scene_grid_scale(struct Scene *scene, const char **grid_unit);
float ED_view3d_grid_scale(struct Scene *scene, struct View3D *v3d, const char **grid_unit);
+float ED_view3d_grid_view_scale(
+ struct Scene *scene, struct View3D *v3d, struct RegionView3D *rv3d, const char **grid_unit);
void ED_scene_draw_fps(struct Scene *scene, const struct rcti *rect);
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index bfd6679b513..9bda54fdfca 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -774,6 +774,36 @@ float ED_view3d_grid_scale(Scene *scene, View3D *v3d, const char **grid_unit)
return v3d->grid * ED_scene_grid_scale(scene, grid_unit);
}
+/* Simulates the grid scale that is visualized by the shaders drawing functions.
+ * The actual code is seen in `object_grid_frag.glsl` when you get the `grid_res` value.
+ * Currently the simulation is done only when RV3D_VIEW_IS_AXIS. */
+float ED_view3d_grid_view_scale(
+ Scene *scene, View3D *v3d, RegionView3D *rv3d, const char **grid_unit)
+{
+ float grid_scale = ED_view3d_grid_scale(scene, v3d, grid_unit);
+ if (!rv3d->is_persp && RV3D_VIEW_IS_AXIS(rv3d->view)) {
+ /* Decrease the distance between grid snap points depending on zoom. */
+ float grid_subdiv = v3d->gridsubdiv;
+ if (grid_subdiv > 1) {
+ float grid_distance = rv3d->dist;
+ float lvl = (logf(grid_distance / grid_scale) / logf(grid_subdiv));
+ if (lvl < 0.0f) {
+ /* Negative values need an offset for correct casting.
+ * By convention, the minimum lvl is limited to -2 (see `objec_mode.c`) */
+ if (lvl > -2.0f) {
+ lvl -= 1.0f;
+ }
+ else {
+ lvl = -2.0f;
+ }
+ }
+ grid_scale *= pow(grid_subdiv, (int)lvl - 1);
+ }
+ }
+
+ return v3d->grid * grid_scale;
+}
+
static void draw_view_axis(RegionView3D *rv3d, const rcti *rect)
{
const float k = U.rvisize * U.pixelsize; /* axis size */
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index de41e6d3906..143c534d682 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -4669,7 +4669,7 @@ static void initSnapSpatial(TransInfo *t, float r_snap[3])
if (rv3d) {
View3D *v3d = t->sa->spacedata.first;
r_snap[0] = 0.0f;
- r_snap[1] = ED_view3d_grid_scale(t->scene, v3d, NULL) * 1.0f;
+ r_snap[1] = ED_view3d_grid_view_scale(t->scene, v3d, rv3d, NULL) * 1.0f;
r_snap[2] = r_snap[1] * 0.1f;
}
}