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
+
+
+
+
+
+
+ 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())