[Bf-blender-cvs] [5981567] master: Code cleanup: use len_v2v2_int for view zoom-scale

Campbell Barton noreply at git.blender.org
Fri Mar 28 05:26:04 CET 2014


Commit: 5981567ec6afb3ae95f24c28b2c72bff0d8e01e6
Author: Campbell Barton
Date:   Fri Mar 28 15:02:57 2014 +1100
https://developer.blender.org/rB5981567ec6afb3ae95f24c28b2c72bff0d8e01e6

Code cleanup: use len_v2v2_int for view zoom-scale

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

M	source/blender/blenlib/BLI_math_vector.h
M	source/blender/blenlib/intern/math_vector_inline.c
M	source/blender/editors/space_view3d/view3d_edit.c

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

diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index aef06f7..9b73ca5 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -163,6 +163,7 @@ MINLINE int   len_manhattan_v2_int(const int v[2]) ATTR_WARN_UNUSED_RESULT;
 MINLINE float len_manhattan_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT;
 MINLINE float len_v2(const float a[2]) ATTR_WARN_UNUSED_RESULT;
 MINLINE float len_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
+MINLINE float len_v2v2_int(const int v1[2], const int v2[2]);
 MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
 MINLINE float len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT;
 MINLINE float len_manhattan_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c
index 45a0cb3..59d5f7e 100644
--- a/source/blender/blenlib/intern/math_vector_inline.c
+++ b/source/blender/blenlib/intern/math_vector_inline.c
@@ -676,6 +676,15 @@ MINLINE float len_v2v2(const float v1[2], const float v2[2])
 	return sqrtf(x * x + y * y);
 }
 
+MINLINE float len_v2v2_int(const int v1[2], const int v2[2])
+{
+	float x, y;
+
+	x = (float)(v1[0] - v2[0]);
+	y = (float)(v1[1] - v2[1]);
+	return sqrtf(x * x + y * y);
+}
+
 MINLINE float len_v3(const float a[3])
 {
 	return sqrtf(dot_v3v3(a, a));
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index fe84e3e..6b08ae9 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -1962,7 +1962,7 @@ static void view_zoom_mouseloc(ARegion *ar, float dfac, int mx, int my)
 }
 
 
-static void viewzoom_apply(ViewOpsData *vod, const int x, const int y, const short viewzoom, const short zoom_invert)
+static void viewzoom_apply(ViewOpsData *vod, const int xy[2], const short viewzoom, const short zoom_invert)
 {
 	float zfac = 1.0;
 	bool use_cam_zoom;
@@ -1971,7 +1971,7 @@ static void viewzoom_apply(ViewOpsData *vod, const int x, const int y, const sho
 
 	if (use_cam_zoom) {
 		float delta;
-		delta = (x - vod->origx + y - vod->origy) / 10.0f;
+		delta = (xy[0] - vod->origx + xy[1] - vod->origy) / 10.0f;
 		vod->rv3d->camzoom = vod->camzoom_prev + (zoom_invert ? -delta : delta);
 
 		CLAMP(vod->rv3d->camzoom, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX);
@@ -1983,10 +1983,10 @@ static void viewzoom_apply(ViewOpsData *vod, const int x, const int y, const sho
 		float fac;
 
 		if (U.uiflag & USER_ZOOM_HORIZ) {
-			fac = (float)(vod->origx - x);
+			fac = (float)(vod->origx - xy[0]);
 		}
 		else {
-			fac = (float)(vod->origy - y);
+			fac = (float)(vod->origy - xy[1]);
 		}
 
 		if (zoom_invert) {
@@ -1998,26 +1998,25 @@ static void viewzoom_apply(ViewOpsData *vod, const int x, const int y, const sho
 		vod->timer_lastdraw = time;
 	}
 	else if (viewzoom == USER_ZOOM_SCALE) {
-		int ctr[2], len1, len2;
 		/* method which zooms based on how far you move the mouse */
 
-		ctr[0] = BLI_rcti_cent_x(&vod->ar->winrct);
-		ctr[1] = BLI_rcti_cent_y(&vod->ar->winrct);
-
-		len1 = (int)sqrt((ctr[0] - x) * (ctr[0] - x) + (ctr[1] - y) * (ctr[1] - y)) + 5;
-		len2 = (int)sqrt((ctr[0] - vod->origx) * (ctr[0] - vod->origx) + (ctr[1] - vod->origy) * (ctr[1] - vod->origy)) + 5;
-
-		zfac = vod->dist_prev * ((float)len2 / len1) / vod->rv3d->dist;
+		const int ctr[2] = {
+		    BLI_rcti_cent_x(&vod->ar->winrct),
+		    BLI_rcti_cent_y(&vod->ar->winrct),
+		};
+		const float len_new = 5 + len_v2v2_int(ctr, xy);
+		const float len_old = 5 + len_v2v2_int(ctr, &vod->origx);
+		zfac = vod->dist_prev * ((len_old + 5) / (len_new + 5)) / vod->rv3d->dist;
 	}
 	else {  /* USER_ZOOM_DOLLY */
 		float len1, len2;
 		
 		if (U.uiflag & USER_ZOOM_HORIZ) {
-			len1 = (vod->ar->winrct.xmax - x) + 5;
+			len1 = (vod->ar->winrct.xmax - xy[0]) + 5;
 			len2 = (vod->ar->winrct.xmax - vod->origx) + 5;
 		}
 		else {
-			len1 = (vod->ar->winrct.ymax - y) + 5;
+			len1 = (vod->ar->winrct.ymax - xy[1]) + 5;
 			len2 = (vod->ar->winrct.ymax - vod->origy) + 5;
 		}
 		if (zoom_invert) {
@@ -2089,7 +2088,7 @@ static int viewzoom_modal(bContext *C, wmOperator *op, const wmEvent *event)
 	}
 
 	if (event_code == VIEW_APPLY) {
-		viewzoom_apply(vod, event->x, event->y, U.viewzoom, (U.uiflag & USER_ZOOM_INVERT) != 0);
+		viewzoom_apply(vod, &event->x, U.viewzoom, (U.uiflag & USER_ZOOM_INVERT) != 0);
 	}
 	else if (event_code == VIEW_CONFIRM) {
 		ED_view3d_depth_tag_update(vod->rv3d);
@@ -2224,12 +2223,12 @@ static int viewzoom_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 
 			if (U.uiflag & USER_ZOOM_HORIZ) {
 				vod->origx = vod->oldx = event->x;
-				viewzoom_apply(vod, event->prevx, event->prevy, USER_ZOOM_DOLLY, (U.uiflag & USER_ZOOM_INVERT) != 0);
+				viewzoom_apply(vod, &event->prevx, USER_ZOOM_DOLLY, (U.uiflag & USER_ZOOM_INVERT) != 0);
 			}
 			else {
 				/* Set y move = x move as MOUSEZOOM uses only x axis to pass magnification value */
 				vod->origy = vod->oldy = vod->origy + event->x - event->prevx;
-				viewzoom_apply(vod, event->prevx, event->prevy, USER_ZOOM_DOLLY, (U.uiflag & USER_ZOOM_INVERT) != 0);
+				viewzoom_apply(vod, &event->prevx, USER_ZOOM_DOLLY, (U.uiflag & USER_ZOOM_INVERT) != 0);
 			}
 			ED_view3d_depth_tag_update(vod->rv3d);




More information about the Bf-blender-cvs mailing list