diff --git a/src/Mod/Path/PathScripts/PathCircularHoleBase.py b/src/Mod/Path/PathScripts/PathCircularHoleBase.py index 1854cee103..d47f8b8af8 100644 --- a/src/Mod/Path/PathScripts/PathCircularHoleBase.py +++ b/src/Mod/Path/PathScripts/PathCircularHoleBase.py @@ -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): diff --git a/src/Mod/Path/PathScripts/PathCircularHoleBaseGui.py b/src/Mod/Path/PathScripts/PathCircularHoleBaseGui.py index f83e3e7298..289631db1b 100644 --- a/src/Mod/Path/PathScripts/PathCircularHoleBaseGui.py +++ b/src/Mod/Path/PathScripts/PathCircularHoleBaseGui.py @@ -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): diff --git a/src/Mod/Path/PathScripts/PathDrillingGui.py b/src/Mod/Path/PathScripts/PathDrillingGui.py index 4aeabf9ef5..9e06ec66c8 100644 --- a/src/Mod/Path/PathScripts/PathDrillingGui.py +++ b/src/Mod/Path/PathScripts/PathDrillingGui.py @@ -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 = [] diff --git a/src/Mod/Path/PathScripts/PathEngraveGui.py b/src/Mod/Path/PathScripts/PathEngraveGui.py index c37988d8b9..8020ded165 100644 --- a/src/Mod/Path/PathScripts/PathEngraveGui.py +++ b/src/Mod/Path/PathScripts/PathEngraveGui.py @@ -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): diff --git a/src/Mod/Path/PathScripts/PathHelixGui.py b/src/Mod/Path/PathScripts/PathHelixGui.py index 62c75f9b3e..bd3979e935 100644 --- a/src/Mod/Path/PathScripts/PathHelixGui.py +++ b/src/Mod/Path/PathScripts/PathHelixGui.py @@ -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 = [] diff --git a/src/Mod/Path/PathScripts/PathOpGui.py b/src/Mod/Path/PathScripts/PathOpGui.py index dcee721c3d..ac3da86390 100644 --- a/src/Mod/Path/PathScripts/PathOpGui.py +++ b/src/Mod/Path/PathScripts/PathOpGui.py @@ -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) diff --git a/src/Mod/Path/PathScripts/PathPocketBaseGui.py b/src/Mod/Path/PathScripts/PathPocketBaseGui.py index 7b727392d5..67a1f198dd 100644 --- a/src/Mod/Path/PathScripts/PathPocketBaseGui.py +++ b/src/Mod/Path/PathScripts/PathPocketBaseGui.py @@ -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) diff --git a/src/Mod/Path/PathScripts/PathProfileBaseGui.py b/src/Mod/Path/PathScripts/PathProfileBaseGui.py index e3333887f3..96c4e34b44 100644 --- a/src/Mod/Path/PathScripts/PathProfileBaseGui.py +++ b/src/Mod/Path/PathScripts/PathProfileBaseGui.py @@ -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 = []