diff --git a/src/Mod/Path/Gui/Resources/Path.qrc b/src/Mod/Path/Gui/Resources/Path.qrc index ff7c5a6786..5131c9e695 100644 --- a/src/Mod/Path/Gui/Resources/Path.qrc +++ b/src/Mod/Path/Gui/Resources/Path.qrc @@ -54,6 +54,7 @@ panels/DlgJobChooser.ui panels/DlgJobCreate.ui panels/DlgSelectPostProcessor.ui + panels/DlgToolControllerEdit.ui panels/DlgToolCopy.ui panels/DlgTCChooser.ui panels/DogboneEdit.ui diff --git a/src/Mod/Path/Gui/Resources/panels/DlgToolControllerEdit.ui b/src/Mod/Path/Gui/Resources/panels/DlgToolControllerEdit.ui new file mode 100644 index 0000000000..85f2636228 --- /dev/null +++ b/src/Mod/Path/Gui/Resources/panels/DlgToolControllerEdit.ui @@ -0,0 +1,534 @@ + + + Dialog + + + + 0 + 0 + 492 + 648 + + + + Dialog + + + + + + + Controller + + + + + + Controller Name / Tool Number + + + + + + false + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Horiz. Feed + + + + + + + Vert. Feed + + + + + + + Horiz Rapid + + + + + + + Vert Rapid + + + + + + + 0.000000000000000 + + + mm/s + + + + + + + 0.000000000000000 + + + mm/s + + + + + + + 0.000000000000000 + + + mm/s + + + + + + + 0.000000000000000 + + + mm/s + + + + + + + + + + Spindle + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + + Forward + + + + + Reverse + + + + + + + + 0.000000000000000 + + + 100000.000000000000000 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Tool + + + + + + Tool Properties + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Name + + + + + + + 50 + + + Display Name + + + + + + + Type + + + + + + + 6 + + + + Drill + + + + + CenterDrill + + + + + CounterSink + + + + + CounterBore + + + + + Reamer + + + + + Tap + + + + + EndMill + + + + + SlotCutter + + + + + BallEndMill + + + + + ChamferMill + + + + + CornerRound + + + + + Engraver + + + + + + + + Material + + + + + + + + HighSpeedSteel + + + + + HighCarbonSteel + + + + + CastAlloy + + + + + Carbide + + + + + Ceramics + + + + + Diamond + + + + + Sialon + + + + + + + + Diameter + + + + + + + Length Offset + + + + + + + Flat Radius + + + + + + + Corner Radius + + + + + + + Cutting Edge Angle + + + + + + + Cutting Edge Height + + + + + + + 0 mm + + + 0.125000000000000 + + + 100.000000000000000 + + + 0.000000000000000 + + + mm + + + + + + + 0 mm + + + 100.000000000000000 + + + 0.000000000000000 + + + mm + + + + + + + 0 mm + + + 100.000000000000000 + + + 0.000000000000000 + + + mm + + + + + + + 0 mm + + + 100.000000000000000 + + + 0.000000000000000 + + + mm + + + + + + + 0 mm + + + 100.000000000000000 + + + 0.000000000000000 + + + mm + + + + + + + ° + + + + + + + + + + QFrame::WinPanel + + + Any modifications only affect this ToolController! + + + Qt::AlignCenter + + + true + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + Gui::InputField + QLineEdit +
Gui/InputField.h
+
+
+ + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/Mod/Path/Gui/Resources/panels/PathEdit.ui b/src/Mod/Path/Gui/Resources/panels/PathEdit.ui index 9cd9925915..803ae15cb6 100644 --- a/src/Mod/Path/Gui/Resources/panels/PathEdit.ui +++ b/src/Mod/Path/Gui/Resources/panels/PathEdit.ui @@ -86,8 +86,8 @@ 0 0 - 378 - 477 + 294 + 309 @@ -225,8 +225,8 @@ 0 0 - 378 - 403 + 368 + 399 @@ -443,8 +443,8 @@ 0 0 - 378 - 403 + 142 + 41 @@ -468,8 +468,8 @@ 0 0 - 378 - 403 + 142 + 41 @@ -532,12 +532,18 @@ - H-Feed + Feed + + + - V-Feed + Feed + + + @@ -744,6 +750,9 @@ + + + @@ -751,9 +760,6 @@ - - - @@ -782,6 +788,46 @@ + + + + Rapid Speed + + + true + + + false + + + + + + Horizontal + + + + + + + + + + + + + Vertical + + + + + label_15 + label_3 + lineEdit + lineEdit_2 + label_4 + + diff --git a/src/Mod/Path/PathScripts/PathAreaOp.py b/src/Mod/Path/PathScripts/PathAreaOp.py index cddc6b4498..a360175f17 100644 --- a/src/Mod/Path/PathScripts/PathAreaOp.py +++ b/src/Mod/Path/PathScripts/PathAreaOp.py @@ -132,7 +132,7 @@ class ObjectOp(PathOp.ObjectOp): obj.Side = "Inside" except Exception as e: - PathLog.error(translate("PatArea", "Error in calculating depths: %s" % e)) + PathLog.error(translate("PatArea", "Error in calculating depths: %s") % e) obj.StartDepth = 5.0 obj.ClearanceHeight = 10.0 obj.SafeHeight = 8.0 diff --git a/src/Mod/Path/PathScripts/PathJobGui.py b/src/Mod/Path/PathScripts/PathJobGui.py index c768f08502..c483b9408e 100644 --- a/src/Mod/Path/PathScripts/PathJobGui.py +++ b/src/Mod/Path/PathScripts/PathJobGui.py @@ -96,6 +96,10 @@ class TaskPanel: self.deleteOnReject = deleteOnReject self.form = FreeCADGui.PySideUic.loadUi(":/panels/PathEdit.ui") + vUnit = FreeCAD.Units.Quantity(1, FreeCAD.Units.Velocity).getUserPreferred()[2] + self.form.toolControllerList.horizontalHeaderItem(1).setText('#') + self.form.toolControllerList.horizontalHeaderItem(2).setText(vUnit) + self.form.toolControllerList.horizontalHeaderItem(3).setText(vUnit) self.form.toolControllerList.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.Stretch) self.form.toolControllerList.resizeColumnsToContents() @@ -110,7 +114,6 @@ class TaskPanel: for o in PathJob.ObjectJob.baseCandidates(): self.form.infoModel.addItem(o.Label, o) - self.postProcessorDefaultTooltip = self.form.postProcessor.toolTip() self.postProcessorArgsDefaultTooltip = self.form.postProcessorArguments.toolTip() diff --git a/src/Mod/Path/PathScripts/PathToolController.py b/src/Mod/Path/PathScripts/PathToolController.py index 4ebaa10654..a316ed9de1 100644 --- a/src/Mod/Path/PathScripts/PathToolController.py +++ b/src/Mod/Path/PathScripts/PathToolController.py @@ -35,7 +35,7 @@ import xml.etree.ElementTree as xml from FreeCAD import Units from PySide import QtCore, QtGui -if True: +if False: PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) PathLog.trackModule(PathLog.thisModule()) else: @@ -190,8 +190,7 @@ class ViewProvider: def setEdit(self, vobj, mode): # this is executed when the object is double-clicked in the tree FreeCADGui.Control.closeDialog() - taskd = TaskPanel() - taskd.obj = vobj.Object + taskd = TaskPanel(vobj.Object) FreeCADGui.Control.showDialog(taskd) taskd.setupUi() @@ -252,109 +251,13 @@ class CommandPathToolController: PathLog.track() Create() -class TaskPanel: - def __init__(self): - self.form = FreeCADGui.PySideUic.loadUi(":/panels/ToolControl.ui") - #self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/ToolControl.ui") - self.editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui") +class ToolControllerEditor: - self.updating = False - self.toolrep = None - - def accept(self): - self.getFields() - - FreeCADGui.ActiveDocument.resetEdit() - FreeCADGui.Control.closeDialog() - if self.toolrep is not None: - FreeCAD.ActiveDocument.removeObject(self.toolrep.Name) - FreeCAD.ActiveDocument.recompute() - FreeCADGui.Selection.removeObserver(self.s) - - def reject(self): - FreeCADGui.Control.closeDialog() - if self.toolrep is not None: - FreeCAD.ActiveDocument.removeObject(self.toolrep.Name) - FreeCAD.ActiveDocument.recompute() - FreeCADGui.Selection.removeObserver(self.s) - - def getFields(self): - if self.obj: - if hasattr(self.obj, "Label"): - self.obj.Label = self.form.tcoName.text() - if hasattr(self.obj, "VertFeed"): - self.obj.VertFeed = self.form.vertFeed.text() - if hasattr(self.obj, "HorizFeed"): - self.obj.HorizFeed = self.form.horizFeed.text() - if hasattr(self.obj, "VertRapid"): - self.obj.VertRapid = self.form.vertRapid.text() - if hasattr(self.obj, "HorizRapid"): - self.obj.HorizRapid = self.form.horizRapid.text() - if hasattr(self.obj, "ToolNumber"): - self.obj.ToolNumber = self.form.uiToolNum.value() - if hasattr(self.obj, "SpindleSpeed"): - self.obj.SpindleSpeed = self.form.spindleSpeed.value() - if hasattr(self.obj, "SpindleDir"): - self.obj.SpindleDir = str(self.form.cboSpindleDirection.currentText()) - - self.obj.Proxy.execute(self.obj) - - def setFields(self): - self.form.tcoName.setText(self.obj.Label) - self.form.uiToolNum.setValue(self.obj.ToolNumber) - self.form.vertFeed.setText(self.obj.VertFeed.UserString) - self.form.horizFeed.setText(self.obj.HorizFeed.UserString) - self.form.vertRapid.setText(self.obj.VertRapid.UserString) - self.form.horizRapid.setText(self.obj.HorizRapid.UserString) - - self.form.spindleSpeed.setValue(self.obj.SpindleSpeed) - - index = self.form.cboSpindleDirection.findText(self.obj.SpindleDir, QtCore.Qt.MatchFixedString) - if index >= 0: - self.form.cboSpindleDirection.setCurrentIndex(index) - - try: - tool = self.obj.Tool - self.form.txtToolType.setText(tool.ToolType) - self.form.txtToolMaterial.setText(tool.Material) - diam = Units.Quantity(tool.Diameter, FreeCAD.Units.Length) - self.form.txtToolDiameter.setText(diam.getUserPreferred()[0]) - self.form.txtToolName.setText(tool.Name) - except: - self.form.txtToolType.setText("UNDEFINED") - self.form.txtToolMaterial.setText("UNDEFINED") - self.form.txtToolDiameter.setText("UNDEFINED") - - radius = tool.Diameter / 2 - length = tool.CuttingEdgeHeight - t = Part.makeCylinder(radius, length) - self.toolrep.Shape = t - - def open(self): - self.s = SelObserver() - # install the function mode resident - FreeCADGui.Selection.addObserver(self.s) - - def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok) - - def edit(self, item, column): - if not self.updating: - self.resetObject() - - def resetObject(self, remove=None): - "transfers the values from the widget to the object" - FreeCAD.ActiveDocument.recompute() - - def setupUi(self): - self.form.tcoName.editingFinished.connect(self.getFields) - self.form.cmdEditLocal.clicked.connect(self.editTool) - - t = Part.makeCylinder(1, 1) - self.toolrep = FreeCAD.ActiveDocument.addObject("Part::Feature", "tool") - self.toolrep.Shape = t - - self.setFields() + def __init__(self, obj, asDialog): + self.form = FreeCADGui.PySideUic.loadUi(":/panels/DlgToolControllerEdit.ui") + if not asDialog: + self.form.buttonBox.hide() + self.obj = obj def getType(self, tooltype): "gets a combobox index number for a given type or viceversa" @@ -381,45 +284,135 @@ class TaskPanel: else: return matslist[material] - def editTool(self): - toolnum = self.obj.ToolNumber + def updateUi(self): + PathLog.info("updateUI") + tc = self.obj + self.form.tcName.setText(tc.Label) + self.form.tcNumber.setValue(tc.ToolNumber) + self.form.horizFeed.setText(tc.HorizFeed.UserString) + self.form.vertFeed.setText(tc.VertFeed.UserString) + self.form.horizRapid.setText(tc.HorizRapid.UserString) + self.form.vertRapid.setText(tc.VertRapid.UserString) + self.form.spindleSpeed.setValue(tc.SpindleSpeed) + index = self.form.spindleDirection.findText(tc.SpindleDir, QtCore.Qt.MatchFixedString) + if index >= 0: + self.form.spindleDirection.setCurrentIndex(index) + + self.form.toolName.setText(tc.Tool.Name) + self.form.toolType.setCurrentIndex(self.getType(tc.Tool.ToolType)) + self.form.toolMaterial.setCurrentIndex(self.getMaterial(tc.Tool.Material)) + self.form.toolDiameter.setText(FreeCAD.Units.Quantity(tc.Tool.Diameter, FreeCAD.Units.Length).UserString) + self.form.toolLengthOffset.setText(FreeCAD.Units.Quantity(tc.Tool.LengthOffset, FreeCAD.Units.Length).UserString) + self.form.toolFlatRadius.setText(FreeCAD.Units.Quantity(tc.Tool.FlatRadius, FreeCAD.Units.Length).UserString) + self.form.toolCornerRadius.setText(FreeCAD.Units.Quantity(tc.Tool.CornerRadius, FreeCAD.Units.Length).UserString) + self.form.toolCuttingEdgeAngle.setText(FreeCAD.Units.Quantity(tc.Tool.CuttingEdgeAngle, FreeCAD.Units.Angle).UserString) + self.form.toolCuttingEdgeHeight.setText(FreeCAD.Units.Quantity(tc.Tool.CuttingEdgeHeight, FreeCAD.Units.Length).UserString) + + def updateToolController(self): + PathLog.info("updateToolController") + tc = self.obj + try: + tc.Label = self.form.tcName.text() + tc.ToolNumber = self.form.tcNumber.value() + tc.HorizFeed = self.form.horizFeed.text() + tc.VertFeed = self.form.vertFeed.text() + tc.HorizRapid = self.form.horizRapid.text() + tc.VertRapid = self.form.vertRapid.text() + tc.SpindleSpeed = self.form.spindleSpeed.value() + tc.SpindleDir = self.form.spindleDirection.currentText() + + tc.Tool.Name = str(self.form.toolName.text()) + tc.Tool.ToolType = self.getType(self.form.toolType.currentIndex()) + tc.Tool.Material = self.getMaterial(self.form.toolMaterial.currentIndex()) + tc.Tool.Diameter = FreeCAD.Units.parseQuantity(self.form.toolDiameter.text()) + tc.Tool.LengthOffset = FreeCAD.Units.parseQuantity(self.form.toolLengthOffset.text()) + tc.Tool.FlatRadius = FreeCAD.Units.parseQuantity(self.form.toolFlatRadius.text()) + tc.Tool.CornerRadius = FreeCAD.Units.parseQuantity(self.form.toolCornerRadius.text()) + tc.Tool.CuttingEdgeAngle = FreeCAD.Units.Quantity(self.form.toolCuttingEdgeAngle.text()) + tc.Tool.CuttingEdgeHeight = FreeCAD.Units.parseQuantity(self.form.toolCuttingEdgeHeight.text()) + except Exception as e: + PathLog.error(translate("PathToolController", "Error updating TC: %s") % e) + + + def refresh(self): + self.form.blockSignals(True) + self.updateToolController() + self.updateUi() + self.form.blockSignals(False) + + def setupUi(self): + self.form.tcName.editingFinished.connect(self.refresh) + self.form.horizFeed.editingFinished.connect(self.refresh) + self.form.vertFeed.editingFinished.connect(self.refresh) + self.form.horizRapid.editingFinished.connect(self.refresh) + self.form.vertRapid.editingFinished.connect(self.refresh) + + self.form.toolName.editingFinished.connect(self.refresh) + self.form.toolDiameter.editingFinished.connect(self.refresh) + self.form.toolLengthOffset.editingFinished.connect(self.refresh) + self.form.toolFlatRadius.editingFinished.connect(self.refresh) + self.form.toolCornerRadius.editingFinished.connect(self.refresh) + self.form.toolCuttingEdgeAngle.editingFinished.connect(self.refresh) + self.form.toolCuttingEdgeHeight.editingFinished.connect(self.refresh) + +class TaskPanel: + + def __init__(self, obj): + self.editor = ToolControllerEditor(obj, False) + self.form = self.editor.form + self.updating = False + self.toolrep = None + self.obj = obj + + def accept(self): + self.getFields() + + FreeCADGui.ActiveDocument.resetEdit() + FreeCADGui.Control.closeDialog() + if self.toolrep is not None: + FreeCAD.ActiveDocument.removeObject(self.toolrep.Name) + FreeCAD.ActiveDocument.recompute() + + def reject(self): + FreeCADGui.Control.closeDialog() + if self.toolrep is not None: + FreeCAD.ActiveDocument.removeObject(self.toolrep.Name) + FreeCAD.ActiveDocument.recompute() + + def getFields(self): + self.editor.updateToolController() + self.obj.Proxy.execute(self.obj) + + def setFields(self): + self.editor.updateUi() + tool = self.obj.Tool - editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui") + radius = tool.Diameter / 2 + length = tool.CuttingEdgeHeight + t = Part.makeCylinder(radius, length) + self.toolrep.Shape = t - editform.NameField.setText(tool.Name) - editform.TypeField.setCurrentIndex(self.getType(tool.ToolType)) - editform.MaterialField.setCurrentIndex(self.getMaterial(tool.Material)) - editform.DiameterField.setText(FreeCAD.Units.Quantity(tool.Diameter, FreeCAD.Units.Length).UserString) - editform.LengthOffsetField.setText(FreeCAD.Units.Quantity(tool.LengthOffset, FreeCAD.Units.Length).UserString) - editform.FlatRadiusField.setText(FreeCAD.Units.Quantity(tool.FlatRadius, FreeCAD.Units.Length).UserString) - editform.CornerRadiusField.setText(FreeCAD.Units.Quantity(tool.CornerRadius, FreeCAD.Units.Length).UserString) - editform.CuttingEdgeAngleField.setText(FreeCAD.Units.Quantity(tool.CuttingEdgeAngle, FreeCAD.Units.Angle).UserString) - editform.CuttingEdgeHeightField.setText(FreeCAD.Units.Quantity(tool.CuttingEdgeHeight, FreeCAD.Units.Length).UserString) + def getStandardButtons(self): + return int(QtGui.QDialogButtonBox.Ok) - r = editform.exec_() - if r: - if editform.NameField.text(): - tool.Name = str(editform.NameField.text()) #FIXME: not unicode safe! - tool.ToolType = self.getType(editform.TypeField.currentIndex()) - tool.Material = self.getMaterial(editform.MaterialField.currentIndex()) - tool.Diameter = FreeCAD.Units.parseQuantity(editform.DiameterField.text()) - tool.LengthOffset = FreeCAD.Units.parseQuantity(editform.LengthOffsetField.text()) - tool.FlatRadius = FreeCAD.Units.parseQuantity(editform.FlatRadiusField.text()) - tool.CornerRadius = FreeCAD.Units.parseQuantity(editform.CornerRadiusField.text()) - tool.CuttingEdgeAngle = FreeCAD.Units.Quantity(editform.CuttingEdgeAngleField.text()) - tool.CuttingEdgeHeight = FreeCAD.Units.parseQuantity(editform.CuttingEdgeHeightField.text()) - self.obj.Tool = tool - self.setFields() + def edit(self, item, column): + if not self.updating: + self.resetObject() + + def resetObject(self, remove=None): + "transfers the values from the widget to the object" + FreeCAD.ActiveDocument.recompute() + + def setupUi(self): + t = Part.makeCylinder(1, 1) + self.toolrep = FreeCAD.ActiveDocument.addObject("Part::Feature", "tool") + self.toolrep.Shape = t + + self.setFields() + self.editor.setupUi() -class SelObserver: - def __init__(self): - pass - - def __del__(self): - pass - if FreeCAD.GuiUp: # register the FreeCAD command FreeCADGui.addCommand('Path_ToolController', CommandPathToolController())