All pastes #219975 Raw Edit

Something

public c v1 · immutable
#219975 ·published 2006-10-24 23:18 UTC
rendered paste body
Index: source/blender/include/BSE_view.h===================================================================RCS file: /cvsroot/bf-blender/blender/source/blender/include/BSE_view.h,vretrieving revision 1.14diff -u -r1.14 BSE_view.h--- source/blender/include/BSE_view.h	28 Jan 2006 18:33:13 -0000	1.14+++ source/blender/include/BSE_view.h	24 Oct 2006 22:37:54 -0000@@ -55,6 +55,7 @@  void initgrabz(float x, float y, float z); void window_to_3d(float *vec, short mx, short my);+void window_to_3d_f(float *vec, float mx, float my); void project_short(float *vec, short *adr); void project_short_noclip(float *vec, short *adr); void project_int(float *vec, int *adr);Index: source/blender/makesdna/DNA_userdef_types.h===================================================================RCS file: /cvsroot/bf-blender/blender/source/blender/makesdna/DNA_userdef_types.h,vretrieving revision 1.58diff -u -r1.58 DNA_userdef_types.h--- source/blender/makesdna/DNA_userdef_types.h	19 Oct 2006 05:06:41 -0000	1.58+++ source/blender/makesdna/DNA_userdef_types.h	24 Oct 2006 14:32:14 -0000@@ -225,6 +225,7 @@ #define USER_HIDE_DOT			65536 #define USER_SHOW_ROTVIEWICON	131072 #define USER_SHOW_VIEWPORTNAME	262144+#define USER_ZOOM_TOCURSOR		524288  /* transopts */ Index: source/blender/src/editview.c===================================================================RCS file: /cvsroot/bf-blender/blender/source/blender/src/editview.c,vretrieving revision 1.112diff -u -r1.112 editview.c--- source/blender/src/editview.c	12 Oct 2006 09:32:47 -0000	1.112+++ source/blender/src/editview.c	24 Oct 2006 23:08:04 -0000@@ -1976,8 +1976,6 @@ { 	rcti rect; 	short val;--	if(G.vd->persp!=2) return; 	 	val= get_border(&rect, 3); 	if(val) {@@ -2002,6 +2000,63 @@ 	} } +void border_zoom(void)+{+	//Zooms in on a border drawn by the user++	rcti rect;+	short val;+	float dvec[3], vb[2], xscale, yscale, scale;+	+	val = get_border(&rect, 3); //box select input+	if(val)+	{+		//find the current window width and height+		vb[0] = G.vd->area->winx;+		vb[1] = G.vd->area->winy;+		+		//convert the drawn rectangle into 3d space+		initgrabz(-G.vd->ofs[0], -G.vd->ofs[1], -G.vd->ofs[2]);+		window_to_3d(dvec, (rect.xmin+rect.xmax-vb[0])/2, (rect.ymin+rect.ymax-vb[1])/2);+		+		//center the view to the center of the rectangle+		VecSubf(G.vd->ofs, G.vd->ofs, dvec);+		+		//work out the ratios, so that everything selected fits when we zoom+		xscale = ((rect.xmax-rect.xmin)/vb[0]);+		yscale = ((rect.ymax-rect.ymin)/vb[1]);+		scale = (xscale >= yscale)?xscale:yscale;+		+		//zoom in as required, or as far as we can go+		G.vd->dist = ((G.vd->dist*scale) >= 0.001*G.vd->grid)? G.vd->dist*scale:0.001*G.vd->grid;+	}+}++void relative_zoom(unsigned short event)+{+	short mval[2];+	float scaleFactor, dvec[3], tvar[2];+	+	if(event==PADPLUSKEY)+		scaleFactor=.83333f;+	else if(event==PADMINUS)+		scaleFactor=1.2f;++	getmouseco_areawin(mval);++	initgrabz(G.vd->ofs[0], G.vd->ofs[1], G.vd->ofs[2]);++	tvar[0] = mval[0];+	tvar[0] = (tvar[0]-((G.vd->area->winx-1)/2))*(1-(1/scaleFactor));++	tvar[1] = mval[1];+	tvar[1] = (tvar[1]-((G.vd->area->winy-1)/2))*(1-(1/scaleFactor));+	window_to_3d_f(dvec, tvar[0], tvar[1]);++	G.vd->dist*=scaleFactor;++	VecAddf(G.vd->ofs, G.vd->ofs, dvec);+}  void fly(void) {Index: source/blender/src/header_view3d.c===================================================================RCS file: /cvsroot/bf-blender/blender/source/blender/src/header_view3d.c,vretrieving revision 1.189diff -u -r1.189 header_view3d.c--- source/blender/src/header_view3d.c	12 Oct 2006 14:26:14 -0000	1.189+++ source/blender/src/header_view3d.c	23 Oct 2006 20:49:15 -0000@@ -239,6 +239,9 @@ 	case 11: /* Camera Fly mode */ 		fly(); 		break;+	case 12: /* Border zoom */+		border_zoom();+		break; 	} 	allqueue(REDRAWVIEW3D, 0); }@@ -253,6 +256,7 @@ 	uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);  	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F",	0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");+	if (G.vd->persp != 2) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Zoom|Shift B",	0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 12, ""); 	 	uiDefBut(block, SEPR, 0, "",					0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, ""); 	Index: source/blender/src/space.c===================================================================RCS file: /cvsroot/bf-blender/blender/source/blender/src/space.c,vretrieving revision 1.385diff -u -r1.385 space.c--- source/blender/src/space.c	19 Oct 2006 05:06:41 -0000	1.385+++ source/blender/src/space.c	24 Oct 2006 14:32:45 -0000@@ -1278,7 +1278,12 @@ 				if(G.qual==LR_ALTKEY) 					view3d_edit_clipping(v3d); 				else if(G.qual==LR_SHIFTKEY)-					set_render_border();+				{+					if(G.vd->persp==2)+						set_render_border();+					else+						border_zoom();+				} 				else if(G.qual==LR_CTRLKEY) { 					if(okee("Bake all selected")) { 						extern void softbody_bake(Object *ob);@@ -2810,9 +2815,13 @@ 		uiDefButI(block, NUM, 0, "Scroll Lines:", 			(xpos+edgsp+(4*mpref)+(6*midsp)+spref-edgsp),y3,spref+edgsp,buth, 			&U.wheellinescroll, 0.0, 32.0, 0, 0,-			"The number of lines scrolled at a time with the mouse wheel");	+			"The number of lines scrolled at a time with the mouse wheel"); 		uiBlockEndAlign(block); +		uiDefButBitI(block, TOG, USER_ZOOM_TOCURSOR, 0, "Zoom to cursor",+			(xpos+edgsp+(4*mpref)+(5*midsp)),y1,spref,buth,+			&(U.uiflag), 0, 0, 0, 0,+			"Zoom relative to the mouse cursor position");	  		uiDefBut(block, LABEL,0,"3D Transform Widget:", 				 (xpos+(2*edgsp)+(5*mpref)+(5*midsp)),y6label,mpref,buth,Index: source/blender/src/toets.c===================================================================RCS file: /cvsroot/bf-blender/blender/source/blender/src/toets.c,vretrieving revision 1.84diff -u -r1.84 toets.c--- source/blender/src/toets.c	28 Sep 2006 01:55:44 -0000	1.84+++ source/blender/src/toets.c	24 Oct 2006 23:07:59 -0000@@ -241,14 +241,26 @@ 			if(G.vd->persp==2) { 				G.vd->camzoom= MAX2(-30, G.vd->camzoom-5); 			}-			else if(G.vd->dist<10.0*G.vd->far) G.vd->dist*=1.2f;+			else if(G.vd->dist<10.0*G.vd->far)+			{+				if(U.uiflag & USER_ZOOM_TOCURSOR)+					relative_zoom(event);+				else+					G.vd->dist*=1.2f;+			} 			if(G.vd->persp!=1) preview3d_event= 0; 		} 		else if(event==PADPLUSKEY) { 			if(G.vd->persp==2) { 				G.vd->camzoom= MIN2(300, G.vd->camzoom+5); 			}-			else if(G.vd->dist> 0.001*G.vd->grid) G.vd->dist*=.83333f;+			else if(G.vd->dist> 0.001*G.vd->grid)+			{+				if(U.uiflag & USER_ZOOM_TOCURSOR)+					relative_zoom(event);+				else+					G.vd->dist*=.83333f;+			} 			if(G.vd->persp!=1) preview3d_event= 0; 		} 		else if(event==PAD5) {Index: source/blender/src/view.c===================================================================RCS file: /cvsroot/bf-blender/blender/source/blender/src/view.c,vretrieving revision 1.70diff -u -r1.70 view.c--- source/blender/src/view.c	15 Aug 2006 11:33:00 -0000	1.70+++ source/blender/src/view.c	24 Oct 2006 22:38:10 -0000@@ -151,6 +151,11 @@  void window_to_3d(float *vec, short mx, short my) {+	window_to_3d_f(vec, mx, my);+}++void window_to_3d_f(float *vec, float mx, float my)+{ 	/* always call initgrabz */ 	float dx, dy;