[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49123] trunk/blender/source/blender/ editors/space_view3d/view3d_edit.c: code cleanup: simplify view orbit operator

Campbell Barton ideasman42 at gmail.com
Sun Jul 22 20:31:08 CEST 2012


Revision: 49123
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49123
Author:   campbellbarton
Date:     2012-07-22 18:31:08 +0000 (Sun, 22 Jul 2012)
Log Message:
-----------
code cleanup: simplify view orbit operator

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2012-07-22 17:49:56 UTC (rev 49122)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2012-07-22 18:31:08 UTC (rev 49123)
@@ -3008,7 +3008,6 @@
 	View3D *v3d;
 	ARegion *ar;
 	RegionView3D *rv3d;
-	float phi, q1[4], new_quat[4];
 	int orbitdir;
 
 	/* no NULL check is needed, poll checks */
@@ -3019,36 +3018,40 @@
 
 	if (rv3d->viewlock == 0) {
 		if ((rv3d->persp != RV3D_CAMOB) || ED_view3d_camera_lock_check(v3d, rv3d)) {
-			if (orbitdir == V3D_VIEW_STEPLEFT || orbitdir == V3D_VIEW_STEPRIGHT) {
-				float si;
+			float angle = DEG2RADF((float)U.pad_rot_angle);
+			float quat_mul[4];
+			float quat_new[4];
+
+			if (ELEM(orbitdir, V3D_VIEW_STEPLEFT, V3D_VIEW_STEPRIGHT)) {
+				const float zvec[3] = {0.0f, 0.0f, 1.0f};
+
+				if (orbitdir == V3D_VIEW_STEPRIGHT) {
+					angle = -angle;
+				}
+
 				/* z-axis */
-				phi = (float)(M_PI / 360.0) * U.pad_rot_angle;
-				if (orbitdir == V3D_VIEW_STEPRIGHT) phi = -phi;
-				si = (float)sin(phi);
-				q1[0] = (float)cos(phi);
-				q1[1] = q1[2] = 0.0;
-				q1[3] = si;
-				mul_qt_qtqt(new_quat, rv3d->viewquat, q1);
-				rv3d->view = RV3D_VIEW_USER;
+				axis_angle_to_quat(quat_mul, zvec, angle);
 			}
-			else if (orbitdir == V3D_VIEW_STEPDOWN || orbitdir == V3D_VIEW_STEPUP) {
+			else {
+
+				if (orbitdir == V3D_VIEW_STEPDOWN) {
+					angle = -angle;
+				}
+
 				/* horizontal axis */
-				copy_v3_v3(q1 + 1, rv3d->viewinv[0]);
-
-				normalize_v3(q1 + 1);
-				phi = (float)(M_PI / 360.0) * U.pad_rot_angle;
-				if (orbitdir == V3D_VIEW_STEPDOWN) phi = -phi;
-				q1[0] = (float)cos(phi);
-				mul_v3_fl(q1 + 1, sin(phi));
-				mul_qt_qtqt(new_quat, rv3d->viewquat, q1);
-				rv3d->view = RV3D_VIEW_USER;
+				axis_angle_to_quat(quat_mul, rv3d->viewinv[0], angle);
 			}
 
-			smooth_view(C, CTX_wm_view3d(C), ar, NULL, NULL, NULL, new_quat, NULL, NULL);
+			mul_qt_qtqt(quat_new, rv3d->viewquat, quat_mul);
+			rv3d->view = RV3D_VIEW_USER;
+
+			smooth_view(C, CTX_wm_view3d(C), ar, NULL, NULL, NULL, quat_new, NULL, NULL);
+
+			return OPERATOR_FINISHED;
 		}
 	}
 
-	return OPERATOR_FINISHED;
+	return OPERATOR_CANCELLED;
 }
 
 void VIEW3D_OT_view_orbit(wmOperatorType *ot)




More information about the Bf-blender-cvs mailing list