Skip to content

Commit

Permalink
Draft: Fixed buggy units display in Draft widgets
Browse files Browse the repository at this point in the history
  • Loading branch information
yorikvanhavre committed Jul 3, 2016
1 parent 6c73ac7 commit 1e333f4
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 36 deletions.
6 changes: 4 additions & 2 deletions src/Base/UnitsSchemaImperial1.cpp
Expand Up @@ -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;
Expand All @@ -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 << "'";
Expand Down
50 changes: 21 additions & 29 deletions src/Mod/Draft/DraftGui.py
Expand Up @@ -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 = "??"
Expand Down Expand Up @@ -241,8 +235,9 @@ def __init__(self):
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:
Expand Down Expand Up @@ -392,13 +387,13 @@ def setupToolBar(self,task=False):
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
Expand All @@ -413,20 +408,20 @@ def setupToolBar(self,task=False):
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("")
Expand All @@ -447,12 +442,12 @@ def setupToolBar(self,task=False):
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)
Expand All @@ -472,7 +467,7 @@ def setupToolBar(self,task=False):
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)
Expand Down Expand Up @@ -771,10 +766,7 @@ def selectPlaneUi(self):
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)
Expand Down Expand Up @@ -869,7 +861,7 @@ def offsetUi(self):
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()

Expand Down Expand Up @@ -931,15 +923,15 @@ def trimUi(self,title=translate("draft","Trim")):
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()

def radiusUi(self):
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):
Expand All @@ -966,7 +958,7 @@ def SSizeUi(self):
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()

Expand All @@ -975,7 +967,7 @@ def STrackUi(self):
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()

Expand Down
8 changes: 3 additions & 5 deletions src/Mod/Draft/DraftTools.py
Expand Up @@ -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
Expand Down Expand Up @@ -1131,7 +1129,7 @@ def action(self,arg):
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
Expand Down Expand Up @@ -2345,7 +2343,7 @@ def action(self,arg):
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)
Expand Down

0 comments on commit 1e333f4

Please sign in to comment.