| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import FreeCAD |
| | import FreeCADGui |
| | import Path |
| | import Path.Base.Gui.Util as PathGuiUtil |
| | import Path.Op.Gui.Base as PathOpGui |
| | import Path.Op.Pocket as PathPocket |
| | import PathGui |
| |
|
| | __title__ = "CAM Pocket Base Operation UI" |
| | __author__ = "sliptonic (Brad Collette)" |
| | __url__ = "https://www.freecad.org" |
| | __doc__ = "Base page controller and command implementation for pocket operations." |
| |
|
| | if False: |
| | Path.Log.setLevel(Path.Log.Level.DEBUG, Path.Log.thisModule()) |
| | Path.Log.trackModule(Path.Log.thisModule()) |
| | else: |
| | Path.Log.setLevel(Path.Log.Level.INFO, Path.Log.thisModule()) |
| |
|
| | translate = FreeCAD.Qt.translate |
| |
|
| | FeaturePocket = 0x01 |
| | FeatureFacing = 0x02 |
| | FeatureOutline = 0x04 |
| | FeatureRestMachining = 0x08 |
| |
|
| |
|
| | class TaskPanelOpPage(PathOpGui.TaskPanelPage): |
| | """Page controller class for pocket operations, supports: |
| | FeaturePocket ... used for pocketing operation |
| | FeatureFacing ... used for face milling operation |
| | FeatureOutline ... used for pocket-shape operation |
| | """ |
| |
|
| | def pocketFeatures(self): |
| | """pocketFeatures() ... return which features of the UI are supported by the operation. |
| | FeaturePocket ... used for pocketing operation |
| | FeatureFacing ... used for face milling operation |
| | FeatureOutline ... used for pocket-shape operation |
| | Must be overwritten by subclasses""" |
| | pass |
| |
|
| | def getForm(self): |
| | """getForm() ... returns UI, adapted to the results from pocketFeatures()""" |
| | form = FreeCADGui.PySideUic.loadUi(":/panels/PageOpPocketFullEdit.ui") |
| |
|
| | comboToPropertyMap = [ |
| | ("cutMode", "CutMode"), |
| | ("clearingPattern", "ClearingPattern"), |
| | ] |
| | enumTups = PathPocket.ObjectPocket.pocketPropertyEnumerations(dataType="raw") |
| |
|
| | self.populateCombobox(form, enumTups, comboToPropertyMap) |
| |
|
| | if not FeatureFacing & self.pocketFeatures(): |
| | form.facingWidget.hide() |
| | form.clearEdges.hide() |
| |
|
| | if FeaturePocket & self.pocketFeatures(): |
| | form.extraOffset_label.setText(translate("PathPocket", "Pass Extension")) |
| | form.extraOffset.setToolTip( |
| | translate( |
| | "PathPocket", |
| | "The distance the facing operation will extend beyond the boundary shape.", |
| | ) |
| | ) |
| |
|
| | if not (FeatureOutline & self.pocketFeatures()): |
| | form.useOutline.hide() |
| |
|
| | if not (FeatureRestMachining & self.pocketFeatures()): |
| | form.useRestMachining.hide() |
| |
|
| | return form |
| |
|
| | def updateMinTravel(self, obj, setModel=True): |
| | if setModel and obj.MinTravel != self.form.minTravel.isChecked(): |
| | obj.MinTravel = self.form.minTravel.isChecked() |
| |
|
| | def updateZigZagAngle(self, obj, setModel=True): |
| | if obj.ClearingPattern in ["Offset"]: |
| | self.form.zigZagAngle.setEnabled(False) |
| | else: |
| | self.form.zigZagAngle.setEnabled(True) |
| |
|
| | if setModel: |
| | PathGuiUtil.updateInputField(obj, "ZigZagAngle", self.form.zigZagAngle) |
| |
|
| | def getFields(self, obj): |
| | """getFields(obj) ... transfers values from UI to obj's properties""" |
| | if obj.CutMode != str(self.form.cutMode.currentData()): |
| | obj.CutMode = str(self.form.cutMode.currentData()) |
| | if obj.StepOver != self.form.stepOverPercent.value(): |
| | obj.StepOver = self.form.stepOverPercent.value() |
| | if obj.ClearingPattern != str(self.form.clearingPattern.currentData()): |
| | obj.ClearingPattern = str(self.form.clearingPattern.currentData()) |
| |
|
| | PathGuiUtil.updateInputField(obj, "ExtraOffset", self.form.extraOffset) |
| | self.updateToolController(obj, self.form.toolController) |
| | self.updateCoolant(obj, self.form.coolantController) |
| | self.updateZigZagAngle(obj) |
| |
|
| | if obj.UseStartPoint != self.form.useStartPoint.isChecked(): |
| | obj.UseStartPoint = self.form.useStartPoint.isChecked() |
| |
|
| | if obj.UseRestMachining != self.form.useRestMachining.isChecked(): |
| | obj.UseRestMachining = self.form.useRestMachining.isChecked() |
| |
|
| | if FeatureOutline & self.pocketFeatures(): |
| | if obj.UseOutline != self.form.useOutline.isChecked(): |
| | obj.UseOutline = self.form.useOutline.isChecked() |
| |
|
| | self.updateMinTravel(obj) |
| |
|
| | if FeatureFacing & self.pocketFeatures(): |
| | print(obj.BoundaryShape) |
| | print(self.form.boundaryShape.currentText()) |
| | print(self.form.boundaryShape.currentData()) |
| | if obj.BoundaryShape != str(self.form.boundaryShape.currentData()): |
| | obj.BoundaryShape = str(self.form.boundaryShape.currentData()) |
| | if obj.ClearEdges != self.form.clearEdges.isChecked(): |
| | obj.ClearEdges = self.form.clearEdges.isChecked() |
| |
|
| | def setFields(self, obj): |
| | """setFields(obj) ... transfers obj's property values to UI""" |
| | self.form.stepOverPercent.setValue(obj.StepOver) |
| | self.form.extraOffset.setText( |
| | FreeCAD.Units.Quantity(obj.ExtraOffset.Value, FreeCAD.Units.Length).UserString |
| | ) |
| | self.form.useStartPoint.setChecked(obj.UseStartPoint) |
| | self.form.useRestMachining.setChecked(obj.UseRestMachining) |
| | if FeatureOutline & self.pocketFeatures(): |
| | self.form.useOutline.setChecked(obj.UseOutline) |
| |
|
| | self.form.zigZagAngle.setText( |
| | FreeCAD.Units.Quantity(obj.ZigZagAngle, FreeCAD.Units.Angle).UserString |
| | ) |
| | self.updateZigZagAngle(obj, False) |
| |
|
| | self.form.minTravel.setChecked(obj.MinTravel) |
| | self.updateMinTravel(obj, False) |
| |
|
| | self.selectInComboBox(obj.ClearingPattern, self.form.clearingPattern) |
| | self.selectInComboBox(obj.CutMode, self.form.cutMode) |
| | self.setupToolController(obj, self.form.toolController) |
| | self.setupCoolant(obj, self.form.coolantController) |
| |
|
| | if FeatureFacing & self.pocketFeatures(): |
| | self.selectInComboBox(obj.BoundaryShape, self.form.boundaryShape) |
| | self.form.clearEdges.setChecked(obj.ClearEdges) |
| |
|
| | def getSignalsForUpdate(self, obj): |
| | """getSignalsForUpdate(obj) ... return list of signals for updating obj""" |
| | signals = [] |
| |
|
| | signals.append(self.form.cutMode.currentIndexChanged) |
| | signals.append(self.form.clearingPattern.currentIndexChanged) |
| | signals.append(self.form.stepOverPercent.editingFinished) |
| | signals.append(self.form.zigZagAngle.editingFinished) |
| | signals.append(self.form.toolController.currentIndexChanged) |
| | signals.append(self.form.extraOffset.editingFinished) |
| | signals.append(self.form.useStartPoint.clicked) |
| | signals.append(self.form.useRestMachining.clicked) |
| | signals.append(self.form.useOutline.clicked) |
| | signals.append(self.form.minTravel.clicked) |
| | signals.append(self.form.coolantController.currentIndexChanged) |
| |
|
| | if FeatureFacing & self.pocketFeatures(): |
| | signals.append(self.form.boundaryShape.currentIndexChanged) |
| | signals.append(self.form.clearEdges.clicked) |
| |
|
| | return signals |
| |
|