Draft: Fixed buggy units display in Draft widgets

This commit is contained in:
Yorik van Havre 2016-07-03 18:41:33 -03:00
parent 6c73ac750a
commit 1e333f4ef3
3 changed files with 28 additions and 36 deletions

View File

@ -193,7 +193,7 @@ QString UnitsSchemaImperialBuilding::schemaTranslate(Base::Quantity quant,double
if(unit == Unit::Length){
unitString = QString::fromLatin1("in");
factor = 25.4;
double inchValue = quant.getValue()/25.4;
double inchValue = std::abs(quant.getValue())/25.4;
int feet = inchValue/12;
double inchPart = inchValue - (double)feet*12;
int inches = (int)inchPart;
@ -203,10 +203,12 @@ QString UnitsSchemaImperialBuilding::schemaTranslate(Base::Quantity quant,double
fraction = 0.0;
}
// if the quantity is too small it is rounded to zero
if (quant.getValue() <= 1.5875)
if (std::abs(quant.getValue()) <= 1.5875)
return QString::fromLatin1("0");
// build representation
std::stringstream output;
if (quant.getValue() < 0)
output << "-";
// feet
if (feet > 0) {
output << feet << "'";

View File

@ -140,15 +140,9 @@ def displayExternal(internValue,decimals=4,dim='Length',showUnit=True):
from FreeCAD import Units
if dim == 'Length':
qty = FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Length)
pref = qty.getUserPreferred()
conversion = pref[1]
uom = pref[2]
return FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Length).UserString
elif dim == 'Angle':
qty = FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Angle)
pref=qty.getUserPreferred()
conversion = pref[1]
uom = pref[2]
return FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Angle).UserString
else:
conversion = 1.0
uom = "??"
@ -241,8 +235,9 @@ class DraftToolBar:
self.alock = False
self.angle = None
self.DECIMALS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2)
self.FORMAT = makeFormatSpec(self.DECIMALS,'Length')
self.AFORMAT = makeFormatSpec(self.DECIMALS,'Angle')
self.x = 0
self.y = 0
self.z = 0
self.uiloader = FreeCADGui.UiLoader()
if self.taskmode:
@ -392,13 +387,13 @@ class DraftToolBar:
self.layout.addLayout(bl)
self.labelx = self._label("labelx", xl)
self.xValue = self._inputfield("xValue", xl) #width=60
self.xValue.setText(self.FORMAT % 0)
self.xValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.labely = self._label("labely", yl)
self.yValue = self._inputfield("yValue", yl)
self.yValue.setText(self.FORMAT % 0)
self.yValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.labelz = self._label("labelz", zl)
self.zValue = self._inputfield("zValue", zl)
self.zValue.setText(self.FORMAT % 0)
self.zValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.pointButton = self._pushbutton("addButton", bl, icon="Draft_AddPoint", width=100)
# text
@ -413,20 +408,20 @@ class DraftToolBar:
self.layout.addLayout(al)
self.labellength = self._label("labellength", ll)
self.lengthValue = self._inputfield("lengthValue", ll)
self.lengthValue.setText(self.FORMAT % 0)
self.lengthValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.labelangle = self._label("labelangle", al)
self.angleLock = self._checkbox("angleLock",al,checked=self.alock)
self.angleValue = self._inputfield("angleValue", al)
self.angleValue.setText(self.AFORMAT % 0)
self.angleValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Angle).UserString)
# shapestring
self.labelSSize = self._label("labelSize", self.layout)
self.SSizeValue = self._inputfield("SSizeValue", self.layout) #, width=60)
self.SSizeValue.setText(self.FORMAT % 1.0)
self.SSizeValue.setText(FreeCAD.Units.Quantity(1,FreeCAD.Units.Length).UserString)
self.labelSTrack = self._label("labelTracking", self.layout)
self.STrackValue = self._inputfield("STrackValue", self.layout) #, width=60)
self.STrackValue.setText(self.FORMAT % 0)
self.STrackValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.labelSString = self._label("labelString", self.layout)
self.SStringValue = self._lineedit("SStringValue", self.layout)
self.SStringValue.setText("")
@ -447,12 +442,12 @@ class DraftToolBar:
self.layout.addLayout(ol)
self.offsetLabel = self._label("offsetlabel", ol)
self.offsetValue = self._inputfield("offsetValue", ol)
self.offsetValue.setText(self.FORMAT % 0)
self.offsetValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
rl = QtGui.QHBoxLayout()
self.layout.addLayout(rl)
self.labelRadius = self._label("labelRadius", rl)
self.radiusValue = self._inputfield("radiusValue", rl)
self.radiusValue.setText(self.FORMAT % 0)
self.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.isRelative = self._checkbox("isRelative",self.layout,checked=self.relativeMode)
self.hasFill = self._checkbox("hasFill",self.layout,checked=self.fillmode)
self.continueCmd = self._checkbox("continueCmd",self.layout,checked=self.continueMode)
@ -472,7 +467,7 @@ class DraftToolBar:
self.layout.addLayout(gl)
self.gridLabel = self._label("gridLabel", gl)
self.gridValue = self._inputfield("gridValue", gl)
self.gridValue.setText(self.FORMAT % 0)
self.gridValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
ml = QtGui.QHBoxLayout()
self.layout.addLayout(ml)
self.mainlineLabel = self._label("mainlineLabel", ml)
@ -771,10 +766,7 @@ class DraftToolBar:
self.gridLabel.show()
self.gridValue.show()
p = Draft.getParam("gridSpacing",1.0)
if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("UserSchema",0) == 5:
self.gridValue.setText(FreeCAD.Units.Quantity(p,FreeCAD.Units.Length).UserString)
else:
self.gridValue.setText(self.FORMAT % p)
self.gridValue.setText(FreeCAD.Units.Quantity(p,FreeCAD.Units.Length).UserString)
self.mainlineLabel.show()
self.mainlineValue.show()
p = Draft.getParam("gridEvery",10)
@ -869,7 +861,7 @@ class DraftToolBar:
self.isCopy.show()
self.occOffset.show()
self.labelRadius.setText(translate("draft","Distance"))
self.radiusValue.setText(self.FORMAT % 0)
self.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.radiusValue.setFocus()
self.radiusValue.selectAll()
@ -931,7 +923,7 @@ class DraftToolBar:
self.taskUi(title)
self.radiusUi()
self.labelRadius.setText(translate("draft","Distance"))
self.radiusValue.setText(self.FORMAT % 0)
self.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.radiusValue.setFocus()
self.radiusValue.selectAll()
@ -939,7 +931,7 @@ class DraftToolBar:
self.hideXYZ()
self.labelRadius.setText(translate("draft", "Radius"))
self.labelRadius.show()
self.radiusValue.setText(self.FORMAT % 0)
self.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.radiusValue.show()
def textUi(self):
@ -966,7 +958,7 @@ class DraftToolBar:
self.SStringValue.hide()
self.continueCmd.hide()
self.labelSSize.show()
self.SSizeValue.setText(self.FORMAT % 1.0)
self.SSizeValue.setText(FreeCAD.Units.Quantity(1,FreeCAD.Units.Length).UserString)
self.SSizeValue.show()
self.SSizeValue.setFocus()
@ -975,7 +967,7 @@ class DraftToolBar:
self.labelSSize.hide()
self.SSizeValue.hide()
self.labelSTrack.show()
self.STrackValue.setText(self.FORMAT % 0)
self.STrackValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
self.STrackValue.show()
self.STrackValue.setFocus()

View File

@ -89,9 +89,7 @@ def msg(text=None,mode=None):
def formatUnit(exp,unit="mm"):
'''returns a formatting string to set a number to the correct unit'''
d = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2)
f = "%." + str(d) + "f " + unit
return f % exp
return FreeCAD.Units.Quantity(exp,FreeCAD.Units.Length).UserString
def selectObject(arg):
'''this is a scene even handler, to be called from the Draft tools
@ -1131,7 +1129,7 @@ class Arc(Creator):
self.drawArc()
else:
self.ui.labelRadius.setText("Start angle")
self.ui.radiusValue.setText(self.ui.AFORMAT % 0)
self.ui.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Angle).UserString)
self.linetrack.p1(self.center)
self.linetrack.on()
self.step = 2
@ -2345,7 +2343,7 @@ class Rotate(Modifier):
self.center = self.point
self.node = [self.point]
self.ui.radiusUi()
self.ui.radiusValue.setText(self.ui.AFORMAT % 0)
self.ui.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Angle).UserString)
self.ui.hasFill.hide()
self.ui.labelRadius.setText("Base angle")
self.arctrack.setCenter(self.center)