forked from bartvdbraak/blender
Fix #31657: adding mesh objects did not take units into account for the grid
scale that sets the default size.
This commit is contained in:
parent
b04cd3a765
commit
c3a7db28d3
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user