[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33265] trunk/blender/source/blender: use unit system for the grid floor (was only ortho before).

Campbell Barton ideasman42 at gmail.com
Tue Nov 23 18:14:03 CET 2010


Revision: 33265
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33265
Author:   campbellbarton
Date:     2010-11-23 18:14:03 +0100 (Tue, 23 Nov 2010)

Log Message:
-----------
use unit system for the grid floor (was only ortho before).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_unit.h
    trunk/blender/source/blender/blenkernel/intern/unit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c

Modified: trunk/blender/source/blender/blenkernel/BKE_unit.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_unit.h	2010-11-23 16:45:17 UTC (rev 33264)
+++ trunk/blender/source/blender/blenkernel/BKE_unit.h	2010-11-23 17:14:03 UTC (rev 33265)
@@ -52,6 +52,7 @@
 //double bUnit_Iter(void **unit, char **name, int system, int type);
 
 void		bUnit_GetSystem(void **usys_pt, int *len, int system, int type);
+int			bUnit_GetBaseUnit(void *usys_pt);
 const char*	bUnit_GetName(void *usys_pt, int index);
 const char*	bUnit_GetNameDisplay(void *usys_pt, int index);
 double		bUnit_GetScaler(void *usys_pt, int index);

Modified: trunk/blender/source/blender/blenkernel/intern/unit.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/unit.c	2010-11-23 16:45:17 UTC (rev 33264)
+++ trunk/blender/source/blender/blenkernel/intern/unit.c	2010-11-23 17:14:03 UTC (rev 33265)
@@ -755,6 +755,11 @@
 	*len= usys->length;
 }
 
+int bUnit_GetBaseUnit(void *usys_pt)
+{
+	return ((bUnitCollection *)usys_pt)->base_unit;
+}
+
 const char *bUnit_GetName(void *usys_pt, int index)
 {
 	return ((bUnitCollection *)usys_pt)->units[index].name;

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2010-11-23 16:45:17 UTC (rev 33264)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2010-11-23 17:14:03 UTC (rev 33265)
@@ -250,8 +250,6 @@
 	float wx, wy, x, y, fw, fx, fy, dx;
 	float vec4[4];
 	char col[3], col2[3];
-	
-	*grid_unit= NULL;
 
 	vec4[0]=vec4[1]=vec4[2]=0.0; 
 	vec4[3]= 1.0;
@@ -306,7 +304,7 @@
 				/* Store the smallest drawn grid size units name so users know how big each grid cell is */
 				if(*grid_unit==NULL) {
 					*grid_unit= bUnit_GetNameDisplay(usys, i);
-					rv3d->gridview= (scalar / unit->scale_length) * v3d->grid;
+					rv3d->gridview= (scalar * v3d->grid) / unit->scale_length;
 				}
 				blend_fac= 1-((GRID_MIN_PX*2)/dx_scalar);
 
@@ -417,9 +415,9 @@
 }
 #undef GRID_MIN_PX
 
-static void drawfloor(Scene *scene, View3D *v3d)
+static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit)
 {
-	float vert[3], grid;
+	float vert[3], grid, grid_scale;
 	int a, gridlines, emphasise;
 	char col[3], col2[3];
 	short draw_line = 0;
@@ -428,11 +426,28 @@
 	
 	if(v3d->gridlines<3) return;
 	
+	grid_scale= v3d->grid;
+	/* use 'grid_scale' instead of 'v3d->grid' from now on */
+
+	/* apply units */
+	if(scene->unit.system) {
+		void *usys;
+		int len;
+
+		bUnit_GetSystem(&usys, &len, scene->unit.system, B_UNIT_LENGTH);
+
+		if(usys) {
+			int i= bUnit_GetBaseUnit(usys);
+			*grid_unit= bUnit_GetNameDisplay(usys, i);
+			 grid_scale = (grid_scale * bUnit_GetScaler(usys, i)) / scene->unit.scale_length;
+		}
+	}
+	
 	if(v3d->zbuf && scene->obedit) glDepthMask(0);	// for zbuffer-select
 	
 	gridlines= v3d->gridlines/2;
-	grid= gridlines*v3d->grid;
-	
+	grid= gridlines * grid_scale;
+
 	UI_GetThemeColor3ubv(TH_GRID, col);
 	UI_GetThemeColor3ubv(TH_BACK, col2);
 	
@@ -472,7 +487,7 @@
 		
 		if (draw_line) {
 			glBegin(GL_LINE_STRIP);
-			vert[0]= a*v3d->grid;
+			vert[0]= a * grid_scale;
 			vert[1]= grid;
 			glVertex3fv(vert);
 			vert[1]= -grid;
@@ -511,7 +526,7 @@
 		
 		if (draw_line) {
 			glBegin(GL_LINE_STRIP);
-			vert[1]= a*v3d->grid;
+			vert[1]= a * grid_scale;
 			vert[0]= grid;
 			glVertex3fv(vert );
 			vert[0]= -grid;
@@ -2340,7 +2355,7 @@
 
 	if(rv3d->view==0 || rv3d->persp != RV3D_ORTHO) {
 		if ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) {
-			drawfloor(scene, v3d);
+			drawfloor(scene, v3d, &grid_unit);
 		}
 		if(rv3d->persp==RV3D_CAMOB) {
 			if(scene->world) {





More information about the Bf-blender-cvs mailing list