[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