[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