All pastes #219509 Raw Edit

elubie

public text v1 · immutable
#219509 ·published 2006-10-24 18:54 UTC
rendered paste body
Index: source/blender/src/editview.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/editview.c,v
retrieving revision 1.112
diff -u -r1.112 editview.c
--- source/blender/src/editview.c	12 Oct 2006 09:32:47 -0000	1.112
+++ source/blender/src/editview.c	23 Oct 2006 20:36:51 -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,37 @@
 	}
 }
 
+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 fly(void)
 {
 Index: source/blender/src/space.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/space.c,v
retrieving revision 1.385
diff -u -r1.385 space.c
--- source/blender/src/space.c	19 Oct 2006 05:06:41 -0000	1.385
+++ source/blender/src/space.c	22 Oct 2006 09:01:46 -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);