Only set properties if they have actually changed (the onChanged/updateData callbacks are called synchronously).

This commit is contained in:
Markus Lampert
2017-08-11 20:55:59 -07:00
committed by Yorik van Havre
parent e7e7ef20af
commit aec6cfe239
8 changed files with 106 additions and 71 deletions

View File

@@ -22,6 +22,7 @@
# * *
# ***************************************************************************
import ArchPanel
import FreeCAD
import DraftGeomUtils
import PathScripts.PathLog as PathLog
@@ -152,15 +153,16 @@ class ObjectOp(PathOp.ObjectOp):
def setupDepthsFrom(self, obj, features, baseobject):
zmax = None
zmin = None
for base,sub in features:
shape = base.Shape.getElement(sub)
bb = shape.BoundBox
# find the highes zmax and the highes zmin levels, those provide
# the safest values for StartDepth and FinalDepth
if zmax is None or zmax < bb.ZMax:
zmax = bb.ZMax
if zmin is None or zmin < bb.ZMin:
zmin = bb.ZMin
if not self.baseIsArchPanel(obj, baseobject):
for base,sub in features:
shape = base.Shape.getElement(sub)
bb = shape.BoundBox
# find the highes zmax and the highes zmin levels, those provide
# the safest values for StartDepth and FinalDepth
if zmax is None or zmax < bb.ZMax:
zmax = bb.ZMax
if zmin is None or zmin < bb.ZMin:
zmin = bb.ZMin
self.setDepths(obj, zmax, zmin, baseobject.Shape.BoundBox)
def setDepths(self, obj, zmax, zmin, bb):
@@ -176,8 +178,8 @@ class ObjectOp(PathOp.ObjectOp):
PathLog.debug("setDepths(%s): z=%.2f -> %.2f bb.z=%.2f -> %.2f" % (obj.Label, zmin, zmax, bb.ZMin, bb.ZMax))
obj.StartDepth = zmax
obj.ClearanceHeight = bb.ZMax + 5.0
obj.SafeHeight = bb.ZMax + 3.0
obj.ClearanceHeight = max(bb.ZMax, zmax) + 5.0
obj.SafeHeight = max(bb.ZMax, zmax) + 3.0
obj.FinalDepth = zmin
def findHoles(self, obj, baseobject):

View File

@@ -48,13 +48,13 @@ class TaskPanelHoleGeometryPage(PathOpGui.TaskPanelBaseGeometryPage):
self.form.baseList.blockSignals(True)
self.form.baseList.clearContents()
self.form.baseList.setRowCount(0)
for i, (base, subs) in enumerate(self.obj.Base):
for i, (base, subs) in enumerate(obj.Base):
for sub in subs:
self.form.baseList.insertRow(self.form.baseList.rowCount())
item = QtGui.QTableWidgetItem("%s.%s" % (base.Label, sub))
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
if self.obj.Proxy.isHoleEnabled(self.obj, base, sub):
if obj.Proxy.isHoleEnabled(obj, base, sub):
item.setCheckState(QtCore.Qt.Checked)
else:
item.setCheckState(QtCore.Qt.Unchecked)
@@ -64,7 +64,7 @@ class TaskPanelHoleGeometryPage(PathOpGui.TaskPanelBaseGeometryPage):
item.setData(self.DataObjectSub, sub)
self.form.baseList.setItem(self.form.baseList.rowCount()-1, 0, item)
item = QtGui.QTableWidgetItem("{:.3f}".format(self.obj.Proxy.holeDiameter(self.obj, base, sub)))
item = QtGui.QTableWidgetItem("{:.3f}".format(obj.Proxy.holeDiameter(obj, base, sub)))
item.setData(self.DataFeatureName, name)
item.setData(self.DataObject, base)
item.setData(self.DataObjectSub, sub)
@@ -143,7 +143,7 @@ class TaskPanelHoleGeometryPage(PathOpGui.TaskPanelBaseGeometryPage):
def updateData(self, obj, prop):
if prop in ['Base', 'Disabled']:
self.setFields(self.obj)
self.setFields(obj)
class TaskPanelOpPage(PathOpGui.TaskPanelPage):

View File

@@ -45,39 +45,42 @@ class TaskPanelOpPage(PathCircularHoleBaseGui.TaskPanelOpPage):
def getFields(self, obj):
PathLog.track()
self.obj.PeckDepth = FreeCAD.Units.Quantity(self.form.peckDepth.text()).Value
self.obj.RetractHeight = FreeCAD.Units.Quantity(self.form.retractHeight.text()).Value
self.obj.DwellTime = FreeCAD.Units.Quantity(self.form.dwellTime.text()).Value
self.updateInputField(obj, 'PeckDepth', self.form.peckDepth)
self.updateInputField(obj, 'RetractHeight', self.form.retractHeight)
self.updateInputField(obj, 'DwellTime', self.form.dwellTime)
self.obj.DwellEnabled = self.form.dwellEnabled.isChecked()
self.obj.PeckEnabled = self.form.peckEnabled.isChecked()
self.obj.AddTipLength = self.form.useTipLength.isChecked()
if obj.DwellEnabled != self.form.dwellEnabled.isChecked():
obj.DwellEnabled = self.form.dwellEnabled.isChecked()
if obj.PeckEnabled != self.form.peckEnabled.isChecked():
obj.PeckEnabled = self.form.peckEnabled.isChecked()
if obj.AddTipLength != self.form.useTipLength.isChecked():
obj.AddTipLength = self.form.useTipLength.isChecked()
self.updateToolController(obj, self.form.toolController)
def setFields(self, obj):
PathLog.track()
self.form.peckDepth.setText(FreeCAD.Units.Quantity(self.obj.PeckDepth.Value, FreeCAD.Units.Length).UserString)
self.form.retractHeight.setText(FreeCAD.Units.Quantity(self.obj.RetractHeight.Value, FreeCAD.Units.Length).UserString)
self.form.dwellTime.setText(str(self.obj.DwellTime))
self.form.peckDepth.setText(FreeCAD.Units.Quantity(obj.PeckDepth.Value, FreeCAD.Units.Length).UserString)
self.form.retractHeight.setText(FreeCAD.Units.Quantity(obj.RetractHeight.Value, FreeCAD.Units.Length).UserString)
self.form.dwellTime.setText(str(obj.DwellTime))
if self.obj.DwellEnabled:
if obj.DwellEnabled:
self.form.dwellEnabled.setCheckState(QtCore.Qt.Checked)
else:
self.form.dwellEnabled.setCheckState(QtCore.Qt.Unchecked)
if self.obj.PeckEnabled:
if obj.PeckEnabled:
self.form.peckEnabled.setCheckState(QtCore.Qt.Checked)
else:
self.form.peckEnabled.setCheckState(QtCore.Qt.Unchecked)
if self.obj.AddTipLength:
if obj.AddTipLength:
self.form.useTipLength.setCheckState(QtCore.Qt.Checked)
else:
self.form.useTipLength.setCheckState(QtCore.Qt.Unchecked)
self.setupToolController(self.obj, self.form.toolController)
self.setupToolController(obj, self.form.toolController)
def getSignalsForUpdate(self, obj):
signals = []

View File

@@ -43,11 +43,12 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
return FreeCADGui.PySideUic.loadUi(":/panels/PageOpEngraveEdit.ui")
def getFields(self, obj):
self.obj.StartVertex = self.form.startVertex.value()
if obj.StartVertex != self.form.startVertex.value():
obj.StartVertex = self.form.startVertex.value()
self.updateToolController(obj, self.form.toolController)
def setFields(self, obj):
self.form.startVertex.setValue(self.obj.StartVertex)
self.form.startVertex.setValue(obj.StartVertex)
self.setupToolController(obj, self.form.toolController)
def getSignalsForUpdate(self, obj):

View File

@@ -45,20 +45,23 @@ class TaskPanelOpPage(PathCircularHoleBaseGui.TaskPanelOpPage):
def getFields(self, obj):
PathLog.track()
self.obj.Direction = str(self.form.direction.currentText())
self.obj.StartSide = str(self.form.startSide.currentText())
self.obj.StepOver = self.form.stepOverPercent.value()
if obj.Direction != str(self.form.direction.currentText()):
obj.Direction = str(self.form.direction.currentText())
if obj.StartSide != str(self.form.startSide.currentText()):
obj.StartSide = str(self.form.startSide.currentText())
if obj.StepOver != self.form.stepOverPercent.value():
obj.StepOver = self.form.stepOverPercent.value()
self.updateToolController(obj, self.form.toolController)
def setFields(self, obj):
PathLog.track()
self.form.stepOverPercent.setValue(self.obj.StepOver)
self.selectInComboBox(self.obj.Direction, self.form.direction)
self.selectInComboBox(self.obj.StartSide, self.form.startSide)
self.form.stepOverPercent.setValue(obj.StepOver)
self.selectInComboBox(obj.Direction, self.form.direction)
self.selectInComboBox(obj.StartSide, self.form.startSide)
self.setupToolController(self.obj, self.form.toolController)
self.setupToolController(obj, self.form.toolController)
def getSignalsForUpdate(self, obj):
signals = []

View File

@@ -43,6 +43,8 @@ TaskPanelLayout = 0
if False:
PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
PathLog.trackModule(PathLog.thisModule())
else:
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
def translate(context, text, disambig=None):
return QtCore.QCoreApplication.translate(context, text, disambig)
@@ -140,6 +142,7 @@ class TaskPanelPage(object):
self.setFields(self.obj)
def pageRegisterSignalHandlers(self):
PathLog.info("pageRegisterSignalHandlers(%s)" % self.getTitle(self.obj))
for signal in self.getSignalsForUpdate(self.obj):
signal.connect(self.pageGetFields)
self.registerSignalHandlers(self.obj)
@@ -190,7 +193,13 @@ class TaskPanelPage(object):
def updateToolController(self, obj, combo):
tc = PathUtils.findToolController(obj, combo.currentText())
self.obj.ToolController = tc
if obj.ToolController != tc:
obj.ToolController = tc
def updateInputField(self, obj, prop, widget):
value = FreeCAD.Units.Quantity(widget.text()).Value
if getattr(obj, prop) != value:
setattr(obj, prop, value)
class TaskPanelBaseGeometryPage(TaskPanelPage):
DataObject = QtCore.Qt.ItemDataRole.UserRole
@@ -313,15 +322,20 @@ class TaskPanelHeightsPage(TaskPanelPage):
def getTitle(self, obj):
return translate("Path_AreaOp", "Heights")
def getFields(self, obj):
obj.SafeHeight = FreeCAD.Units.Quantity(self.form.safeHeight.text()).Value
obj.ClearanceHeight = FreeCAD.Units.Quantity(self.form.clearanceHeight.text()).Value
self.updateInputField(obj, 'SafeHeight', self.form.safeHeight)
self.updateInputField(obj, 'ClearanceHeight', self.form.clearanceHeight)
def setFields(self, obj):
self.form.safeHeight.setText(FreeCAD.Units.Quantity(obj.SafeHeight.Value, FreeCAD.Units.Length).UserString)
self.form.clearanceHeight.setText(FreeCAD.Units.Quantity(obj.ClearanceHeight.Value, FreeCAD.Units.Length).UserString)
def getSignalsForUpdate(self, obj):
return [self.form.safeHeight.editingFinished, self.form.clearanceHeight.editingFinished]
PathLog.info("getSignalsForUpdate(%s)" % obj.Label)
signals = []
signals.append(self.form.safeHeight.editingFinished)
signals.append(self.form.clearanceHeight.editingFinished)
return signals
def pageUpdateData(self, obj, prop):
PathLog.info("pageUpdateData(%s)" % prop)
if prop in ['SafeHeight', 'ClearanceHeight']:
self.setFields(obj)
@@ -344,12 +358,12 @@ class TaskPanelDepthsPage(TaskPanelPage):
return translate("PathOp", "Depths")
def getFields(self, obj):
obj.StartDepth = FreeCAD.Units.Quantity(self.form.startDepth.text()).Value
obj.FinalDepth = FreeCAD.Units.Quantity(self.form.finalDepth.text()).Value
self.updateInputField(obj, 'StartDepth', self.form.startDepth)
self.updateInputField(obj, 'FinalDepth', self.form.finalDepth)
if PathOp.FeatureStepDown & self.features:
obj.StepDown = FreeCAD.Units.Quantity(self.form.stepDown.text()).Value
self.updateInputField(obj, 'StepDown', self.form.stepDown)
if PathOp.FeatureFinishDepth & self.features:
obj.FinishDepth = FreeCAD.Units.Quantity(self.form.finishDepth.text()).Value
self.updateInputField(obj, 'FinishDepht', self.form.finishDepth)
def setFields(self, obj):
self.form.startDepth.setText(FreeCAD.Units.Quantity(obj.StartDepth.Value, FreeCAD.Units.Length).UserString)
self.form.finalDepth.setText(FreeCAD.Units.Quantity(obj.FinalDepth.Value, FreeCAD.Units.Length).UserString)

View File

@@ -51,20 +51,25 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
return form
def getFields(self, obj):
obj.CutMode = str(self.form.cutMode.currentText())
obj.StepOver = self.form.stepOverPercent.value()
obj.OffsetPattern = str(self.form.offsetPattern.currentText())
obj.ZigZagAngle = FreeCAD.Units.Quantity(self.form.zigZagAngle.text()).Value
if obj.CutMode != str(self.form.cutMode.currentText()):
obj.CutMode = str(self.form.cutMode.currentText())
if obj.StepOver != self.form.stepOverPercent.value():
obj.StepOver = self.form.stepOverPercent.value()
if obj.OffsetPattern != str(self.form.offsetPattern.currentText()):
obj.OffsetPattern = str(self.form.offsetPattern.currentText())
self.updateInputField(obj, 'ZigZagAngle', self.form.zigZagAngle)
self.updateToolController(obj, self.form.toolController)
if FeaturePocket & self.pocketFeatures():
obj.MaterialAllowance = FreeCAD.Units.Quantity(self.form.extraOffset.text()).Value
obj.UseStartPoint = self.form.useStartPoint.isChecked()
self.updateInputField(obj, 'MaterialAllowance', self.form.extraOffset)
if obj.UseStartPoint != self.form.useStartPoint.isChecked():
obj.UseStartPoint = self.form.useStartPoint.isChecked()
if FeatureFacing & self.pocketFeatures():
obj.PassExtension = FreeCAD.Units.Quantity(self.form.passExtension.text()).Value
obj.BoundaryShape = str(self.form.boundaryShape.currentText())
self.updateInputField(obj, 'PassExtension', self.form.passExtension)
if obj.BoundaryShape != str(self.form.boundaryShape.currentText()):
obj.BoundaryShape = str(self.form.boundaryShape.currentText())
def setFields(self, obj):
self.form.zigZagAngle.setText(FreeCAD.Units.Quantity(obj.ZigZagAngle, FreeCAD.Units.Angle).UserString)

View File

@@ -54,36 +54,43 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
return form
def getFields(self, obj):
self.obj.OffsetExtra = FreeCAD.Units.Quantity(self.form.extraOffset.text()).Value
self.obj.UseComp = self.form.useCompensation.isChecked()
self.obj.UseStartPoint = self.form.useStartPoint.isChecked()
self.obj.Direction = str(self.form.direction.currentText())
self.updateInputField(obj, 'OffsetExtra', self.form.extraOffset)
if obj.UseComp != self.form.useCompensation.isChecked():
obj.UseComp = self.form.useCompensation.isChecked()
if obj.UseStartPoint != self.form.useStartPoint.isChecked():
obj.UseStartPoint = self.form.useStartPoint.isChecked()
if obj.Direction != str(self.form.direction.currentText()):
obj.Direction = str(self.form.direction.currentText())
self.updateToolController(self.obj, self.form.toolController)
self.updateToolController(obj, self.form.toolController)
if FeatureSide & self.profileFeatures():
self.obj.Side = str(self.form.cutSide.currentText())
if obj.Side != str(self.form.cutSide.currentText()):
obj.Side = str(self.form.cutSide.currentText())
if FeatureProcessing & self.profileFeatures():
self.obj.processHoles = self.form.processHoles.isChecked()
self.obj.processPerimeter = self.form.processPerimeter.isChecked()
self.obj.processCircles = self.form.processCircles.isChecked()
if obj.processHoles != self.form.processHoles.isChecked():
obj.processHoles = self.form.processHoles.isChecked()
if obj.processPerimeter != self.form.processPerimeter.isChecked():
obj.processPerimeter = self.form.processPerimeter.isChecked()
if obj.processCircles != self.form.processCircles.isChecked():
obj.processCircles = self.form.processCircles.isChecked()
def setFields(self, obj):
self.form.extraOffset.setText(FreeCAD.Units.Quantity(self.obj.OffsetExtra.Value, FreeCAD.Units.Length).UserString)
self.form.useCompensation.setChecked(self.obj.UseComp)
self.form.useStartPoint.setChecked(self.obj.UseStartPoint)
self.form.extraOffset.setText(FreeCAD.Units.Quantity(obj.OffsetExtra.Value, FreeCAD.Units.Length).UserString)
self.form.useCompensation.setChecked(obj.UseComp)
self.form.useStartPoint.setChecked(obj.UseStartPoint)
self.selectInComboBox(self.obj.Direction, self.form.direction)
self.setupToolController(self.obj, self.form.toolController)
self.selectInComboBox(obj.Direction, self.form.direction)
self.setupToolController(obj, self.form.toolController)
if FeatureSide & self.profileFeatures():
self.selectInComboBox(self.obj.Side, self.form.cutSide)
self.selectInComboBox(obj.Side, self.form.cutSide)
if FeatureProcessing & self.profileFeatures():
self.form.processHoles.setChecked(self.obj.processHoles)
self.form.processPerimeter.setChecked(self.obj.processPerimeter)
self.form.processCircles.setChecked(self.obj.processCircles)
self.form.processHoles.setChecked(obj.processHoles)
self.form.processPerimeter.setChecked(obj.processPerimeter)
self.form.processCircles.setChecked(obj.processCircles)
def getSignalsForUpdate(self, obj):
signals = []