[Bf-blender-cvs] [c8e61343867] blender2.8: Fix T56499: Adapt incremental snapping to orthographic viewport scale.

mano-wii noreply at git.blender.org
Tue Oct 30 18:23:26 CET 2018


Commit: c8e61343867889fda08f800701956245bac4d30f
Author: mano-wii
Date:   Tue Oct 30 14:21:50 2018 -0300
Branches: blender2.8
https://developer.blender.org/rBc8e61343867889fda08f800701956245bac4d30f

Fix T56499: Adapt incremental snapping to orthographic viewport scale.

===================================================================

M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/transform/transform.c

===================================================================

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;
 		}
 	}



More information about the Bf-blender-cvs mailing list