Old toollibrary black

This commit is contained in:
sliptonic
2022-01-22 16:01:58 -06:00
parent fb5997c31b
commit 7d17d931b3
2 changed files with 221 additions and 134 deletions

View File

@@ -36,13 +36,14 @@ import PathScripts.PathToolLibraryManager as ToolLibraryManager
from PySide import QtCore, QtGui
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
#PathLog.trackModule(PathLog.thisModule())
# PathLog.trackModule(PathLog.thisModule())
def translate(context, text, disambig=None):
return QtCore.QCoreApplication.translate(context, text, disambig)
class EditorPanel():
class EditorPanel:
def __init__(self, job, cb):
self.form = FreeCADGui.PySideUic.loadUi(":/panels/ToolLibraryEditor.ui")
self.TLM = ToolLibraryManager.ToolLibraryManager()
@@ -88,7 +89,7 @@ class EditorPanel():
return toolslist[tooltype]
def getMaterial(self, material):
'''gets a combobox index number for a given material or vice versa'''
"""gets a combobox index number for a given material or vice versa"""
matslist = Path.Tool.getToolMaterials(Path.Tool())
if isinstance(material, str):
if material in matslist:
@@ -99,7 +100,7 @@ class EditorPanel():
return matslist[material]
def addTool(self):
'''adds new tool to the current tool table'''
"""adds new tool to the current tool table"""
tool = Path.Tool()
editor = self.toolEditor(tool)
@@ -111,19 +112,19 @@ class EditorPanel():
self.loadTable(listname)
def delete(self):
'''deletes the selected tool'''
"""deletes the selected tool"""
listname = self.TLM.getCurrentTableName()
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.TLM.delete(int(t.data()), listname)
self.loadTable(listname)
self.toolSelectionChanged()
def editTool(self, currItem):
'''load the tool edit dialog'''
"""load the tool edit dialog"""
if not currItem:
currItem = self.form.ToolsList.selectedIndexes()[1]
@@ -141,7 +142,7 @@ class EditorPanel():
self.loadTable(listname)
def moveUp(self):
'''moves a tool to a lower number, if possible'''
"""moves a tool to a lower number, if possible"""
item = self.form.ToolsList.selectedIndexes()[1].data()
if item:
number = int(item)
@@ -152,7 +153,7 @@ class EditorPanel():
self.updateSelection(newNum)
def moveDown(self):
'''moves a tool to a higher number, if possible'''
"""moves a tool to a higher number, if possible"""
item = self.form.ToolsList.selectedIndexes()[1].data()
if item:
number = int(item)
@@ -163,7 +164,7 @@ class EditorPanel():
self.updateSelection(newNum)
def duplicate(self):
'''duplicated the selected tool in the current tool table'''
"""duplicated the selected tool in the current tool table"""
item = self.form.ToolsList.selectedIndexes()[1].data()
if item:
number = int(item)
@@ -174,7 +175,7 @@ class EditorPanel():
self.updateSelection(newNum)
def updateSelection(self, number):
'''update the tool list selection to track moves'''
"""update the tool list selection to track moves"""
model = self.form.ToolsList.model()
for i in range(model.rowCount()):
if int(model.index(i, 1).data()) == number:
@@ -182,24 +183,41 @@ class EditorPanel():
self.form.ToolsList.model().item(i, 0).setCheckState(QtCore.Qt.Checked)
return
def importFile(self):
'''imports a tooltable from a file'''
filename = QtGui.QFileDialog.getOpenFileName(self.form, translate( "TooltableEditor", "Open tooltable", None), None, "{};;{};;{}".format(self.TLM.TooltableTypeJSON, self.TLM.TooltableTypeXML, self.TLM.TooltableTypeHeekscad))
"""imports a tooltable from a file"""
filename = QtGui.QFileDialog.getOpenFileName(
self.form,
translate("TooltableEditor", "Open tooltable", None),
None,
"{};;{};;{}".format(
self.TLM.TooltableTypeJSON,
self.TLM.TooltableTypeXML,
self.TLM.TooltableTypeHeekscad,
),
)
if filename[0]:
listname = self.TLM.getNextToolTableName()
if self.TLM.read(filename, listname):
self.loadToolTables()
def exportFile(self):
'''export a tooltable to a file'''
filename = QtGui.QFileDialog.getSaveFileName(self.form, translate("TooltableEditor", "Save tooltable", None), None, "{};;{};;{}".format(self.TLM.TooltableTypeJSON, self.TLM.TooltableTypeXML, self.TLM.TooltableTypeLinuxCNC))
"""export a tooltable to a file"""
filename = QtGui.QFileDialog.getSaveFileName(
self.form,
translate("TooltableEditor", "Save tooltable", None),
None,
"{};;{};;{}".format(
self.TLM.TooltableTypeJSON,
self.TLM.TooltableTypeXML,
self.TLM.TooltableTypeLinuxCNC,
),
)
if filename[0]:
listname = self.TLM.getCurrentTableName()
self.TLM.write(filename, listname)
def toolSelectionChanged(self, index=None):
''' updates the ui when tools are selected'''
"""updates the ui when tools are selected"""
if index:
self.form.ToolsList.selectRow(index.row())
@@ -222,7 +240,7 @@ class EditorPanel():
# only allow moving or deleting a single tool at a time.
if checkCount == 1:
#make sure the row is highlighted when the check box gets ticked
# make sure the row is highlighted when the check box gets ticked
self.form.ToolsList.selectRow(checkList[0])
self.form.ButtonDelete.setEnabled(True)
self.form.ButtonUp.setEnabled(True)
@@ -234,7 +252,7 @@ class EditorPanel():
self.form.btnCopyTools.setEnabled(False)
def copyTools(self):
''' copy selected tool '''
"""copy selected tool"""
tools = []
model = self.form.ToolsList.model()
for i in range(model.rowCount()):
@@ -268,43 +286,54 @@ class EditorPanel():
for toolnum in tools:
tool = self.TLM.getTool(currList, int(toolnum))
PathLog.debug('tool: {}, toolnum: {}'.format(tool, toolnum))
PathLog.debug("tool: {}, toolnum: {}".format(tool, toolnum))
if self.job:
label = "T{}: {}".format(toolnum, tool.Name)
tc = PathScripts.PathToolController.Create(label, tool=tool, toolNumber=int(toolnum))
tc = PathScripts.PathToolController.Create(
label, tool=tool, toolNumber=int(toolnum)
)
self.job.Proxy.addToolController(tc)
else:
for job in FreeCAD.ActiveDocument.findObjects("Path::Feature"):
if isinstance(job.Proxy, PathScripts.PathJob.ObjectJob) and job.Label == targetlist:
if (
isinstance(job.Proxy, PathScripts.PathJob.ObjectJob)
and job.Label == targetlist
):
label = "T{}: {}".format(toolnum, tool.Name)
tc = PathScripts.PathToolController.Create(label, tool=tool, toolNumber=int(toolnum))
tc = PathScripts.PathToolController.Create(
label, tool=tool, toolNumber=int(toolnum)
)
job.Proxy.addToolController(tc)
if self.cb:
self.cb()
FreeCAD.ActiveDocument.recompute()
def tableSelected(self, index):
''' loads the tools for the selected tool table '''
name = self.form.TableList.itemWidget(self.form.TableList.itemFromIndex(index)).getTableName()
"""loads the tools for the selected tool table"""
name = self.form.TableList.itemWidget(
self.form.TableList.itemFromIndex(index)
).getTableName()
self.loadTable(name)
def loadTable(self, name):
''' loads the tools for the selected tool table '''
"""loads the tools for the selected tool table"""
tooldata = self.TLM.getTools(name)
if tooldata:
self.form.ToolsList.setModel(tooldata)
self.form.ToolsList.resizeColumnsToContents()
self.form.ToolsList.horizontalHeader().setResizeMode(self.form.ToolsList.model().columnCount() - 1, QtGui.QHeaderView.Stretch)
self.form.ToolsList.horizontalHeader().setResizeMode(
self.form.ToolsList.model().columnCount() - 1, QtGui.QHeaderView.Stretch
)
self.setCurrentToolTableByName(name)
def addNewToolTable(self):
''' adds new tool to selected tool table '''
"""adds new tool to selected tool table"""
name = self.TLM.addNewToolTable()
self.loadToolTables()
self.loadTable(name)
def loadToolTables(self):
''' Load list of available tool tables '''
"""Load list of available tool tables"""
self.form.TableList.clear()
model = self.form.ToolsList.model()
if model:
@@ -314,44 +343,54 @@ class EditorPanel():
listWidgetItem = QtGui.QListWidgetItem()
listItem = ToolTableListWidgetItem(self.TLM)
listItem.setTableName(table.Name)
listItem.setIcon(QtGui.QPixmap(':/icons/Path_ToolTable.svg'))
listItem.setIcon(QtGui.QPixmap(":/icons/Path_ToolTable.svg"))
listItem.toolMoved.connect(self.reloadReset)
listWidgetItem.setSizeHint(QtCore.QSize(0,40))
listWidgetItem.setSizeHint(QtCore.QSize(0, 40))
self.form.TableList.addItem(listWidgetItem)
self.form.TableList.setItemWidget(listWidgetItem, listItem)
#Load the first tooltable
# Load the first tooltable
self.loadTable(self.TLM.getCurrentTableName())
def reloadReset(self):
''' reloads the current tooltable'''
"""reloads the current tooltable"""
name = self.TLM.getCurrentTableName()
self.loadTable(name)
def setCurrentToolTableByName(self, name):
''' get the current tool table '''
"""get the current tool table"""
item = self.getToolTableByName(name)
if item:
self.form.TableList.setCurrentItem(item)
def getToolTableByName(self, name):
''' returns the listWidgetItem for the selected name'''
"""returns the listWidgetItem for the selected name"""
for i in range(self.form.TableList.count()):
tableName = self.form.TableList.itemWidget(self.form.TableList.item(i)).getTableName()
tableName = self.form.TableList.itemWidget(
self.form.TableList.item(i)
).getTableName()
if tableName == name:
return self.form.TableList.item(i)
return False
def removeToolTable(self):
''' delete the selected tool table '''
"""delete the selected tool table"""
self.TLM.deleteToolTable()
self.loadToolTables()
def renameTable(self):
''' provides dialog for new tablename and renames the selected tool table'''
"""provides dialog for new tablename and renames the selected tool table"""
name = self.TLM.getCurrentTableName()
newName, ok = QtGui.QInputDialog.getText(None, translate("TooltableEditor","Rename Tooltable"),translate("TooltableEditor","Enter Name:"),QtGui.QLineEdit.Normal,name)
newName, ok = QtGui.QInputDialog.getText(
None,
translate("TooltableEditor", "Rename Tooltable"),
translate("TooltableEditor", "Enter Name:"),
QtGui.QLineEdit.Normal,
name,
)
if ok and newName:
index = self.form.TableList.indexFromItem(self.getToolTableByName(name)).row()
index = self.form.TableList.indexFromItem(
self.getToolTableByName(name)
).row()
reloadTables = self.TLM.renameToolTable(newName, index)
if reloadTables:
self.loadToolTables()
@@ -380,14 +419,21 @@ class EditorPanel():
self.form.TableList.itemChanged.connect(self.renameTable)
self.form.ButtonAddToolTable.clicked.connect(self.addNewToolTable)
self.form.ButtonAddToolTable.setToolTip(translate("TooltableEditor","Add New Tool Table"))
self.form.ButtonAddToolTable.setToolTip(
translate("TooltableEditor", "Add New Tool Table")
)
self.form.ButtonRemoveToolTable.clicked.connect(self.removeToolTable)
self.form.ButtonRemoveToolTable.setToolTip(translate("TooltableEditor","Delete Selected Tool Table"))
self.form.ButtonRemoveToolTable.setToolTip(
translate("TooltableEditor", "Delete Selected Tool Table")
)
self.form.ButtonRenameToolTable.clicked.connect(self.renameTable)
self.form.ButtonRenameToolTable.setToolTip(translate("TooltableEditor","Rename Selected Tool Table"))
self.form.ButtonRenameToolTable.setToolTip(
translate("TooltableEditor", "Rename Selected Tool Table")
)
self.setFields()
class ToolTableListWidgetItem(QtGui.QWidget):
toolMoved = QtCore.Signal()
@@ -405,13 +451,13 @@ class ToolTableListWidgetItem(QtGui.QWidget):
self.mainLayout.addWidget(self.tableNameLabel, 1)
self.setLayout(self.mainLayout)
def setTableName (self, text):
def setTableName(self, text):
self.tableNameLabel.setText(text)
def getTableName(self):
return self.tableNameLabel.text()
def setIcon (self, icon):
def setIcon(self, icon):
icon = icon.scaled(24, 24)
self.iconQLabel.setPixmap(icon)
@@ -434,7 +480,7 @@ class ToolTableListWidgetItem(QtGui.QWidget):
self.toolMoved.emit()
class CommandToolLibraryEdit():
class CommandToolLibraryEdit:
def __init__(self):
pass
@@ -449,10 +495,12 @@ class CommandToolLibraryEdit():
cb()
def GetResources(self):
return {'Pixmap' : 'Path_ToolTable',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Path_ToolTable","Tool Manager"),
'Accel': "P, T",
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Path_ToolTable","Tool Manager")}
return {
"Pixmap": "Path_ToolTable",
"MenuText": QtCore.QT_TRANSLATE_NOOP("Path_ToolTable", "Tool Manager"),
"Accel": "P, T",
"ToolTip": QtCore.QT_TRANSLATE_NOOP("Path_ToolTable", "Tool Manager"),
}
def IsActive(self):
return not FreeCAD.ActiveDocument is None
@@ -460,6 +508,7 @@ class CommandToolLibraryEdit():
def Activated(self):
self.edit()
if FreeCAD.GuiUp:
# register the FreeCAD command
FreeCADGui.addCommand('Path_ToolLibraryEdit',CommandToolLibraryEdit())
FreeCADGui.addCommand("Path_ToolLibraryEdit", CommandToolLibraryEdit())

View File

@@ -35,11 +35,13 @@ import xml.sax
from PySide import QtCore, QtGui
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
#PathLog.trackModule(PathLog.thisModule())
# PathLog.trackModule(PathLog.thisModule())
def translate(context, text, disambig=None):
return QtCore.QCoreApplication.translate(context, text, disambig)
# Tooltable XML readers
class FreeCADTooltableHandler(xml.sax.ContentHandler):
# http://www.tutorialspoint.com/python/python_xml_processing.htm
@@ -62,7 +64,7 @@ class FreeCADTooltableHandler(xml.sax.ContentHandler):
self.tool.ToolType = str(attrs["type"])
self.tool.Material = str(attrs["mat"])
# for some reason without the following line I get an error
#print attrs["diameter"]
# print attrs["diameter"]
self.tool.Diameter = float(attrs["diameter"])
self.tool.LengthOffset = float(attrs["length"])
self.tool.FlatRadius = float(attrs["flat"])
@@ -80,7 +82,6 @@ class FreeCADTooltableHandler(xml.sax.ContentHandler):
class HeeksTooltableHandler(xml.sax.ContentHandler):
def __init__(self):
xml.sax.ContentHandler.__init__(self)
self.tooltable = Path.Tooltable()
@@ -115,15 +116,13 @@ class HeeksTooltableHandler(xml.sax.ContentHandler):
elif m == "1":
self.tool.Material = "Carbide"
# for some reason without the following line I get an error
#print attrs["diameter"]
# print attrs["diameter"]
self.tool.Diameter = float(attrs["diameter"])
self.tool.LengthOffset = float(attrs["tool_length_offset"])
self.tool.FlatRadius = float(attrs["flat_radius"])
self.tool.CornerRadius = float(attrs["corner_radius"])
self.tool.CuttingEdgeAngle = float(
attrs["cutting_edge_angle"])
self.tool.CuttingEdgeHeight = float(
attrs["cutting_edge_height"])
self.tool.CuttingEdgeAngle = float(attrs["cutting_edge_angle"])
self.tool.CuttingEdgeHeight = float(attrs["cutting_edge_height"])
# Call when an elements ends
def endElement(self, name):
@@ -134,17 +133,21 @@ class HeeksTooltableHandler(xml.sax.ContentHandler):
self.tool = None
class ToolLibraryManager():
'''
class ToolLibraryManager:
"""
The Tool Library is a list of individual tool tables. Each
Tool Table can contain n tools. The tool library will be persisted to user
preferences and all or part of the library can be exported to other formats
'''
"""
TooltableTypeJSON = translate("PathToolLibraryManager", "Tooltable JSON (*.json)")
TooltableTypeXML = translate("PathToolLibraryManager", "Tooltable XML (*.xml)")
TooltableTypeHeekscad = translate("PathToolLibraryManager", "HeeksCAD tooltable (*.tooltable)")
TooltableTypeLinuxCNC = translate("PathToolLibraryManager", "LinuxCNC tooltable (*.tbl)")
TooltableTypeJSON = translate("PathToolLibraryManager", "Tooltable JSON (*.json)")
TooltableTypeXML = translate("PathToolLibraryManager", "Tooltable XML (*.xml)")
TooltableTypeHeekscad = translate(
"PathToolLibraryManager", "HeeksCAD tooltable (*.tooltable)"
)
TooltableTypeLinuxCNC = translate(
"PathToolLibraryManager", "LinuxCNC tooltable (*.tbl)"
)
PreferenceMainLibraryXML = "ToolLibrary"
PreferenceMainLibraryJSON = "ToolLibrary-Main"
@@ -156,38 +159,40 @@ class ToolLibraryManager():
self.loadToolTables()
def getToolTables(self):
''' Return tool table list '''
"""Return tool table list"""
return self.toolTables
def getCurrentTableName(self):
''' return the name of the currently loaded tool table '''
"""return the name of the currently loaded tool table"""
return self.currentTableName
def getCurrentTable(self):
''' returns an object of the current tool table '''
"""returns an object of the current tool table"""
return self.getTableFromName(self.currentTableName)
def getTableFromName(self, name):
''' get the tool table object from the name '''
"""get the tool table object from the name"""
for table in self.toolTables:
if table.Name == name:
return table
def getNextToolTableName(self, tableName='Tool Table'):
''' get a unique name for a new tool table '''
def getNextToolTableName(self, tableName="Tool Table"):
"""get a unique name for a new tool table"""
iter = 1
tempName = tableName[-2:]
if tempName[0] == '-' and tempName[-1].isdigit():
if tempName[0] == "-" and tempName[-1].isdigit():
tableName = tableName[:-2]
while any(table.Name == tableName + '-' + str(iter) for table in self.toolTables):
while any(
table.Name == tableName + "-" + str(iter) for table in self.toolTables
):
iter += 1
return tableName + '-' + str(iter)
return tableName + "-" + str(iter)
def addNewToolTable(self):
''' creates a new tool table '''
"""creates a new tool table"""
tt = Path.Tooltable()
tt.Version = 1
name = self.getNextToolTableName()
@@ -197,20 +202,27 @@ class ToolLibraryManager():
return name
def deleteToolTable(self):
''' deletes the selected tool table '''
"""deletes the selected tool table"""
if len(self.toolTables):
index = next((index for (index, d) in enumerate(self.toolTables) if d.Name == self.currentTableName), None)
index = next(
(
index
for (index, d) in enumerate(self.toolTables)
if d.Name == self.currentTableName
),
None,
)
self.toolTables.pop(index)
self.saveMainLibrary()
def renameToolTable(self, newName, index):
''' renames a tool table with the new name'''
"""renames a tool table with the new name"""
currentTableName = self.toolTables[index].Name
if newName == currentTableName:
PathLog.error(translate('PathToolLibraryManager', "Tool Table Same Name"))
PathLog.error(translate("PathToolLibraryManager", "Tool Table Same Name"))
return False
if newName in self.toolTables:
PathLog.error(translate('PathToolLibraryManager', "Tool Table Name Exists"))
PathLog.error(translate("PathToolLibraryManager", "Tool Table Name Exists"))
return False
tt = self.getTableFromName(currentTableName)
if tt:
@@ -218,67 +230,74 @@ class ToolLibraryManager():
self.saveMainLibrary()
return True
def templateAttrs(self):
''' gets the tool table arributes '''
"""gets the tool table arributes"""
toolTables = []
for tt in self.toolTables:
tableData = {}
tableData['Version'] = 1
tableData['TableName'] = tt.Name
tableData["Version"] = 1
tableData["TableName"] = tt.Name
toolData = {}
for tool in tt.Tools:
toolData[tool] = tt.Tools[tool].templateAttrs()
tableData['Tools'] = toolData
tableData["Tools"] = toolData
toolTables.append(tableData)
return toolTables
def tooltableFromAttrs(self, stringattrs):
if stringattrs.get('Version') and 1 == int(stringattrs['Version']):
if stringattrs.get("Version") and 1 == int(stringattrs["Version"]):
tt = Path.Tooltable()
tt.Version = 1
tt.Name = self.getNextToolTableName()
if stringattrs.get('Version'):
tt.Version = stringattrs.get('Version')
if stringattrs.get("Version"):
tt.Version = stringattrs.get("Version")
if stringattrs.get('TableName'):
tt.Name = stringattrs.get('TableName')
if stringattrs.get("TableName"):
tt.Name = stringattrs.get("TableName")
if any(table.Name == tt.Name for table in self.toolTables):
tt.Name = self.getNextToolTableName(tt.Name)
for key, attrs in PathUtil.keyValueIter(stringattrs['Tools']):
tool = Path.Tool()
tool.Name = str(attrs["name"])
tool.ToolType = str(attrs["tooltype"])
tool.Material = str(attrs["material"])
tool.Diameter = float(attrs["diameter"])
tool.LengthOffset = float(attrs["lengthOffset"])
tool.FlatRadius = float(attrs["flatRadius"])
tool.CornerRadius = float(attrs["cornerRadius"])
tool.CuttingEdgeAngle = float(attrs["cuttingEdgeAngle"])
tool.CuttingEdgeHeight = float(attrs["cuttingEdgeHeight"])
tt.setTool(int(key), tool)
for key, attrs in PathUtil.keyValueIter(stringattrs["Tools"]):
tool = Path.Tool()
tool.Name = str(attrs["name"])
tool.ToolType = str(attrs["tooltype"])
tool.Material = str(attrs["material"])
tool.Diameter = float(attrs["diameter"])
tool.LengthOffset = float(attrs["lengthOffset"])
tool.FlatRadius = float(attrs["flatRadius"])
tool.CornerRadius = float(attrs["cornerRadius"])
tool.CuttingEdgeAngle = float(attrs["cuttingEdgeAngle"])
tool.CuttingEdgeHeight = float(attrs["cuttingEdgeHeight"])
tt.setTool(int(key), tool)
return tt
else:
PathLog.error(translate('PathToolLibraryManager', "Unsupported Path tooltable template version %s") % stringattrs.get('Version'))
PathLog.error(
translate(
"PathToolLibraryManager",
"Unsupported Path tooltable template version %s",
)
% stringattrs.get("Version")
)
return None
def loadToolTables(self):
''' loads the tool tables from the stored data '''
"""loads the tool tables from the stored data"""
self.toolTables = []
self.currentTableName = ''
self.currentTableName = ""
def addTable(tt):
if tt:
self.toolTables.append(tt)
else:
PathLog.error(translate('PathToolLibraryManager', "Unsupported Path tooltable"))
PathLog.error(
translate("PathToolLibraryManager", "Unsupported Path tooltable")
)
prefString = self.prefs.GetString(self.PreferenceMainLibraryJSON, "")
@@ -300,14 +319,14 @@ class ToolLibraryManager():
self.currentTableName = self.toolTables[0].Name
def saveMainLibrary(self):
'''Persists the permanent library to FreeCAD user preferences'''
"""Persists the permanent library to FreeCAD user preferences"""
tmpstring = json.dumps(self.templateAttrs())
self.prefs.SetString(self.PreferenceMainLibraryJSON, tmpstring)
self.loadToolTables()
return True
def getJobList(self):
'''Builds the list of all Tool Table lists'''
"""Builds the list of all Tool Table lists"""
tablelist = []
for o in FreeCAD.ActiveDocument.Objects:
@@ -318,27 +337,29 @@ class ToolLibraryManager():
return tablelist
def getTool(self, listname, toolnum):
''' gets the tool object '''
"""gets the tool object"""
tt = self.getTableFromName(listname)
return tt.getTool(toolnum)
def getTools(self, tablename):
'''returns the tool data for a given table'''
"""returns the tool data for a given table"""
tooldata = []
tableExists = any(table.Name == tablename for table in self.toolTables)
tableExists = any(table.Name == tablename for table in self.toolTables)
if tableExists:
self.currentTableName = tablename
else:
return None
tt = self.getTableFromName(tablename)
headers = ["","Tool Num.","Name","Tool Type","Diameter"]
headers = ["", "Tool Num.", "Name", "Tool Type", "Diameter"]
model = QtGui.QStandardItemModel()
model.setHorizontalHeaderLabels(headers)
def unitconv(ivalue):
val = FreeCAD.Units.Quantity(ivalue, FreeCAD.Units.Length)
displayed_val = val.UserString #just the displayed value-not the internal one
displayed_val = (
val.UserString
) # just the displayed value-not the internal one
return displayed_val
if tt:
@@ -348,10 +369,10 @@ class ToolLibraryManager():
itemcheck = QtGui.QStandardItem()
itemcheck.setCheckable(True)
itemNumber = QtGui.QStandardItem(str(number))
itemName = QtGui.QStandardItem(t.Name)
itemToolType = QtGui.QStandardItem(t.ToolType)
itemDiameter = QtGui.QStandardItem(unitconv(t.Diameter))
itemNumber = QtGui.QStandardItem(str(number))
itemName = QtGui.QStandardItem(t.Name)
itemToolType = QtGui.QStandardItem(t.ToolType)
itemDiameter = QtGui.QStandardItem(unitconv(t.Diameter))
row = [itemcheck, itemNumber, itemName, itemToolType, itemDiameter]
model.appendRow(row)
@@ -367,9 +388,9 @@ class ToolLibraryManager():
try:
fileExtension = os.path.splitext(filename[0])[1].lower()
xmlHandler = None
if fileExtension == '.tooltable':
if fileExtension == ".tooltable":
xmlHandler = HeeksTooltableHandler()
if fileExtension == '.xml':
if fileExtension == ".xml":
xmlHandler = FreeCADTooltableHandler()
if xmlHandler:
@@ -405,41 +426,58 @@ class ToolLibraryManager():
else:
return False
except Exception as e: # pylint: disable=broad-except
except Exception as e: # pylint: disable=broad-except
print("could not parse file", e)
def write(self, filename, listname):
"exports the tooltable to a file"
tt = self.getTableFromName(listname)
if tt:
try:
def openFileWithExtension(name, ext):
fext = os.path.splitext(name)[1].lower()
if fext != ext:
name = "{}{}".format(name, ext)
return (open(PathUtil.toUnicode(name), 'w'), name)
return (open(PathUtil.toUnicode(name), "w"), name)
if filename[1] == self.TooltableTypeXML:
fp,fname = openFileWithExtension(filename[0], '.xml')
fp, fname = openFileWithExtension(filename[0], ".xml")
fp.write('<?xml version="1.0" encoding="UTF-8"?>\n')
fp.write(tt.Content)
elif filename[1] == self.TooltableTypeLinuxCNC:
fp,fname = openFileWithExtension(filename[0], '.tbl')
fp, fname = openFileWithExtension(filename[0], ".tbl")
for key in tt.Tools:
t = tt.Tools[key]
fp.write("T{0} P{0} Y{1} Z{2} A{3} B{4} C{5} U{6} V{7} W{8} D{9} I{10} J{11} Q{12} ;{13}\n".format(key,0,t.LengthOffset,0,0,0,0,0,0,t.Diameter,0,0,0,t.Name))
fp.write(
"T{0} P{0} Y{1} Z{2} A{3} B{4} C{5} U{6} V{7} W{8} D{9} I{10} J{11} Q{12} ;{13}\n".format(
key,
0,
t.LengthOffset,
0,
0,
0,
0,
0,
0,
t.Diameter,
0,
0,
0,
t.Name,
)
)
else:
fp,fname = openFileWithExtension(filename[0], '.json')
fp, fname = openFileWithExtension(filename[0], ".json")
json.dump(self.templateAttrs(), fp, sort_keys=True, indent=2)
fp.close()
print("Written ", PathUtil.toUnicode(fname))
except Exception as e: # pylint: disable=broad-except
except Exception as e: # pylint: disable=broad-except
print("Could not write file:", e)
def addnew(self, listname, tool, position = None):
def addnew(self, listname, tool, position=None):
"adds a new tool at the end of the table"
tt = self.getTableFromName(listname)
if not tt:
@@ -456,7 +494,7 @@ class ToolLibraryManager():
return newID
def updateTool(self, listname, toolnum, tool):
'''updates tool data'''
"""updates tool data"""
tt = self.getTableFromName(listname)
tt.deleteTool(toolnum)
tt.setTool(toolnum, tool)
@@ -498,7 +536,7 @@ class ToolLibraryManager():
return True, target
def duplicate(self, number, listname):
''' duplicates the selected tool in the selected tool table '''
"""duplicates the selected tool in the selected tool table"""
tt = self.getTableFromName(listname)
tool = tt.getTool(number).copy()
tt.addTools(tool)
@@ -510,7 +548,7 @@ class ToolLibraryManager():
return True, newID
def moveToTable(self, number, listname):
''' Moves the tool to selected tool table '''
"""Moves the tool to selected tool table"""
fromTable = self.getTableFromName(self.getCurrentTableName())
toTable = self.getTableFromName(listname)
tool = fromTable.getTool(number).copy()
@@ -518,9 +556,9 @@ class ToolLibraryManager():
fromTable.deleteTool(number)
def delete(self, number, listname):
'''deletes a tool from the current list'''
"""deletes a tool from the current list"""
tt = self.getTableFromName(listname)
tt.deleteTool(number)
if listname == self.getCurrentTableName():
self.saveMainLibrary()
return True
return True