From 24d7bf7e78f384b68a08558fa518980c2311b8f0 Mon Sep 17 00:00:00 2001 From: sliptonic Date: Mon, 27 Feb 2017 16:05:29 -0600 Subject: [PATCH] Path: A possibly il-advised revision to library # Conflicts: # src/Mod/Path/Gui/Resources/panels/DrillingEdit.ui # src/Mod/Path/PathScripts/PathDrilling.py --- .../Path/Gui/Resources/panels/ToolControl.ui | 62 ++-- .../Gui/Resources/panels/ToolLibraryEditor.ui | 282 +++++++++--------- src/Mod/Path/InitGui.py | 2 +- src/Mod/Path/PathScripts/PathLoadTool.py | 74 ++++- .../PathScripts/PathToolLibraryManager.py | 127 +++----- 5 files changed, 280 insertions(+), 267 deletions(-) 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())