Draft: Allow to override system unit in dimensions

This commit is contained in:
Yorik van Havre
2016-10-28 18:08:13 -02:00
parent 9cbcb36280
commit 85534c7014
2 changed files with 17 additions and 8 deletions

View File

@@ -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",\

View File

@@ -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: