From 7e310b2444edc3aef68aef9451c5eac853a4e8f7 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 4 Aug 2016 19:16:38 -0300 Subject: [PATCH] Draft: fixed wrong decimals in dimensions display + minor bugfix --- src/Mod/Draft/Draft.py | 29 +++++++++++++------------- src/Mod/Draft/DraftGui.py | 44 +++++++++++++++++++++------------------ 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index c8d891bbe3..bae90aa513 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -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) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index b4da7f1b53..734077f510 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -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)