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) { _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs