[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16668] trunk/blender/source/blender/src/ view.c: [#17388] snap view to main views while rotating from Roelf De Kock (kiemdoder)

Campbell Barton ideasman42 at gmail.com
Mon Sep 22 12:00:38 CEST 2008


Revision: 16668
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16668
Author:   campbellbarton
Date:     2008-09-22 12:00:31 +0200 (Mon, 22 Sep 2008)

Log Message:
-----------
[#17388] snap view to main views while rotating from Roelf De Kock (kiemdoder)
hold down ctrl when rotating the viewport

Modified Paths:
--------------
    trunk/blender/source/blender/src/view.c

Modified: trunk/blender/source/blender/src/view.c
===================================================================
--- trunk/blender/source/blender/src/view.c	2008-09-22 09:09:03 UTC (rev 16667)
+++ trunk/blender/source/blender/src/view.c	2008-09-22 10:00:31 UTC (rev 16668)
@@ -94,7 +94,10 @@
 #define TRACKBALLSIZE  (1.1)
 #define BL_NEAR_CLIP 0.001
 
+#define COS45 0.70710678118654746
+#define SIN45 COS45
 
+
 /* local prototypes ----------*/
 void setcameratoview3d(void); /* windows.c & toets.c */
 
@@ -1104,6 +1107,87 @@
 						VecAddf(G.vd->ofs, G.vd->ofs, obofs);
 					}
 				}
+				
+				/* check for view snap */
+				if (G.qual==LR_CTRLKEY){
+					int i;
+					float viewmat[3][3];
+
+					static const float thres = 0.93; //cos(20 deg);
+					
+					static float snapquats[39][6] = {
+						/*{q0, q1, q3, q4, view, oposite_direction}*/
+						{COS45, -SIN45, 0.0, 0.0, 1, 0},  //front
+						{0.0, 0.0, -SIN45, -SIN45, 1, 1}, //back
+						{1.0, 0.0, 0.0, 0.0, 7, 0},       //top
+						{0.0, -1.0, 0.0, 0.0, 7, 1},      //bottom
+						{0.5, -0.5, -0.5, -0.5, 3, 0},    //left
+						{0.5, -0.5, 0.5, 0.5, 3, 1},      //right
+						
+						/* some more 45 deg snaps */
+						{0.65328145027160645, -0.65328145027160645, 0.27059805393218994, 0.27059805393218994, 0, 0},
+						{0.92387950420379639, 0.0, 0.0, 0.38268342614173889, 0, 0},
+						{0.0, -0.92387950420379639, 0.38268342614173889, 0.0, 0, 0},
+						{0.35355335474014282, -0.85355335474014282, 0.35355338454246521, 0.14644660055637360, 0, 0},
+						{0.85355335474014282, -0.35355335474014282, 0.14644660055637360, 0.35355338454246521, 0, 0},
+						{0.49999994039535522, -0.49999994039535522, 0.49999997019767761, 0.49999997019767761, 0, 0},
+						{0.27059802412986755, -0.65328145027160645, 0.65328145027160645, 0.27059802412986755, 0, 0},
+						{0.65328145027160645, -0.27059802412986755, 0.27059802412986755, 0.65328145027160645, 0, 0},
+						{0.27059799432754517, -0.27059799432754517, 0.65328139066696167, 0.65328139066696167, 0, 0},
+						{0.38268336653709412, 0.0, 0.0, 0.92387944459915161, 0, 0},
+						{0.0, -0.38268336653709412, 0.92387944459915161, 0.0, 0, 0},
+						{0.14644658565521240, -0.35355335474014282, 0.85355335474014282, 0.35355335474014282, 0, 0},
+						{0.35355335474014282, -0.14644658565521240, 0.35355335474014282, 0.85355335474014282, 0, 0},
+						{0.0, 0.0, 0.92387944459915161, 0.38268336653709412, 0, 0},
+						{-0.0, 0.0, 0.38268336653709412, 0.92387944459915161, 0, 0},
+						{-0.27059802412986755, 0.27059802412986755, 0.65328133106231689, 0.65328133106231689, 0, 0},
+						{-0.38268339633941650, 0.0, 0.0, 0.92387938499450684, 0, 0},
+						{0.0, 0.38268339633941650, 0.92387938499450684, 0.0, 0, 0},
+						{-0.14644658565521240, 0.35355338454246521, 0.85355329513549805, 0.35355332493782043, 0, 0},
+						{-0.35355338454246521, 0.14644658565521240, 0.35355332493782043, 0.85355329513549805, 0, 0},
+						{-0.49999991059303284, 0.49999991059303284, 0.49999985098838806, 0.49999985098838806, 0, 0},
+						{-0.27059799432754517, 0.65328145027160645, 0.65328139066696167, 0.27059799432754517, 0, 0},
+						{-0.65328145027160645, 0.27059799432754517, 0.27059799432754517, 0.65328139066696167, 0, 0},
+						{-0.65328133106231689, 0.65328133106231689, 0.27059793472290039, 0.27059793472290039, 0, 0},
+						{-0.92387932538986206, 0.0, 0.0, 0.38268333673477173, 0, 0},
+						{0.0, 0.92387932538986206, 0.38268333673477173, 0.0, 0, 0},
+						{-0.35355329513549805, 0.85355329513549805, 0.35355329513549805, 0.14644657075405121, 0, 0},
+						{-0.85355329513549805, 0.35355329513549805, 0.14644657075405121, 0.35355329513549805, 0, 0},
+						{-0.38268330693244934, 0.92387938499450684, 0.0, 0.0, 0, 0},
+						{-0.92387938499450684, 0.38268330693244934, 0.0, 0.0, 0, 0},
+						{-COS45, 0.0, 0.0, SIN45, 0, 0},
+						{COS45, 0.0, 0.0, SIN45, 0, 0},
+						{0.0, 0.0, 0.0, 1.0, 0, 0}
+					};
+
+					QuatToMat3(G.vd->viewquat, viewmat);
+
+					for (i = 0 ; i < 39; i++){
+						float snapmat[3][3];
+						float view = (int)snapquats[i][4];
+						float oposite_dir = (int)snapquats[i][5];
+						
+						QuatToMat3(snapquats[i], snapmat);
+						
+						if ((Inpf(snapmat[0], viewmat[0]) > thres) &&
+							(Inpf(snapmat[1], viewmat[1]) > thres) &&
+							(Inpf(snapmat[2], viewmat[2]) > thres)){
+							
+							QUATCOPY(G.vd->viewquat, snapquats[i]);
+							
+							G.vd->view = view;
+							if (view){
+								if (oposite_dir){
+									G.vd->flag2 |= V3D_OPP_DIRECTION_NAME;
+								}else{
+									G.vd->flag2 &= ~V3D_OPP_DIRECTION_NAME;
+								}
+							}
+							
+							break;
+						}
+					}
+				}
 			}
 			else if(mode==1) {	/* translate */
 				if(G.vd->persp==V3D_CAMOB) {





More information about the Bf-blender-cvs mailing list