Draft: fixed wrong decimals in dimensions display + minor bugfix

This commit is contained in:
Yorik van Havre 2016-08-04 19:16:38 -03:00
parent 595a5dd2c7
commit 7e310b2444
2 changed files with 39 additions and 34 deletions

View File

@ -324,19 +324,20 @@ def getGroupContents(objectslist,walls=False,addgroups=False):
if not isinstance(objectslist,list):
objectslist = [objectslist]
for obj in objectslist:
if obj.isDerivedFrom("App::DocumentObjectGroup") or ((getType(obj) == "Space") and hasattr(obj,"Group")):
if obj.isDerivedFrom("Drawing::FeaturePage"):
# skip if the group is a page
newlist.append(obj)
else:
if addgroups:
if obj:
if obj.isDerivedFrom("App::DocumentObjectGroup") or ((getType(obj) == "Space") and hasattr(obj,"Group")):
if obj.isDerivedFrom("Drawing::FeaturePage"):
# skip if the group is a page
newlist.append(obj)
newlist.extend(getGroupContents(obj.Group,walls,addgroups))
else:
#print("adding ",obj.Name)
newlist.append(obj)
if walls:
newlist.extend(getWindows(obj))
else:
if addgroups:
newlist.append(obj)
newlist.extend(getGroupContents(obj.Group,walls,addgroups))
else:
#print("adding ",obj.Name)
newlist.append(obj)
if walls:
newlist.extend(getWindows(obj))
# cleaning possible duplicates
cleanlist = []
@ -3611,7 +3612,7 @@ class _ViewProviderDimension(_ViewProviderDraft):
elif hasattr(obj.ViewObject,"Decimals"):
self.string = DraftGui.displayExternal(l,obj.ViewObject.Decimals,'Length',su)
else:
self.string = DraftGui.displayExternal(l,getParam("dimPrecision",2),'Length',su)
self.string = DraftGui.displayExternal(l,None,'Length',su)
if hasattr(obj.ViewObject,"Override"):
if obj.ViewObject.Override:
self.string = obj.ViewObject.Override.replace("$dim",\
@ -3899,7 +3900,7 @@ class _ViewProviderAngularDimension(_ViewProviderDraft):
if hasattr(obj.ViewObject,"Decimals"):
self.string = DraftGui.displayExternal(a,obj.ViewObject.Decimals,'Angle',su)
else:
self.string = DraftGui.displayExternal(a,getParam("dimPrecision",2),'Angle',su)
self.string = DraftGui.displayExternal(a,None,'Angle',su)
if obj.ViewObject.Override:
self.string = obj.ViewObject.Override.replace("$dim",\
self.string)

View File

@ -134,17 +134,22 @@ def makeFormatSpec(decimals=4,dim='Length'):
fmtSpec = "%." + str(decimals) + "f " + "??"
return fmtSpec
def displayExternal(internValue,decimals=4,dim='Length',showUnit=True):
def displayExternal(internValue,decimals=None,dim='Length',showUnit=True):
'''return an internal value (ie mm) Length or Angle converted for display according
to Units Schema in use.'''
from FreeCAD import Units
if dim == 'Length':
return FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Length).UserString
q = FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Length)
if (decimals == None) and showunit:
return q.UserString
conversion = q.getUserPreferred()[1]
uom = q.getUserPreferred()[2]
elif dim == 'Angle':
return FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Angle).UserString
else:
conversion = 1.0
if decimals == None:
decimals = 2
uom = "??"
if not showUnit:
uom = ""
@ -234,7 +239,6 @@ class DraftToolBar:
self.mask = None
self.alock = False
self.angle = None
self.DECIMALS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2)
self.x = 0
self.y = 0
self.z = 0
@ -1528,24 +1532,24 @@ class DraftToolBar:
# set widgets
if dp:
if self.mask in ['y','z']:
self.xValue.setText(displayExternal(dp.x,self.DECIMALS,'Length'))
self.xValue.setText(displayExternal(dp.x,None,'Length'))
else:
self.xValue.setText(displayExternal(dp.x,self.DECIMALS,'Length'))
self.xValue.setText(displayExternal(dp.x,None,'Length'))
if self.mask in ['x','z']:
self.yValue.setText(displayExternal(dp.y,self.DECIMALS,'Length'))
self.yValue.setText(displayExternal(dp.y,None,'Length'))
else:
self.yValue.setText(displayExternal(dp.y,self.DECIMALS,'Length'))
self.yValue.setText(displayExternal(dp.y,None,'Length'))
if self.mask in ['x','y']:
self.zValue.setText(displayExternal(dp.z,self.DECIMALS,'Length'))
self.zValue.setText(displayExternal(dp.z,None,'Length'))
else:
self.zValue.setText(displayExternal(dp.z,self.DECIMALS,'Length'))
self.zValue.setText(displayExternal(dp.z,None,'Length'))
# set length and angle
if last and dp and plane:
self.lengthValue.setText(displayExternal(dp.Length,self.DECIMALS,'Length'))
self.lengthValue.setText(displayExternal(dp.Length,None,'Length'))
a = math.degrees(-DraftVecUtils.angle(dp,plane.u,plane.axis))
if not self.angleLock.isChecked():
self.angleValue.setText(displayExternal(a,self.DECIMALS,'Angle'))
self.angleValue.setText(displayExternal(a,None,'Angle'))
if not mask:
# automask
if a in [0,180,-180]:
@ -1706,10 +1710,10 @@ class DraftToolBar:
if not isinstance(val, (int, float)): #??some code passes strings or ???
t = val
elif unit:
t= displayExternal(val,self.DECIMALS, unit)
t= displayExternal(val,None, unit)
else:
print("Error: setRadiusValue called for number without Dimension")
t = displayExternal(val,self.DECIMALS, None)
t = displayExternal(val,None, None)
self.radiusValue.setText(t)
self.radiusValue.setFocus()
@ -1779,9 +1783,9 @@ class DraftToolBar:
def changeLengthValue(self,d):
v = FreeCAD.Vector(self.x,self.y,self.z)
v = DraftVecUtils.scaleTo(v,d)
self.xValue.setText(displayExternal(v.x,self.DECIMALS,'Length'))
self.yValue.setText(displayExternal(v.y,self.DECIMALS,'Length'))
self.zValue.setText(displayExternal(v.z,self.DECIMALS,'Length'))
self.xValue.setText(displayExternal(v.x,None,'Length'))
self.yValue.setText(displayExternal(v.y,None,'Length'))
self.zValue.setText(displayExternal(v.z,None,'Length'))
def changeAngleValue(self,d):
v = FreeCAD.Vector(self.x,self.y,self.z)
@ -1789,9 +1793,9 @@ class DraftToolBar:
a = math.radians(d)+a
v=DraftVecUtils.rotate(v,a,FreeCAD.DraftWorkingPlane.axis)
self.angle = v
self.xValue.setText(displayExternal(v.x,self.DECIMALS,'Length'))
self.yValue.setText(displayExternal(v.y,self.DECIMALS,'Length'))
self.zValue.setText(displayExternal(v.z,self.DECIMALS,'Length'))
self.xValue.setText(displayExternal(v.x,None,'Length'))
self.yValue.setText(displayExternal(v.y,None,'Length'))
self.zValue.setText(displayExternal(v.z,None,'Length'))
if self.angleLock.isChecked():
FreeCADGui.Snapper.setAngle(self.angle)