diff --git a/src/Mod/Path/Gui/Resources/panels/ToolControl.ui b/src/Mod/Path/Gui/Resources/panels/ToolControl.ui
index 25140cc194..857f71a3d7 100644
--- a/src/Mod/Path/Gui/Resources/panels/ToolControl.ui
+++ b/src/Mod/Path/Gui/Resources/panels/ToolControl.ui
@@ -6,8 +6,8 @@
0
0
- 308
- 352
+ 338
+ 437
@@ -15,12 +15,9 @@
-
-
-
- QFrame::StyledPanel
-
-
- QFrame::Raised
+
+
+ Controller Name / Tool Number
-
@@ -37,23 +34,20 @@
-
-
-
- QFrame::StyledPanel
-
-
- QFrame::Raised
+
+
+ Tool Properties
-
-
-
+
-
+
Unknown
- -
-
+
-
+
Unknown
@@ -66,8 +60,15 @@
- -
-
+
-
+
+
+ Edit Local Copy...
+
+
+
+ -
+
Unknown
@@ -157,29 +158,22 @@
-
-
-
- QFrame::StyledPanel
-
-
- QFrame::Raised
+
+
+ Spindle
+
+ QFormLayout::AllNonFixedFieldsGrow
+
-
-
-
- Spindle Speed (RPM)
-
-
-
- -
99999
- -
+
-
-
diff --git a/src/Mod/Path/Gui/Resources/panels/ToolLibraryEditor.ui b/src/Mod/Path/Gui/Resources/panels/ToolLibraryEditor.ui
index 18822962dd..3e49b0d450 100644
--- a/src/Mod/Path/Gui/Resources/panels/ToolLibraryEditor.ui
+++ b/src/Mod/Path/Gui/Resources/panels/ToolLibraryEditor.ui
@@ -1,7 +1,7 @@
- Dialog
-
+ ToolLibrary
+
0
@@ -10,11 +10,137 @@
614
-
- Dialog
+
+
+ 0
+ 0
+
-
-
-
+
+ Tool Library
+
+
+
-
+
+
-
+
+
+ Import...
+
+
+
+ -
+
+
+ Export...
+
+
+
+
+
+ -
+
+
+ true
+
+
+ QAbstractItemView::DragOnly
+
+
+ true
+
+
+ QAbstractItemView::SingleSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Create Tool Controllers for the selected tools
+
+
+ Create Tool Controller(s)
+
+
+
+ :/icons/Path-LengthOffset.svg:/icons/Path-LengthOffset.svg
+
+
+
+ -
+
+
+ New Tool
+
+
+
+ :/icons/Path-LoadTool.svg:/icons/Path-LoadTool.svg
+
+
+
+ -
+
+
+ Delete
+
+
+
+ :/icons/delete.svg:/icons/delete.svg
+
+
+
+ -
+
+
+ Move up
+
+
+
+ :/icons/button_up.svg:/icons/button_up.svg
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
+ Move down
+
+
+
+ :/icons/button_down.svg:/icons/button_down.svg
+
+
+
+
+
+ -
Qt::Horizontal
@@ -24,146 +150,6 @@
- -
-
-
- Tool Library
-
-
-
-
-
-
- Import...
-
-
-
- -
-
-
- Move down
-
-
-
- :/icons/button_down.svg:/icons/button_down.svg
-
-
-
- -
-
-
- Move up
-
-
-
- :/icons/button_up.svg:/icons/button_up.svg
-
-
- false
-
-
- false
-
-
- false
-
-
-
- -
-
-
- true
-
-
- QAbstractItemView::DragOnly
-
-
- true
-
-
- QAbstractItemView::SingleSelection
-
-
- QAbstractItemView::SelectRows
-
-
- false
-
-
- false
-
-
-
- -
-
-
- Export...
-
-
-
- -
-
-
- Delete
-
-
-
- :/icons/delete.svg:/icons/delete.svg
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- true
-
-
- true
-
-
- QAbstractItemView::DropOnly
-
-
-
- -
-
-
- New Tool
-
-
-
- :/icons/Path-LoadTool.svg:/icons/Path-LoadTool.svg
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Copy checked tools to another library
-
-
-
-
-
-
- :/icons/button_left.svg:/icons/button_left.svg
-
-
-
-
-
-
@@ -174,7 +160,7 @@
buttonBox
accepted()
- Dialog
+ ToolLibrary
accept()
@@ -190,7 +176,7 @@
buttonBox
rejected()
- Dialog
+ ToolLibrary
reject()
diff --git a/src/Mod/Path/InitGui.py b/src/Mod/Path/InitGui.py
index 11a1120d19..c559ecd938 100644
--- a/src/Mod/Path/InitGui.py
+++ b/src/Mod/Path/InitGui.py
@@ -80,7 +80,7 @@ class PathWorkbench (Workbench):
# build commands list
projcmdlist = ["Path_Job", "Path_Post", "Path_Inspect", "Path_Sanity"]
- toolcmdlist = ["Path_ToolLibraryEdit", "Path_LoadTool"]
+ toolcmdlist = ["Path_ToolLibraryEdit"]
prepcmdlist = ["Path_Plane", "Path_Fixture", "Path_ToolLenOffset", "Path_Comment", "Path_Stop", "Path_FaceProfile", "Path_FacePocket", "Path_Custom", "Path_Shape"]
twodopcmdlist = ["Path_Contour", "Path_Profile", "Path_Profile_Edges", "Path_Pocket", "Path_Drilling", "Path_Engrave", "Path_MillFace", "Path_Helix"]
threedopcmdlist = ["Path_Surfacing"]
diff --git a/src/Mod/Path/PathScripts/PathLoadTool.py b/src/Mod/Path/PathScripts/PathLoadTool.py
index beee9c2ec9..891d960247 100644
--- a/src/Mod/Path/PathScripts/PathLoadTool.py
+++ b/src/Mod/Path/PathScripts/PathLoadTool.py
@@ -24,6 +24,7 @@
''' Tool Controller defines tool, spindle speed and feed rates for Path Operations '''
import FreeCAD
+from FreeCAD import Units
import FreeCADGui
import PathUtils
import Path
@@ -69,10 +70,10 @@ class LoadTool():
def execute(self, obj):
PathLog.track()
- toolnum = obj.Tooltable.Tools.keys()[0]
+ #toolnum = obj.Tooltable.Tools.keys()[0]
commands = ""
commands += "(" + obj.Label + ")"+'\n'
- commands += 'M6 T'+str(toolnum)+'\n'
+ commands += 'M6 T'+str(obj.ToolNumber)+'\n'
if obj.SpindleDir == 'Forward':
commands += 'M3 S' + str(obj.SpindleSpeed) + '\n'
@@ -88,7 +89,8 @@ class LoadTool():
obj.ViewObject.Visibility = True
def onChanged(self, obj, prop):
- PathLog.track('prop: {}'.format(prop))
+ PathLog.track('prop: {} state: {}'.format(prop, obj.State))
+
if 'Restore' not in obj.State:
if prop == "ToolNumber":
@@ -134,7 +136,7 @@ class _ViewProviderLoadTool:
return None
def getIcon(self):
- return ":/icons/Path-LoadTool.svg"
+ return ":/icons/Path-LengthOffset.svg"
def onChanged(self, vobj, prop):
mode = 2
@@ -169,7 +171,7 @@ class _ViewProviderLoadTool:
class CommandPathLoadTool:
def GetResources(self):
- return {'Pixmap': 'Path-LoadTool',
+ return {'Pixmap': 'Path-LengthOffset',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Path_LoadTool", "Add Tool Controller to the Job"),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Path_LoadTool", "Add Tool Controller")}
@@ -223,6 +225,8 @@ 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")
+
self.updating = False
self.toolrep = None
@@ -284,7 +288,8 @@ class TaskPanel:
tool = tooltable.getTool(toolnum)
self.form.txtToolType.setText(tool.ToolType)
self.form.txtToolMaterial.setText(tool.Material)
- self.form.txtToolDiameter.setText(str(tool.Diameter))
+ 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")
@@ -314,6 +319,7 @@ class TaskPanel:
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")
@@ -321,6 +327,62 @@ class TaskPanel:
self.setFields()
+ def getType(self, tooltype):
+ "gets a combobox index number for a given type or viceversa"
+ toolslist = ["Drill", "CenterDrill", "CounterSink", "CounterBore",
+ "Reamer", "Tap", "EndMill", "SlotCutter", "BallEndMill",
+ "ChamferMill", "CornerRound", "Engraver"]
+ if isinstance(tooltype, str):
+ if tooltype in toolslist:
+ return toolslist.index(tooltype)
+ else:
+ return 0
+ else:
+ return toolslist[tooltype]
+
+ def getMaterial(self, material):
+ "gets a combobox index number for a given material or viceversa"
+ matslist = ["HighSpeedSteel", "HighCarbonToolSteel", "CastAlloy",
+ "Carbide", "Ceramics", "Diamond", "Sialon"]
+ if isinstance(material, str):
+ if material in matslist:
+ return matslist.index(material)
+ else:
+ return 0
+ else:
+ return matslist[material]
+
+ def editTool(self):
+ toolnum = self.obj.Tooltable.Tools.keys()[0]
+ tool = self.obj.Tooltable.getTool(toolnum)
+ editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui")
+
+ 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)
+
+ 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.Tooltable.setTool(toolnum, tool)
+ self.setFields()
+
+
class SelObserver:
def __init__(self):
diff --git a/src/Mod/Path/PathScripts/PathToolLibraryManager.py b/src/Mod/Path/PathScripts/PathToolLibraryManager.py
index f2cf5b5a37..2ecc73dbb3 100644
--- a/src/Mod/Path/PathScripts/PathToolLibraryManager.py
+++ b/src/Mod/Path/PathScripts/PathToolLibraryManager.py
@@ -32,6 +32,12 @@ from PySide import QtCore, QtGui
import PathScripts
import PathUtils
+import PathScripts.PathLog as PathLog
+
+LOG_MODULE = 'PathToolLibraryManager'
+PathLog.setLevel(PathLog.Level.DEBUG, LOG_MODULE)
+PathLog.trackModule('PathToolLibraryManager')
+
try:
_encoding = QtGui.QApplication.UnicodeUTF8
@@ -142,7 +148,6 @@ class ToolLibraryManager():
'''
def __init__(self):
- # self.ToolLibrary = []
self.prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Path")
return
@@ -160,10 +165,9 @@ class ToolLibraryManager():
# Get ToolTables from any open CNC jobs
for o in FreeCAD.ActiveDocument.Objects:
- if "Proxy" in o.PropertiesList:
- if hasattr(o, "Tooltable"):
- toollist = o.Label
- tablelist.append(toollist)
+ if hasattr(o, "Proxy"):
+ if isinstance(o.Proxy, PathScripts.PathJob.ObjectPathJob):
+ tablelist.append(o.Label)
return tablelist
def _findList(self, listname):
@@ -339,20 +343,6 @@ class ToolLibraryManager():
self.saveMainLibrary(tt)
return True
- # def createToolController(self, job, tool):
- # pass
-
- # def exportListHeeks(self, tooltable):
- # '''exports one or more Lists as a HeeksCNC tooltable'''
- # pass
-
- # def exportListLinuxCNC(self, tooltable):
- # '''exports one or more Lists as a LinuxCNC tooltable'''
- # pass
-
- # def exportListXML(self, tooltable):
- # '''exports one or more Lists as an XML file'''
- # pass
class EditorPanel():
def __init__(self):
@@ -362,15 +352,7 @@ class EditorPanel():
self.editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui")
self.TLM = ToolLibraryManager()
- data = self.TLM.getLists()
- self.listmodel = QtGui.QStandardItemModel(self.form.listView)
-# self.listmodel = QtGui.QStringListModel(data)
- for i in data:
- item = QtGui.QStandardItem(i)
- self.listmodel.appendRow(item)
-
- self.form.listView.setModel(self.listmodel)
- #self.form.listView.setCurrentIndex(0)
+ self.loadTable()
self.form.ToolsList.resizeColumnsToContents()
def accept(self):
@@ -394,9 +376,6 @@ class EditorPanel():
else:
return 0
else:
- #if tooltype == 0:
- # return "Undefined"
- #else:
return toolslist[tooltype]
def getMaterial(self, material):
@@ -409,9 +388,6 @@ class EditorPanel():
else:
return 0
else:
- #if material == 0:
- # return "Undefined"
- #else:
return matslist[material]
def addTool(self):
@@ -432,21 +408,20 @@ class EditorPanel():
t.CuttingEdgeAngle = FreeCAD.Units.Quantity(editform.CuttingEdgeAngleField.text())
t.CuttingEdgeHeight = FreeCAD.Units.parseQuantity(editform.CuttingEdgeHeightField.text())
- listname = self.form.listView.selectedIndexes()[0].data()
+ listname = ""
+
if self.TLM.addnew(listname, t) is True:
- self.loadTable(self.form.listView.selectedIndexes()[0])
+ self.loadTable()
def setFields(self):
- index = self.listmodel.index(0, 0, QtCore.QModelIndex())
- self.form.listView.setFocus()
- sm = self.form.listView.selectionModel()
- sm.select(index, sm.Select)
+ pass
def open(self):
pass
- def loadTable(self, curr):
- tooldata = self.TLM.getTools(curr.data())
+ def loadTable(self):
+ #tooldata = self.TLM.getTools(curr.data())
+ tooldata = self.TLM.getTools("")
self.form.ToolsList.setModel(tooldata)
def moveUp(self):
@@ -454,36 +429,39 @@ class EditorPanel():
item = self.form.ToolsList.selectedIndexes()[1].data()
if item:
number = int(item)
- listname = self.form.listView.selectedIndexes()[0].data()
-
+ listname = ""
+ #listname = self.form.listView.selectedIndexes()[0].data()
if self.TLM.moveup(number, listname) is True:
- self.loadTable(self.form.listView.selectedIndexes()[0])
+ self.loadTable()
def moveDown(self):
"moves a tool to a higher number, if possible"
item = self.form.ToolsList.selectedIndexes()[1].data()
if item:
number = int(item)
- listname = self.form.listView.selectedIndexes()[0].data()
+ listname = ""
+ #listname = self.form.listView.selectedIndexes()[0].data()
if self.TLM.movedown(number, listname) is True:
- self.loadTable(self.form.listView.selectedIndexes()[0])
+ self.loadTable()
def delete(self):
'''deletes a tool'''
- listname = self.form.listView.selectedIndexes()[0].data()
+ #listname = self.form.listView.selectedIndexes()[0].data()
+ listname = ""
model = self.form.ToolsList.model()
for i in range(model.rowCount()):
item = model.item(i, 0)
if item.checkState():
t = model.index(i, 1)
self.TLM.delete(int(t.data()) ,listname)
- self.loadTable(self.form.listView.selectedIndexes()[0])
+ self.loadTable()
def editTool(self, currItem):
row = currItem.row()
value = currItem.sibling(row, 1).data()
- listname = self.form.listView.selectedIndexes()[0].data()
+ #listname = self.form.listView.selectedIndexes()[0].data()
+ listname = ""
toolnum = int(value)
tool = self.TLM.getTool(listname, toolnum)
editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui")
@@ -512,7 +490,7 @@ class EditorPanel():
tool.CuttingEdgeHeight = FreeCAD.Units.parseQuantity(editform.CuttingEdgeHeightField.text())
if self.TLM.updateTool(listname, toolnum, tool) is True:
- self.loadTable(self.form.listView.selectedIndexes()[0])
+ self.loadTable()
def importFile(self):
"imports a tooltable from a file"
@@ -543,7 +521,7 @@ class EditorPanel():
return
targets = self.TLM.getLists()
- currList = self.form.listView.selectedIndexes()[0].data()
+ currList = ""
for target in targets:
if target == currList:
@@ -552,7 +530,8 @@ class EditorPanel():
if len(targets) == 0:
FreeCAD.Console.PrintWarning("no place to go")
return
-
+ elif len(targets) == 1:
+ targetlist = targets[0]
else:
form = FreeCADGui.PySideUic.loadUi(":/panels/DlgToolCopy.ui")
form.cboTarget.addItems(targets)
@@ -561,27 +540,23 @@ class EditorPanel():
return None
else:
targetlist = form.cboTarget.currentText()
- for toolnum in tools:
- tool = self.TLM.getTool(currList, int(toolnum))
- 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))
+ for toolnum in tools:
+ tool = self.TLM.getTool(currList, int(toolnum))
+ PathLog.debug('tool: {}, toolnum: {}'.format(tool, toolnum))
+ for i in FreeCAD.ActiveDocument.findObjects("Path::Feature"):
+ if isinstance(i.Proxy, PathScripts.PathJob.ObjectPathJob) and i.Label == targetlist:
-#''' % (newtoolid, targetlist)
- # FreeCADGui.doCommand(snippet)
+ label = "T{}: {}".format(toolnum, tool.Name)
+ obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython",label)
+ PathScripts.PathLoadTool.LoadTool(obj)
+ PathScripts.PathLoadTool._ViewProviderLoadTool(obj.ViewObject)
+ PathUtils.addToJob(obj, targetlist)
+ FreeCAD.activeDocument().recompute()
+ newtool = tool.copy()
+ obj.Tooltable.setTool(int(toolnum), newtool)
+ obj.ToolNumber = int(toolnum)
+ obj.recompute()
def getStandardButtons(self):
return int(QtGui.QDialogButtonBox.Ok)
@@ -589,9 +564,6 @@ class EditorPanel():
def setupUi(self):
# Connect Signals and Slots
self.form.ButtonNewTool.clicked.connect(self.addTool)
- #self.form.listWidget.currentItemChanged.connect(self.loadTable)
- sm = self.form.listView.selectionModel()
- sm.currentChanged.connect(self.loadTable)
self.form.ButtonImport.clicked.connect(self.importFile)
self.form.ButtonExport.clicked.connect(self.exportFile)
self.form.ButtonDown.clicked.connect(self.moveDown)
@@ -613,9 +585,9 @@ class CommandToolLibraryEdit():
def GetResources(self):
return {'Pixmap' : 'Path-ToolTable',
- 'MenuText': QtCore.QT_TRANSLATE_NOOP("Path_ToolTable","Edit the Tool Library"),
+ 'MenuText': QtCore.QT_TRANSLATE_NOOP("Path_ToolTable","Tool Manager"),
'Accel': "P, T",
- 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Path_ToolTable","Edit the Tool Library")}
+ 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Path_ToolTable","Tool Manager")}
def IsActive(self):
return not FreeCAD.ActiveDocument is None
@@ -624,7 +596,6 @@ class CommandToolLibraryEdit():
self.edit()
-
if FreeCAD.GuiUp:
# register the FreeCAD command
FreeCADGui.addCommand('Path_ToolLibraryEdit',CommandToolLibraryEdit())