[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47284] trunk/blender/source/blender/ editors: Fix #31657: adding mesh objects did not take units into account for the grid

Brecht Van Lommel brechtvanlommel at pandora.be
Thu May 31 18:04:04 CEST 2012


Revision: 47284
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47284
Author:   blendix
Date:     2012-05-31 16:04:03 +0000 (Thu, 31 May 2012)
Log Message:
-----------
Fix #31657: adding mesh objects did not take units into account for the grid
scale that sets the default size.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/mesh/editmesh_add.c
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2012-05-31 15:52:18 UTC (rev 47283)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2012-05-31 16:04:03 UTC (rev 47284)
@@ -310,6 +310,8 @@
 void ED_view3D_background_image_remove(struct View3D *v3d, struct BGpic *bgpic);
 void ED_view3D_background_image_clear(struct View3D *v3d);
 
+float ED_view3d_grid_scale(struct Scene *scene, struct View3D *v3d, const char **grid_unit);
+
 /* view matrix properties utilities */
 /* unused */
 #if 0

Modified: trunk/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_add.c	2012-05-31 15:52:18 UTC (rev 47283)
+++ trunk/blender/source/blender/editors/mesh/editmesh_add.c	2012-05-31 16:04:03 UTC (rev 47284)
@@ -53,34 +53,6 @@
 
 #include "mesh_intern.h"
 
-/* uses context to figure out transform for primitive */
-/* returns standard diameter */
-static float new_primitive_matrix(bContext *C, const float loc[3], const float rot[3], float primmat[][4])
-{
-	Object *obedit = CTX_data_edit_object(C);
-	View3D *v3d = CTX_wm_view3d(C);
-	float mat[3][3], rmat[3][3], cmat[3][3], imat[3][3];
-	
-	unit_m4(primmat);
-
-	eul_to_mat3(rmat, rot);
-	invert_m3(rmat);
-	
-	/* inverse transform for initial rotation and object */
-	copy_m3_m4(mat, obedit->obmat);
-	mul_m3_m3m3(cmat, rmat, mat);
-	invert_m3_m3(imat, cmat);
-	copy_m4_m3(primmat, imat);
-
-	/* center */
-	copy_v3_v3(primmat[3], loc);
-	sub_v3_v3(primmat[3], obedit->obmat[3]);
-	invert_m3_m3(imat, mat);
-	mul_m3_v3(imat, primmat[3]);
-
-	return v3d ? v3d->grid : 1.0f;
-}
-
 /* ********* add primitive operators ************* */
 
 static void make_prim_init(bContext *C, const char *idname,
@@ -101,7 +73,7 @@
 		*state = 1;
 	}
 
-	*dia = new_primitive_matrix(C, loc, rot, mat);
+	*dia = ED_object_new_primitive_matrix(C, obedit, loc, rot, mat);
 }
 
 static void make_prim_finish(bContext *C, int *state, int enter_editmode)

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2012-05-31 15:52:18 UTC (rev 47283)
+++ trunk/blender/source/blender/editors/object/object_add.c	2012-05-31 16:04:03 UTC (rev 47284)
@@ -166,6 +166,7 @@
 float ED_object_new_primitive_matrix(bContext *C, Object *obedit,
                                      const float loc[3], const float rot[3], float primmat[][4])
 {
+	Scene *scene = CTX_data_scene(C);
 	View3D *v3d = CTX_wm_view3d(C);
 	float mat[3][3], rmat[3][3], cmat[3][3], imat[3][3];
 	
@@ -186,7 +187,9 @@
 	invert_m3_m3(imat, mat);
 	mul_m3_v3(imat, primmat[3]);
 	
-	if (v3d) return v3d->grid;
+	if (v3d)
+		return ED_view3d_grid_scale(scene, v3d, NULL);
+
 	return 1.0f;
 }
 

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-05-31 15:52:18 UTC (rev 47283)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-05-31 16:04:03 UTC (rev 47284)
@@ -437,17 +437,10 @@
 }
 #undef GRID_MIN_PX
 
-static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit)
+float ED_view3d_grid_scale(Scene *scene, View3D *v3d, const char **grid_unit)
 {
-	float grid, grid_scale;
-	unsigned char col_grid[3];
-	const int gridlines = v3d->gridlines / 2;
+	float grid_scale = v3d->grid;
 
-	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;
@@ -457,11 +450,25 @@
 
 		if (usys) {
 			int i = bUnit_GetBaseUnit(usys);
-			*grid_unit = bUnit_GetNameDisplay(usys, i);
+			if (grid_unit)
+				*grid_unit = bUnit_GetNameDisplay(usys, i);
 			grid_scale = (grid_scale * (float)bUnit_GetScaler(usys, i)) / scene->unit.scale_length;
 		}
 	}
 
+	return grid_scale;
+}
+
+static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit)
+{
+	float grid, grid_scale;
+	unsigned char col_grid[3];
+	const int gridlines = v3d->gridlines / 2;
+
+	if (v3d->gridlines < 3) return;
+	
+	/* use 'grid_scale' instead of 'v3d->grid' from now on */
+	grid_scale = ED_view3d_grid_scale(scene, v3d, grid_unit);
 	grid = gridlines * grid_scale;
 
 	if (v3d->zbuf && scene->obedit) glDepthMask(0);  // for zbuffer-select




More information about the Bf-blender-cvs mailing list