From 85534c7014b65ec92ad388338c784b2e2e847a78 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 28 Oct 2016 18:08:13 -0200 Subject: [PATCH] Draft: Allow to override system unit in dimensions --- src/Mod/Draft/Draft.py | 8 ++++++-- src/Mod/Draft/DraftGui.py | 17 +++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 8953e88ba2..955e308832 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -3566,6 +3566,7 @@ class _ViewProviderDimension(_ViewProviderDraft): obj.addProperty("App::PropertyBool","ShowUnit","Draft",QT_TRANSLATE_NOOP("App::Property","Show the unit suffix")) obj.addProperty("App::PropertyVectorDistance","TextPosition","Draft",QT_TRANSLATE_NOOP("App::Property","The position of the text. Leave (0,0,0) for automatic position")) obj.addProperty("App::PropertyString","Override","Draft",QT_TRANSLATE_NOOP("App::Property","Text override. Use $dim to insert the dimension length")) + obj.addProperty("App::PropertyString","UnitOverride","Draft",QT_TRANSLATE_NOOP("App::Property","A unit to express the measurement. Leave blank for system default")) obj.FontSize = getParam("textheight",0.20) obj.TextSpacing = getParam("dimspacing",0.05) obj.FontName = getParam("textfont","") @@ -3749,15 +3750,18 @@ class _ViewProviderDimension(_ViewProviderDraft): su = obj.ViewObject.ShowUnit # set text value l = self.p3.sub(self.p2).Length + unit = None + if hasattr(obj.ViewObject,"UnitOverride"): + unit = obj.ViewObject.UnitOverride # special representation if "Building US" scheme if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("UserSchema",0) == 5: s = FreeCAD.Units.Quantity(l,FreeCAD.Units.Length).UserString self.string = s.replace("' ","'- ") self.string = s.replace("+"," ") elif hasattr(obj.ViewObject,"Decimals"): - self.string = DraftGui.displayExternal(l,obj.ViewObject.Decimals,'Length',su) + self.string = DraftGui.displayExternal(l,obj.ViewObject.Decimals,'Length',su,unit) else: - self.string = DraftGui.displayExternal(l,None,'Length',su) + self.string = DraftGui.displayExternal(l,None,'Length',su,unit) if hasattr(obj.ViewObject,"Override"): if obj.ViewObject.Override: self.string = obj.ViewObject.Override.replace("$dim",\ diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index cd0fba7e56..0470330251 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -134,16 +134,21 @@ def makeFormatSpec(decimals=4,dim='Length'): fmtSpec = "%." + str(decimals) + "f " + "??" return fmtSpec -def displayExternal(internValue,decimals=None,dim='Length',showUnit=True): +def displayExternal(internValue,decimals=None,dim='Length',showUnit=True,unit=None): '''return an internal value (ie mm) Length or Angle converted for display according - to Units Schema in use.''' + to Units Schema in use. Unit can be used to force the value to express in a certain unit''' from FreeCAD import Units if dim == 'Length': q = FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Length) - if (decimals == None) and showUnit: - return q.UserString - conversion = q.getUserPreferred()[1] - uom = q.getUserPreferred()[2] + if not unit: + if (decimals == None) and showUnit: + return q.UserString + conversion = q.getUserPreferred()[1] + uom = q.getUserPreferred()[2] + else: + uom = unit + internValue = q.getValueAs(unit) + conversion = 1 elif dim == 'Angle': return FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Angle).UserString else: