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:
-rw-r--r--source/blender/blenkernel/BKE_unit.h3
-rw-r--r--source/blender/blenkernel/intern/unit.c15
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c19
-rw-r--r--source/blender/editors/transform/transform.c19
4 files changed, 43 insertions, 13 deletions
diff --git a/source/blender/blenkernel/BKE_unit.h b/source/blender/blenkernel/BKE_unit.h
index c64c5aa50a1..df299718673 100644
--- a/source/blender/blenkernel/BKE_unit.h
+++ b/source/blender/blenkernel/BKE_unit.h
@@ -39,6 +39,9 @@ int bUnit_ReplaceString(char *str, char *str_orig, char *str_prev, double scale
/* the size of the unit used for this value (used for calculating the ckickstep) */
double bUnit_ClosestScalar(double value, int system, int type);
+/* base scale for these units */
+double bUnit_BaseScalar(int system, int type);
+
/* loop over scales, coudl add names later */
//double bUnit_Iter(void **unit, char **name, int system, int type);
diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c
index fef15f83ccd..8c63a8756a4 100644
--- a/source/blender/blenkernel/intern/unit.c
+++ b/source/blender/blenkernel/intern/unit.c
@@ -68,11 +68,16 @@ static struct bUnitDef buMetricLenDef[] = {
{"centimeter", "Centimeters", "cm", NULL, 0.01, 0.0, B_UNIT_DEF_NONE},
{"millimeter", "Millimeters", "mm", NULL, 0.001, 0.0, B_UNIT_DEF_NONE},
{"micrometer", "Micrometers", "um", "µm", 0.000001, 0.0, B_UNIT_DEF_NONE}, // micron too?
+
+ /* These get displayed because of float precision problems in the transform header,
+ * could work around, but for now probably people wont use these */
+ /*
{"nanometer", "Nanometers", "nm", NULL, 0.000000001, 0.0, B_UNIT_DEF_NONE},
{"picometer", "Picometers", "pm", NULL, 0.000000000001, 0.0,B_UNIT_DEF_NONE},
+ */
{NULL, NULL, NULL, NULL, 0.0, 0.0}
};
-static struct bUnitCollection buMetricLenCollecton = {buMetricLenDef, 1, 0, sizeof(buMetricLenDef)/sizeof(bUnitDef)};
+static struct bUnitCollection buMetricLenCollecton = {buMetricLenDef, 3, 0, sizeof(buMetricLenDef)/sizeof(bUnitDef)};
static struct bUnitDef buImperialLenDef[] = {
{"mile", "Miles", "mi", "m", 1609.344, 0.0, B_UNIT_DEF_NONE},
@@ -83,7 +88,7 @@ static struct bUnitDef buImperialLenDef[] = {
{"thou", "Thous", "mil", NULL,0.0000254, 0.0, B_UNIT_DEF_NONE},
{NULL, NULL, NULL, NULL, 0.0, 0.0}
};
-static struct bUnitCollection buImperialLenCollecton = {buImperialLenDef, 2, 0, sizeof(buImperialLenDef)/sizeof(bUnitDef)};
+static struct bUnitCollection buImperialLenCollecton = {buImperialLenDef, 3, 0, sizeof(buImperialLenDef)/sizeof(bUnitDef)};
/* Time */
@@ -390,6 +395,12 @@ double bUnit_ClosestScalar(double value, int system, int type)
return unit->scalar;
}
+double bUnit_BaseScalar(int system, int type)
+{
+ bUnitCollection *usys = unit_get_system(system, type);
+ return unit_default(usys)->scalar;
+}
+
/* external access */
void bUnit_GetSystem(void **usys_pt, int *len, int system, int type)
{
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index fb4ef3349e6..fcc6692f621 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -244,7 +244,6 @@ static void drawgrid(ARegion *ar, View3D *v3d, char **grid_unit)
float wx, wy, x, y, fw, fx, fy, dx;
float vec4[4];
char col[3], col2[3];
- short sublines = v3d->gridsubdiv;
*grid_unit= NULL;
@@ -261,7 +260,8 @@ static void drawgrid(ARegion *ar, View3D *v3d, char **grid_unit)
x= (wx)*fx/fw;
y= (wy)*fy/fw;
- vec4[0]=vec4[1]=v3d->grid;
+ vec4[0]=vec4[1]= (U.unit_system) ? 1.0 : v3d->grid;
+
vec4[2]= 0.0;
vec4[3]= 1.0;
Mat4MulVec4fl(rv3d->persmat, vec4);
@@ -278,6 +278,8 @@ static void drawgrid(ARegion *ar, View3D *v3d, char **grid_unit)
UI_ThemeColor(TH_GRID);
if(U.unit_system) {
+ /* Use GRID_MIN_PX*2 for units because very very small grid
+ * items are less useful when dealing with units */
void *usys;
int len, i;
double scalar;
@@ -292,14 +294,15 @@ static void drawgrid(ARegion *ar, View3D *v3d, char **grid_unit)
scalar= bUnit_GetScaler(usys, i);
dx_scalar = dx * scalar * U.unit_scale_length;
- if (dx_scalar < GRID_MIN_PX)
+ if (dx_scalar < (GRID_MIN_PX*2))
continue;
- /* Store the smallest drawn grid size units name so users know how bit each grid cell is */
- if(*grid_unit==NULL)
+ /* Store the smallest drawn grid size units name so users know how big each grid cell is */
+ if(*grid_unit==NULL) {
*grid_unit= bUnit_GetNamePlural(usys, i);
-
- blend_fac= 1-(GRID_MIN_PX/dx_scalar);
+ v3d->gridview= (scalar * U.unit_scale_length);
+ }
+ blend_fac= 1-((GRID_MIN_PX*2)/dx_scalar);
/* tweak to have the fade a bit nicer */
blend_fac= (blend_fac * blend_fac) * 2.0f;
@@ -313,6 +316,8 @@ static void drawgrid(ARegion *ar, View3D *v3d, char **grid_unit)
}
}
else {
+ short sublines = v3d->gridsubdiv;
+
if(dx<GRID_MIN_PX) {
v3d->gridview*= sublines;
dx*= sublines;
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 510193fdade..1d4882c2da2 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -89,6 +89,7 @@
#include "BKE_pointcache.h"
#include "BKE_utildefines.h"
#include "BKE_context.h"
+#include "BKE_unit.h"
//#include "BSE_view.h"
@@ -3039,12 +3040,22 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) {
applyAspectRatio(t, dvec);
dist = VecLength(vec);
- sprintf(&tvec[0], "%.4f", dvec[0]);
- sprintf(&tvec[20], "%.4f", dvec[1]);
- sprintf(&tvec[40], "%.4f", dvec[2]);
+ if(U.unit_system) {
+ int i, do_split= U.unit_flag & USER_UNIT_OPT_SPLIT ? 1:0;
+
+ for(i=0; i<3; i++)
+ bUnit_AsString(&tvec[i*20], dvec[i]*U.unit_scale_length, 4, U.unit_system, B_UNIT_LENGTH, do_split, 1);
+ }
+ else {
+ sprintf(&tvec[0], "%.4f", dvec[0]);
+ sprintf(&tvec[20], "%.4f", dvec[1]);
+ sprintf(&tvec[40], "%.4f", dvec[2]);
+ }
}
- if( dist > 1e10 || dist < -1e10 ) /* prevent string buffer overflow */
+ if(U.unit_system)
+ bUnit_AsString(distvec, dist*U.unit_scale_length, 4, U.unit_system, B_UNIT_LENGTH, U.unit_flag & USER_UNIT_OPT_SPLIT, 0);
+ else if( dist > 1e10 || dist < -1e10 ) /* prevent string buffer overflow */
sprintf(distvec, "%.4e", dist);
else
sprintf(distvec, "%.4f", dist);