Draft: Allow to override system unit in dimensions
This commit is contained in:
@@ -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",\
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user