diff --git a/src/Mod/Path/Gui/Resources/panels/DlgToolCopy.ui b/src/Mod/Path/Gui/Resources/panels/DlgToolCopy.ui
index 0f05cdc7ae85..a200d45b60d0 100644
--- a/src/Mod/Path/Gui/Resources/panels/DlgToolCopy.ui
+++ b/src/Mod/Path/Gui/Resources/panels/DlgToolCopy.ui
@@ -10,7 +10,7 @@
0
0
367
- 119
+ 98
@@ -33,16 +33,6 @@
-
- -
-
-
- Create Tool Controllers
-
-
- true
-
-
-
-
diff --git a/src/Mod/Path/Gui/Resources/panels/ToolControl.ui b/src/Mod/Path/Gui/Resources/panels/ToolControl.ui
index a7a69ff13dbd..25140cc194d1 100644
--- a/src/Mod/Path/Gui/Resources/panels/ToolControl.ui
+++ b/src/Mod/Path/Gui/Resources/panels/ToolControl.ui
@@ -7,7 +7,7 @@
0
0
308
- 389
+ 352
@@ -15,10 +15,25 @@
-
-
-
- true
+
+
+ QFrame::StyledPanel
+
+ QFrame::Raised
+
+
+
-
+
+
+ false
+
+
+
+ -
+
+
+
-
@@ -30,18 +45,15 @@
QFrame::Raised
- -
-
+
-
+
Unknown
- -
-
-
- -
-
+
-
+
Unknown
@@ -54,6 +66,13 @@
+ -
+
+
+ Unknown
+
+
+
@@ -73,9 +92,6 @@
- -
-
-
-
@@ -83,9 +99,6 @@
- -
-
-
-
@@ -93,13 +106,6 @@
- -
-
-
-
-
-
-
-
@@ -107,10 +113,43 @@
+ -
+
+
+ 0.000000000000000
+
+
+ mm/s
+
+
+
+ -
+
+
+ 0.000000000000000
+
+
+ mm/s
+
+
+
+ -
+
+
+ 0.000000000000000
+
+
+ mm/s
+
+
+
-
-
-
-
+
+
+ 0.000000000000000
+
+
+ mm/s
@@ -159,6 +198,13 @@
+
+
+ Gui::InputField
+ QLineEdit
+
+
+
diff --git a/src/Mod/Path/PathScripts/PathJob.py b/src/Mod/Path/PathScripts/PathJob.py
index 036e927e79a0..71f2400e1e63 100644
--- a/src/Mod/Path/PathScripts/PathJob.py
+++ b/src/Mod/Path/PathScripts/PathJob.py
@@ -67,7 +67,7 @@ def __init__(self, obj):
obj.PostProcessorArgs = PathPreferences.defaultPostProcessorArgs()
obj.addProperty("App::PropertyString", "MachineName", "Output", QtCore.QT_TRANSLATE_NOOP("App::Property","Name of the Machine that will use the CNC program"))
- obj.addProperty("Path::PropertyTooltable", "Tooltable", "Base", QtCore.QT_TRANSLATE_NOOP("App::Property","The tooltable used for this CNC program"))
+ #obj.addProperty("Path::PropertyTooltable", "Tooltable", "Base", QtCore.QT_TRANSLATE_NOOP("App::Property","The tooltable used for this CNC program"))
obj.addProperty("App::PropertyEnumeration", "MachineUnits", "Output", QtCore.QT_TRANSLATE_NOOP("App::Property","Units that the machine works in, ie Metric or Inch"))
obj.MachineUnits = ['Metric', 'Inch']
@@ -206,15 +206,6 @@ def Create():
obj = FreeCAD.ActiveDocument.addObject("Path::FeatureCompoundPython", "Job")
PathScripts.PathJob.ObjectPathJob(obj)
PathLoadTool.CommandPathLoadTool.Create(obj.Name)
-tl = obj.Group[0]
-tool = Path.Tool()
-tool.Diameter = 5.0
-tool.Name = "Default Tool"
-tool.CuttingEdgeHeight = 15.0
-tool.ToolType = "EndMill"
-tool.Material = "HighSpeedSteel"
-obj.Tooltable.addTools(tool)
-tl.ToolNumber = 1
obj.ViewObject.Proxy.deleteOnReject = True
obj.ViewObject.startEditing()
'''
diff --git a/src/Mod/Path/PathScripts/PathLoadTool.py b/src/Mod/Path/PathScripts/PathLoadTool.py
index d5fd34602d23..56bdd55e3df3 100644
--- a/src/Mod/Path/PathScripts/PathLoadTool.py
+++ b/src/Mod/Path/PathScripts/PathLoadTool.py
@@ -30,6 +30,11 @@
import Part
import PathScripts
from PySide import QtCore, QtGui
+import PathScripts.PathLog as PathLog
+
+LOG_MODULE = 'PathLoadTool'
+PathLog.setLevel(PathLog.Level.DEBUG, LOG_MODULE)
+PathLog.trackModule('PathLoadTool')
# Qt tanslation handling
try:
@@ -43,14 +48,18 @@ def translate(context, text, disambig=None):
class LoadTool():
- def __init__(self, obj):
- obj.addProperty("App::PropertyIntegerConstraint", "ToolNumber", "Tool", QtCore.QT_TRANSLATE_NOOP("App::Property","The active tool"))
+ def __init__(self, obj, tool=1):
+ PathLog.track('tool: {}'.format(tool))
+
+ obj.addProperty("App::PropertyIntegerConstraint", "ToolNumber", "Tool", QtCore.QT_TRANSLATE_NOOP("App::Property", "The active tool"))
obj.ToolNumber = (0, 0, 10000, 1)
- obj.addProperty("App::PropertyFloat", "SpindleSpeed", "Tool", QtCore.QT_TRANSLATE_NOOP("App::Property","The speed of the cutting spindle in RPM"))
- obj.addProperty("App::PropertyEnumeration", "SpindleDir", "Tool", QtCore.QT_TRANSLATE_NOOP("App::Property","Direction of spindle rotation"))
+ obj.addProperty("Path::PropertyTooltable", "Tooltable", "Base", QtCore.QT_TRANSLATE_NOOP("App::Property", "The tooltable used for this CNC program"))
+
+ obj.addProperty("App::PropertyFloat", "SpindleSpeed", "Tool", QtCore.QT_TRANSLATE_NOOP("App::Property", "The speed of the cutting spindle in RPM"))
+ obj.addProperty("App::PropertyEnumeration", "SpindleDir", "Tool", QtCore.QT_TRANSLATE_NOOP("App::Property", "Direction of spindle rotation"))
obj.SpindleDir = ['Forward', 'Reverse']
- obj.addProperty("App::PropertySpeed", "VertFeed", "Feed", QtCore.QT_TRANSLATE_NOOP("App::Property","Feed rate for vertical moves in Z"))
- obj.addProperty("App::PropertySpeed", "HorizFeed", "Feed", QtCore.QT_TRANSLATE_NOOP("App::Property","Feed rate for horizontal moves"))
+ obj.addProperty("App::PropertySpeed", "VertFeed", "Feed", QtCore.QT_TRANSLATE_NOOP("App::Property", "Feed rate for vertical moves in Z"))
+ obj.addProperty("App::PropertySpeed", "HorizFeed", "Feed", QtCore.QT_TRANSLATE_NOOP("App::Property", "Feed rate for horizontal moves"))
obj.addProperty("App::PropertySpeed", "VertRapid", "Rapid", QtCore.QT_TRANSLATE_NOOP("App::Property", "Rapid rate for vertical moves in Z"))
obj.addProperty("App::PropertySpeed", "HorizRapid", "Rapid", QtCore.QT_TRANSLATE_NOOP("App::Property", "Rapid rate for horizontal moves"))
obj.Proxy = self
@@ -58,39 +67,48 @@ def __init__(self, obj):
obj.setEditorMode('Placement', mode)
def execute(self, obj):
- tool = PathUtils.getTool(obj, obj.ToolNumber)
- if tool is not None:
- obj.Label = obj.Name + ": " + tool.Name
- else:
- obj.Label = obj.Name + ": UNDEFINED TOOL"
+ PathLog.track()
+ toolnum = obj.Tooltable.Tools.keys()[0]
commands = ""
commands += "(" + obj.Label + ")"+'\n'
- commands += 'M6T'+str(obj.ToolNumber)+'\n'
+ commands += 'M6T'+str(toolnum)+'\n'
if obj.SpindleDir == 'Forward':
commands += 'M3S' + str(obj.SpindleSpeed) + '\n'
-
else:
commands += 'M4S' + str(obj.SpindleSpeed) + '\n'
- # print output
if commands == "":
commands += "(No commands processed)"
-
path = Path.Path(commands)
obj.Path = path
if obj.ViewObject:
obj.ViewObject.Visibility = True
def onChanged(self, obj, prop):
- if prop == "ToolNumber" and not 'Restore' in obj.State:
- job = PathUtils.findParentJob(obj)
- if job is not None:
- for g in job.Group:
- if not(isinstance(g.Proxy, PathScripts.PathLoadTool.LoadTool)):
- g.touch()
+ PathLog.track('prop: {}'.format(prop))
+
+ if 'Restore' not in obj.State:
+ if prop == "ToolNumber":
+ toolitem = obj.Tooltable.Tools.popitem()
+ oldtoolnum = toolitem[0]
+ tool = toolitem[1]
+ obj.Tooltable.deleteTool(oldtoolnum)
+ obj.Tooltable.setTool(obj.ToolNumber, tool)
+ else:
+ job = PathUtils.findParentJob(obj)
+ if job is not None:
+ for g in job.Group:
+ if not(isinstance(g.Proxy, PathScripts.PathLoadTool.LoadTool)):
+ g.touch()
+
+ def getTool(self, obj):
+ '''returns the tool associated with this tool controller'''
+ PathLog.track()
+ toolitem = obj.Tooltable.Tools.popitem()
+ return toolitem[1]
class _ViewProviderLoadTool:
@@ -163,31 +181,41 @@ def IsActive(self):
return False
def Activated(self):
- FreeCAD.ActiveDocument.openTransaction(translate("Path_LoadTool", "Create Tool Controller Object"))
- snippet = '''
-import Path, PathScripts
-from PathScripts import PathUtils, PathLoadTool
-
-obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython","TC")
-PathScripts.PathLoadTool.LoadTool(obj)
-PathScripts.PathLoadTool._ViewProviderLoadTool(obj.ViewObject)
-
-PathUtils.addToJob(obj)
-'''
- FreeCADGui.doCommand(snippet)
- FreeCAD.ActiveDocument.commitTransaction()
- FreeCAD.ActiveDocument.recompute()
+ PathLog.track()
+ self.Create()
+
+# FreeCAD.ActiveDocument.openTransaction(translate("Path_LoadTool", "Create Tool Controller Object"))
+
+# obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", "TC")
+# PathScripts.PathLoadTool.LoadTool(obj)
+# PathScripts.PathLoadTool._ViewProviderLoadTool(obj.ViewObject)
+
+# PathUtils.addToJob(obj)
+
+# FreeCAD.ActiveDocument.commitTransaction()
+# FreeCAD.ActiveDocument.recompute()
@staticmethod
- def Create(jobname = None, assignViewProvider = True):
+ def Create(jobname=None, assignViewProvider=True, tool=None, toolNumber=1):
+ PathLog.track("tool: {} with toolNumber: {}".format(tool, toolNumber))
+
import PathScripts
import PathUtils
- obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", "TC")
+ obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", "Default Tool")
PathScripts.PathLoadTool.LoadTool(obj)
if assignViewProvider:
PathScripts.PathLoadTool._ViewProviderLoadTool(obj.ViewObject)
+ if tool is None:
+ tool = Path.Tool()
+ tool.Diameter = 5.0
+ tool.Name = "Default Tool"
+ tool.CuttingEdgeHeight = 15.0
+ tool.ToolType = "EndMill"
+ tool.Material = "HighSpeedSteel"
+ obj.Tooltable.setTool(toolNumber, tool)
+ obj.ToolNumber = toolNumber
PathUtils.addToJob(obj, jobname)
@@ -198,7 +226,6 @@ def __init__(self):
self.updating = False
self.toolrep = None
-
def accept(self):
self.getFields()
@@ -209,7 +236,6 @@ def accept(self):
FreeCAD.ActiveDocument.recompute()
FreeCADGui.Selection.removeObserver(self.s)
-
def reject(self):
FreeCADGui.Control.closeDialog()
if self.toolrep is not None:
@@ -230,7 +256,8 @@ def getFields(self):
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"):
@@ -239,65 +266,42 @@ def getFields(self):
self.obj.Proxy.execute(self.obj)
def setFields(self):
- self.form.cboToolSelect.blockSignals(True)
-
+ self.form.tcoName.setText(self.obj.Label)
+ self.form.uiToolNum.setValue(self.obj.ToolNumber)
self.form.vertFeed.setText(str(self.obj.VertFeed.Value))
self.form.horizFeed.setText(str(self.obj.HorizFeed.Value))
self.form.vertRapid.setText(str(self.obj.VertRapid.Value))
self.form.horizRapid.setText(str(self.obj.HorizRapid.Value))
self.form.spindleSpeed.setValue(self.obj.SpindleSpeed)
- self.form.tcoName.setText(str(self.obj.Label))
index = self.form.cboSpindleDirection.findText(self.obj.SpindleDir, QtCore.Qt.MatchFixedString)
if index >= 0:
self.form.cboSpindleDirection.setCurrentIndex(index)
- myJob = PathUtils.findParentJob(self.obj)
-
- #populate the toolselector and select correct tool
- self.form.cboToolSelect.clear()
- tooltable = myJob.Tooltable
- for number, tool in tooltable.Tools.iteritems():
- self.form.cboToolSelect.addItem(tool.Name)
+ tooltable = self.obj.Tooltable
try:
- tool = myJob.Tooltable.Tools[self.obj.ToolNumber]
+ toolnum = tooltable.Tools.keys()[0]
+ tool = tooltable.getTool(toolnum)
self.form.txtToolType.setText(tool.ToolType)
self.form.txtToolMaterial.setText(tool.Material)
self.form.txtToolDiameter.setText(str(tool.Diameter))
-
- index = self.form.cboToolSelect.findText(tool.Name, QtCore.Qt.MatchFixedString)
- if index >= 0:
- self.form.cboToolSelect.setCurrentIndex(index)
-
+ self.form.txtToolName.setText(tool.Name)
except:
- self.form.cboToolSelect.setCurrentIndex(-1)
self.form.txtToolType.setText("UNDEFINED")
self.form.txtToolMaterial.setText("UNDEFINED")
self.form.txtToolDiameter.setText("UNDEFINED")
- self.form.cboToolSelect.blockSignals(False)
radius = tool.Diameter / 2
length = tool.CuttingEdgeHeight
t = Part.makeCylinder(radius, length)
self.toolrep.Shape = t
- def changeTool(self):
- myJob = PathUtils.findParentJob(self.obj)
- newtool = self.form.cboToolSelect.currentText()
-
- tooltable = myJob.Tooltable
- for number, tool in tooltable.Tools.iteritems():
- if tool.Name == newtool:
- self.obj.ToolNumber = number
- self.setFields()
-
def open(self):
self.s = SelObserver()
# install the function mode resident
FreeCADGui.Selection.addObserver(self.s)
-
def getStandardButtons(self):
return int(QtGui.QDialogButtonBox.Ok)
@@ -310,19 +314,15 @@ def resetObject(self, remove=None):
FreeCAD.ActiveDocument.recompute()
def setupUi(self):
-
- self.form.cboToolSelect.currentIndexChanged.connect(self.changeTool)
self.form.tcoName.editingFinished.connect(self.getFields)
- # build the tool representation
- if self.obj.ToolNumber != 0:
- t = Part.makeCylinder(1, 1)
- self.toolrep = FreeCAD.ActiveDocument.addObject("Part::Feature", "tool")
- self.toolrep.Shape = t
+ t = Part.makeCylinder(1, 1)
+ self.toolrep = FreeCAD.ActiveDocument.addObject("Part::Feature", "tool")
+ self.toolrep.Shape = t
- # setup the form fields
self.setFields()
+
class SelObserver:
def __init__(self):
pass
@@ -330,7 +330,6 @@ def __init__(self):
def __del__(self):
pass
-
if FreeCAD.GuiUp:
# register the FreeCAD command
FreeCADGui.addCommand('Path_LoadTool', CommandPathLoadTool())
diff --git a/src/Mod/Path/PathScripts/PathToolLibraryManager.py b/src/Mod/Path/PathScripts/PathToolLibraryManager.py
index d84797137a66..f2cf5b5a37b1 100644
--- a/src/Mod/Path/PathScripts/PathToolLibraryManager.py
+++ b/src/Mod/Path/PathScripts/PathToolLibraryManager.py
@@ -29,6 +29,8 @@
import Path
import os
from PySide import QtCore, QtGui
+import PathScripts
+import PathUtils
try:
_encoding = QtGui.QApplication.UnicodeUTF8
@@ -561,19 +563,25 @@ def copyTools(self):
targetlist = form.cboTarget.currentText()
for toolnum in tools:
tool = self.TLM.getTool(currList, int(toolnum))
- newtoolid = self.TLM.addnew(targetlist, tool.copy(), int(toolnum))
- if form.chkMakeController.checkState() == QtCore.Qt.CheckState.Checked and targetlist != "":
- snippet = '''
-import Path, PathScripts
-from PathScripts import PathUtils, PathLoadTool
-obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython","TC")
-PathScripts.PathLoadTool.LoadTool(obj)
-PathScripts.PathLoadTool._ViewProviderLoadTool(obj.ViewObject)
-obj.ToolNumber = %d
-PathUtils.addToJob(obj, "%s")
-App.activeDocument().recompute()
-''' % (newtoolid, targetlist)
- FreeCADGui.doCommand(snippet)
+ for i in FreeCAD.ActiveDocument.findObjects("Path::Feature"):
+ if isinstance(i.Proxy, PathScripts.PathJob.ObjectPathJob) and i.Label == targetlist:
+
+ #if form.chkMakeController.checkState() == QtCore.Qt.CheckState.Checked and targetlist != "":
+ # snippet = '''
+#import Path, PathScripts
+#from PathScripts import PathUtils, PathLoadTool
+ obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython","TC")
+ PathScripts.PathLoadTool.LoadTool(obj)
+ PathScripts.PathLoadTool._ViewProviderLoadTool(obj.ViewObject)
+ #obj.ToolNumber = %d
+ PathUtils.addToJob(obj, targetlist)
+ FreeCAD.activeDocument().recompute()
+ obj.tooltable.setTool(tool.copy(), int(toolnum))
+ else:
+ newtoolid = self.TLM.addnew(targetlist, tool.copy(), int(toolnum))
+
+#''' % (newtoolid, targetlist)
+ # FreeCADGui.doCommand(snippet)
def getStandardButtons(self):
return int(QtGui.QDialogButtonBox.Ok)