Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-31 20:04:03 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-31 20:04:03 +0400
commitc3a7db28d31780329f8402f3f26c7bd575031474 (patch)
treef206c22ced73ce277560776a0e46da5be2eee180 /source/blender
parentb04cd3a76561f17ef0951837ae0ea169e563a571 (diff)
Fix #31657: adding mesh objects did not take units into account for the grid
scale that sets the default size.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/include/ED_view3d.h2
-rw-r--r--source/blender/editors/mesh/editmesh_add.c30
-rw-r--r--source/blender/editors/object/object_add.c5
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c27
4 files changed, 24 insertions, 40 deletions
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index f9f59c9bdd9..55210080e01 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -310,6 +310,8 @@ struct BGpic *ED_view3D_background_image_new(struct View3D *v3d);
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
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index f9eb8770012..9cbd9e0b7da 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -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 @@ static void make_prim_init(bContext *C, const char *idname,
*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)
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 699b731bc15..159f75b60e6 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -166,6 +166,7 @@ void ED_object_base_init_transform(bContext *C, Base *base, const float loc[3],
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 @@ float ED_object_new_primitive_matrix(bContext *C, Object *obedit,
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;
}
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index ee02f99d5b7..14afcaa855f 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -437,16 +437,9 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **
}
#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;
-
- if (v3d->gridlines < 3) return;
-
- grid_scale = v3d->grid;
- /* use 'grid_scale' instead of 'v3d->grid' from now on */
+ float grid_scale = v3d->grid;
/* apply units */
if (scene->unit.system) {
@@ -457,11 +450,25 @@ static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit)
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