Draft: Switching to Units system

This commit is contained in:
Yorik van Havre 2014-04-16 15:35:03 -03:00
parent 97663851ec
commit f5627b33b2
3 changed files with 78 additions and 41 deletions

View File

@ -1,3 +1,4 @@
# -*- coding: utf8 -*-
#*************************************************************************** #***************************************************************************
#* * #* *
@ -175,6 +176,9 @@ class DraftToolBar:
self.isTaskOn = False self.isTaskOn = False
self.fillmode = Draft.getParam("fillmode",False) self.fillmode = Draft.getParam("fillmode",False)
self.mask = None self.mask = None
self.DECIMALS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2)
self.FORMAT = "%." + str(self.DECIMALS) + "f mm"
self.uiloader = FreeCADGui.UiLoader()
# set default to taskbar mode # set default to taskbar mode
if self.taskmode == None: if self.taskmode == None:
@ -240,8 +244,7 @@ class DraftToolBar:
return lineedit return lineedit
def _inputfield (self,name, layout, hide=True, width=None): def _inputfield (self,name, layout, hide=True, width=None):
ui = FreeCADGui.UiLoader() inputfield = self.uiloader.createWidget("Gui::InputField")
inputfield = ui.createWidget("Gui::InputField")
inputfield.setObjectName(name) inputfield.setObjectName(name)
if hide: inputfield.hide() if hide: inputfield.hide()
if not width: width = 800 if not width: width = 800
@ -306,14 +309,14 @@ class DraftToolBar:
self.layout.addLayout(yl) self.layout.addLayout(yl)
self.layout.addLayout(zl) self.layout.addLayout(zl)
self.labelx = self._label("labelx", xl) self.labelx = self._label("labelx", xl)
self.xValue = self._lineedit("xValue", xl, width=60) self.xValue = self._inputfield("xValue", xl) #width=60
self.xValue.setText("0.00") self.xValue.setText(self.FORMAT % 0)
self.labely = self._label("labely", yl) self.labely = self._label("labely", yl)
self.yValue = self._lineedit("yValue", yl, width=60) self.yValue = self._inputfield("yValue", yl)
self.yValue.setText("0.00") self.yValue.setText(self.FORMAT % 0)
self.labelz = self._label("labelz", zl) self.labelz = self._label("labelz", zl)
self.zValue = self._lineedit("zValue", zl, width=60) self.zValue = self._inputfield("zValue", zl)
self.zValue.setText("0.00") self.zValue.setText(self.FORMAT % 0)
self.textValue = self._lineedit("textValue", self.layout) self.textValue = self._lineedit("textValue", self.layout)
# shapestring # shapestring
@ -333,14 +336,20 @@ class DraftToolBar:
self.chooserButton.setText("...") self.chooserButton.setText("...")
# options # options
fl = QtGui.QHBoxLayout()
self.numFaces = self._spinbox("numFaces", self.layout, 3) self.layout.addLayout(fl)
self.offsetLabel = self._label("offsetlabel", self.layout) self.numFacesLabel = self._label("numfaceslabel", fl)
self.offsetValue = self._lineedit("offsetValue", self.layout, width=60) self.numFaces = self._spinbox("numFaces", fl, 3)
self.offsetValue.setText("0.00") ol = QtGui.QHBoxLayout()
self.labelRadius = self._label("labelRadius", self.layout) self.layout.addLayout(ol)
self.radiusValue = self._lineedit("radiusValue", self.layout, width=60) self.offsetLabel = self._label("offsetlabel", ol)
self.radiusValue.setText("0.00") self.offsetValue = self._inputfield("offsetValue", ol)
self.offsetValue.setText(self.FORMAT % 0)
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.isRelative = self._checkbox("isRelative",self.layout,checked=self.relativeMode) self.isRelative = self._checkbox("isRelative",self.layout,checked=self.relativeMode)
self.hasFill = self._checkbox("hasFill",self.layout,checked=self.fillmode) self.hasFill = self._checkbox("hasFill",self.layout,checked=self.fillmode)
self.continueCmd = self._checkbox("continueCmd",self.layout,checked=self.continueMode) self.continueCmd = self._checkbox("continueCmd",self.layout,checked=self.continueMode)
@ -365,6 +374,10 @@ class DraftToolBar:
QtGui.QSizePolicy.Expanding) QtGui.QSizePolicy.Expanding)
self.layout.addItem(spacerItem) self.layout.addItem(spacerItem)
QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("valueChanged(double)"),self.changeXValue)
QtCore.QObject.connect(self.yValue,QtCore.SIGNAL("valueChanged(double)"),self.changeYValue)
QtCore.QObject.connect(self.zValue,QtCore.SIGNAL("valueChanged(double)"),self.changeZValue)
QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("returnPressed()"),self.checkx) QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("returnPressed()"),self.checkx)
QtCore.QObject.connect(self.yValue,QtCore.SIGNAL("returnPressed()"),self.checky) QtCore.QObject.connect(self.yValue,QtCore.SIGNAL("returnPressed()"),self.checky)
QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("textEdited(QString)"),self.checkSpecialChars) QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("textEdited(QString)"),self.checkSpecialChars)
@ -467,6 +480,7 @@ class DraftToolBar:
style += "background-color: rgb(20,100,250) }" style += "background-color: rgb(20,100,250) }"
self.baseWidget.setStyleSheet(style) self.baseWidget.setStyleSheet(style)
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# language tools # language tools
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
@ -504,6 +518,7 @@ class DraftToolBar:
self.closeButton.setToolTip(translate("draft", "Finishes and closes the current line (C)")) self.closeButton.setToolTip(translate("draft", "Finishes and closes the current line (C)"))
self.wipeButton.setText(translate("draft", "&Wipe")) self.wipeButton.setText(translate("draft", "&Wipe"))
self.wipeButton.setToolTip(translate("draft", "Wipes the existing segments of this line and starts again from the last point (W)")) self.wipeButton.setToolTip(translate("draft", "Wipes the existing segments of this line and starts again from the last point (W)"))
self.numFacesLabel.setText(translate("draft", "Sides"))
self.numFaces.setToolTip(translate("draft", "Number of sides")) self.numFaces.setToolTip(translate("draft", "Number of sides"))
self.offsetLabel.setText(translate("draft", "Offset")) self.offsetLabel.setText(translate("draft", "Offset"))
self.xyButton.setText(translate("draft", "XY")) self.xyButton.setText(translate("draft", "XY"))
@ -557,7 +572,7 @@ class DraftToolBar:
# Interface modes # Interface modes
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
def taskUi(self,title,extra=None,icon="Draft_Draft"): def taskUi(self,title="Draft",extra=None,icon="Draft_Draft"):
if self.taskmode: if self.taskmode:
self.isTaskOn = True self.isTaskOn = True
todo.delay(FreeCADGui.Control.closeDialog,None) todo.delay(FreeCADGui.Control.closeDialog,None)
@ -694,6 +709,7 @@ class DraftToolBar:
self.setTitle(translate("draft", "None")) self.setTitle(translate("draft", "None"))
self.labelx.setText(translate("draft", "X")) self.labelx.setText(translate("draft", "X"))
self.hideXYZ() self.hideXYZ()
self.numFacesLabel.hide()
self.numFaces.hide() self.numFaces.hide()
self.isRelative.hide() self.isRelative.hide()
self.hasFill.hide() self.hasFill.hide()
@ -1019,10 +1035,13 @@ class DraftToolBar:
self.sourceCmd.offsetHandler(offset) self.sourceCmd.offsetHandler(offset)
else: else:
try: try:
numx=float(self.xValue.text()) #numx=float(self.xValue.text())
numy=float(self.yValue.text()) numx = self.x
numz=float(self.zValue.text()) #numy=float(self.yValue.text())
except ValueError: numy = self.y
#numz=float(self.zValue.text())
numz = self.z
except:
pass pass
else: else:
if self.pointcallback: if self.pointcallback:
@ -1271,22 +1290,21 @@ class DraftToolBar:
dp = plane.getLocalCoords(point) dp = plane.getLocalCoords(point)
# set widgets # set widgets
ds = "%." + str(FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2)) + "f"
if self.mask in ['y','z']: if self.mask in ['y','z']:
self.xValue.setText(ds % 0) self.xValue.setText(self.FORMAT % 0)
else: else:
if dp: if dp:
self.xValue.setText(ds % dp.x) self.xValue.setText(self.FORMAT % dp.x)
if self.mask in ['x','z']: if self.mask in ['x','z']:
self.yValue.setText(ds % 0) self.yValue.setText(self.FORMAT % 0)
else: else:
if dp: if dp:
self.yValue.setText(ds % dp.y) self.yValue.setText(self.FORMAT % dp.y)
if self.mask in ['x','y']: if self.mask in ['x','y']:
self.zValue.setText(ds % 0) self.zValue.setText(self.FORMAT % 0)
else: else:
if dp: if dp:
self.zValue.setText(ds % dp.z) self.zValue.setText(self.FORMAT % dp.z)
# set masks # set masks
if (mask == "x") or (self.mask == "x"): if (mask == "x") or (self.mask == "x"):
@ -1434,8 +1452,9 @@ class DraftToolBar:
self.addButton.setChecked(False) self.addButton.setChecked(False)
self.delButton.setChecked(False) self.delButton.setChecked(False)
def setRadiusValue(self,val): def setRadiusValue(self,val,unit="mm"):
self.radiusValue.setText("%.2f" % val) t = self.FORMAT.replace("mm",unit) % val
self.radiusValue.setText(t.decode("utf8".encode("latin1")))
self.radiusValue.setFocus() self.radiusValue.setFocus()
self.radiusValue.selectAll() self.radiusValue.selectAll()
@ -1479,6 +1498,15 @@ class DraftToolBar:
if hasattr(FreeCADGui,"Snapper"): if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.mask = val FreeCADGui.Snapper.mask = val
def changeXValue(self,d):
self.x = d
def changeYValue(self,d):
self.y = d
def changeZValue(self,d):
self.z = d
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# TaskView operations # TaskView operations
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------

View File

@ -813,13 +813,13 @@ class Snapper:
"setCursor(self,mode=None): sets or resets the cursor to the given mode or resets" "setCursor(self,mode=None): sets or resets the cursor to the given mode or resets"
if self.selectMode: if self.selectMode:
mw = FreeCADGui.getMainWindow() mw = FreeCADGui.getMainWindow()
for w in mw.findChildren(QtGui.QWidget): for w in mw.findChild(QtGui.QMdiArea).findChildren(QtGui.QWidget):
if w.metaObject().className() == "SoQtGLArea": if w.metaObject().className() == "SoQtGLArea":
w.unsetCursor() w.unsetCursor()
self.cursorMode = None self.cursorMode = None
elif not mode: elif not mode:
mw = FreeCADGui.getMainWindow() mw = FreeCADGui.getMainWindow()
for w in mw.findChildren(QtGui.QWidget): for w in mw.findChild(QtGui.QMdiArea).findChildren(QtGui.QWidget):
if w.metaObject().className() == "SoQtGLArea": if w.metaObject().className() == "SoQtGLArea":
w.unsetCursor() w.unsetCursor()
self.cursorMode = None self.cursorMode = None
@ -837,7 +837,7 @@ class Snapper:
qp.end() qp.end()
cur = QtGui.QCursor(newicon,8,8) cur = QtGui.QCursor(newicon,8,8)
mw = FreeCADGui.getMainWindow() mw = FreeCADGui.getMainWindow()
for w in mw.findChildren(QtGui.QWidget): for w in mw.findChild(QtGui.QMdiArea).findChildren(QtGui.QWidget):
if w.metaObject().className() == "SoQtGLArea": if w.metaObject().className() == "SoQtGLArea":
w.setCursor(cur) w.setCursor(cur)
self.cursorMode = mode self.cursorMode = mode

View File

@ -1,3 +1,5 @@
# -*- coding: utf8 -*-
#*************************************************************************** #***************************************************************************
#* * #* *
#* Copyright (c) 2009, 2010 * #* Copyright (c) 2009, 2010 *
@ -80,6 +82,12 @@ def msg(text=None,mode=None):
else: else:
FreeCAD.Console.PrintMessage(text) FreeCAD.Console.PrintMessage(text)
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
def selectObject(arg): def selectObject(arg):
'''this is a scene even handler, to be called from the Draft tools '''this is a scene even handler, to be called from the Draft tools
when they need to select an object''' when they need to select an object'''
@ -1065,7 +1073,7 @@ class Arc(Creator):
angle = DraftVecUtils.angle(plane.u, self.point.sub(self.center), plane.axis) angle = DraftVecUtils.angle(plane.u, self.point.sub(self.center), plane.axis)
else: angle = 0 else: angle = 0
self.linetrack.p2(DraftVecUtils.scaleTo(self.point.sub(self.center),self.rad).add(self.center)) self.linetrack.p2(DraftVecUtils.scaleTo(self.point.sub(self.center),self.rad).add(self.center))
self.ui.setRadiusValue(math.degrees(angle)) self.ui.setRadiusValue(math.degrees(angle),unit="°")
self.firstangle = angle self.firstangle = angle
else: # choose second angle else: # choose second angle
currentrad = DraftVecUtils.dist(self.point,self.center) currentrad = DraftVecUtils.dist(self.point,self.center)
@ -1073,7 +1081,7 @@ class Arc(Creator):
angle = DraftVecUtils.angle(plane.u, self.point.sub(self.center), plane.axis) angle = DraftVecUtils.angle(plane.u, self.point.sub(self.center), plane.axis)
else: angle = 0 else: angle = 0
self.linetrack.p2(DraftVecUtils.scaleTo(self.point.sub(self.center),self.rad).add(self.center)) self.linetrack.p2(DraftVecUtils.scaleTo(self.point.sub(self.center),self.rad).add(self.center))
self.ui.setRadiusValue(math.degrees(angle)) self.ui.setRadiusValue(math.degrees(angle),unit="°")
self.updateAngle(angle) self.updateAngle(angle)
self.arctrack.setApertureAngle(self.angle) self.arctrack.setApertureAngle(self.angle)
@ -1275,6 +1283,7 @@ class Polygon(Creator):
self.ui.pointUi(name) self.ui.pointUi(name)
self.ui.extUi() self.ui.extUi()
self.ui.numFaces.show() self.ui.numFaces.show()
self.ui.numFacesLabel.show()
self.altdown = False self.altdown = False
self.ui.sourceCmd = self self.ui.sourceCmd = self
self.arctrack = arcTracker() self.arctrack = arcTracker()
@ -2286,7 +2295,7 @@ class Rotate(Modifier):
if (currentrad != 0): if (currentrad != 0):
angle = DraftVecUtils.angle(plane.u, self.point.sub(self.center), plane.axis) angle = DraftVecUtils.angle(plane.u, self.point.sub(self.center), plane.axis)
else: angle = 0 else: angle = 0
self.ui.radiusValue.setText("%.2f" % math.degrees(angle)) self.ui.radiusValue.setText(formatUnit(math.degrees(angle)))
self.firstangle = angle self.firstangle = angle
self.ui.radiusValue.setFocus() self.ui.radiusValue.setFocus()
self.ui.radiusValue.selectAll() self.ui.radiusValue.selectAll()
@ -2303,7 +2312,7 @@ class Rotate(Modifier):
if self.ghost: if self.ghost:
self.ghost.rotate(plane.axis,sweep) self.ghost.rotate(plane.axis,sweep)
self.ghost.on() self.ghost.on()
self.ui.radiusValue.setText("%.2f" % math.degrees(sweep)) self.ui.radiusValue.setText(formatUnit(math.degrees(sweep)))
self.ui.radiusValue.setFocus() self.ui.radiusValue.setFocus()
self.ui.radiusValue.selectAll() self.ui.radiusValue.selectAll()
@ -2478,7 +2487,7 @@ class Offset(Modifier):
self.linetrack.on() self.linetrack.on()
self.linetrack.p1(self.point) self.linetrack.p1(self.point)
self.linetrack.p2(self.point.add(dist[0])) self.linetrack.p2(self.point.add(dist[0]))
self.ui.radiusValue.setText("%.2f" % dist[0].Length) self.ui.radiusValue.setText(formatUnit(dist[0].Length))
else: else:
self.dvec = None self.dvec = None
self.ghost.off() self.ghost.off()
@ -2703,7 +2712,7 @@ class Trimex(Modifier):
dist = self.extrude(self.shift) dist = self.extrude(self.shift)
else: else:
dist = self.redraw(self.point,self.snapped,self.shift,self.alt) dist = self.redraw(self.point,self.snapped,self.shift,self.alt)
self.ui.radiusValue.setText("%.2f" % dist) self.ui.radiusValue.setText(formatUnit(dist))
self.ui.radiusValue.setFocus() self.ui.radiusValue.setFocus()
self.ui.radiusValue.selectAll() self.ui.radiusValue.selectAll()