[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60926] trunk/blender/source/blender/ editors/interface/interface_handlers.c: patch [#37197] angle snapping for NORMAL button

Campbell Barton ideasman42 at gmail.com
Fri Oct 25 08:59:58 CEST 2013


Revision: 60926
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60926
Author:   campbellbarton
Date:     2013-10-25 06:59:57 +0000 (Fri, 25 Oct 2013)
Log Message:
-----------
patch [#37197] angle snapping for NORMAL button
from Philipp Oeser (lichtwerk) with minor edits.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_handlers.c

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-10-25 06:22:15 UTC (rev 60925)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-10-25 06:59:57 UTC (rev 60926)
@@ -3664,7 +3664,8 @@
 	return WM_UI_HANDLER_CONTINUE;
 }
 
-static bool ui_numedit_but_NORMAL(uiBut *but, uiHandleButtonData *data, int mx, int my)
+static bool ui_numedit_but_NORMAL(uiBut *but, uiHandleButtonData *data, int mx, int my,
+                                  const bool snap)
 {
 	float dx, dy, rad, radsq, mrad, *fp;
 	int mdx, mdy;
@@ -3720,6 +3721,23 @@
 	}
 	normalize_v3(fp);
 
+	if (snap) {
+		const int snap_steps = 4;  /* 45deg increments */
+		const float snap_steps_angle = M_PI / snap_steps;
+		float angle, angle_snap;
+		int i;
+
+		/* round each axis of 'fp' to the next increment
+		 * do this in "angle" space - this gives increments of same size */
+		for (i = 0; i < 3; i++) {
+			angle = asinf(fp[i]);
+			angle_snap = floorf(0.5f + (angle / snap_steps_angle)) * snap_steps_angle;
+			fp[i] = sinf(angle_snap);
+		}
+		normalize_v3(fp);
+		changed = !compare_v3v3(fp, data->origvec, FLT_EPSILON);
+	}
+
 	data->draglastx = mx;
 	data->draglasty = my;
 
@@ -3778,7 +3796,7 @@
 			button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
 
 			/* also do drag the first time */
-			if (ui_numedit_but_NORMAL(but, data, mx, my))
+			if (ui_numedit_but_NORMAL(but, data, mx, my, event->ctrl != 0))
 				ui_numedit_apply(C, block, but, data);
 			
 			return WM_UI_HANDLER_BREAK;
@@ -3787,7 +3805,7 @@
 	else if (data->state == BUTTON_STATE_NUM_EDITING) {
 		if (event->type == MOUSEMOVE) {
 			if (mx != data->draglastx || my != data->draglasty) {
-				if (ui_numedit_but_NORMAL(but, data, mx, my))
+				if (ui_numedit_but_NORMAL(but, data, mx, my, event->ctrl != 0))
 					ui_numedit_apply(C, block, but, data);
 			}
 		}




More information about the Bf-blender-cvs mailing list