Added full JSON file format support to ToolLibraryManager.

This commit is contained in:
Markus Lampert
2017-09-13 21:53:02 -07:00
committed by wmayer
parent e9222ce9de
commit f34b63f570

View File

@@ -143,6 +143,11 @@ class ToolLibraryManager():
preferences and all or part of the library can be exported to other formats
'''
TooltableTypeJSON = translate("TooltableEditor", "Tooltable JSON (*.json)")
TooltableTypeXML = translate("TooltableEditor", "Tooltable XML (*.xml)")
TooltableTypeHeekscad = translate("TooltableEditor", "HeeksCAD tooltable (*.tooltable)")
TooltableTypeLinuxCNC = translate("TooltableEditor", "LinuxCNC tooltable (*.tbl)")
def __init__(self):
self.prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Path")
return
@@ -236,20 +241,32 @@ class ToolLibraryManager():
# methods for importing and exporting
def read(self, filename, listname):
"imports a tooltable from a file"
parser = xml.sax.make_parser()
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
if os.path.splitext(filename[0])[1].lower() == ".tooltable":
Handler = HeeksTooltableHandler()
else:
Handler = FreeCADTooltableHandler()
try:
parser.setContentHandler(Handler)
parser.parse(unicode(filename[0]))
if not Handler.tooltable:
return None
fileExtension = os.path.splitext(filename[0])[1].lower()
xmlHandler = None
if fileExtension == '.tooltable':
xmlHandler = HeeksTooltableHandler()
if fileExtension == '.xml':
xmlHandler = FeeCADTooltableHandler()
if xmlHandler:
parser = xml.sax.make_parser()
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
parser.setContentHandler(xmlHandler)
parser.parse(unicode(filename[0]))
if not xmlHandler.tooltable:
return None
ht = xmlHandler.tooltable
else:
with open(unicode(filename[0]), "rb") as fp:
stringAttrs = json.load(fp)
attrs = {}
for key, val in stringAttrs.iteritems():
attrs[int(key)] = val
ht = Path.Tooltable(attrs)
ht = Handler.tooltable
tt = self._findList(listname)
for t in ht.Tools:
newt = ht.getTool(t).copy()
@@ -260,24 +277,34 @@ class ToolLibraryManager():
except Exception as e:
print("could not parse file", e)
def write(self, filename, listname):
"exports the tooltable to a file"
tt = self._findList(listname)
if tt:
try:
file = open(unicode(filename[0]), "wb")
def openFileWithExtension(name, ext):
fext = os.path.splitext(name)[1].lower()
if fext != ext:
name = "{}{}".format(name, ext)
return (open(unicode(name), 'wb'), name)
if filename[1] == 'LinuxCNC tooltable (*.tbl)':
if filename[1] == self.TooltableTypeXML:
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')
for key in tt.Tools:
t = tt.Tools[key]
file.write("T{} P{} Y{} Z{} A{} B{} C{} U{} V{} W{} D{} I{} J{} Q{} ;{}\n".format(key,key,0,t.LengthOffset,0,0,0,0,0,0,t.Diameter,0,0,0,t.Name))
fp.write("T{} P{} Y{} Z{} A{} B{} C{} U{} V{} W{} D{} I{} J{} Q{} ;{}\n".format(key,key,0,t.LengthOffset,0,0,0,0,0,0,t.Diameter,0,0,0,t.Name))
else:
file.write('<?xml version="1.0" encoding="UTF-8"?>\n')
file.write(tt.Content)
fp,fname = openFileWithExtension(filename[0], '.json')
attrs = tt.templateAttrs()
json.dump(attrs, fp, sort_keys=True, indent=2)
file.close()
print("Written ", unicode(filename[0]))
fp.close()
print("Written ", unicode(fname))
except Exception as e:
print("Could not write file:", e)
@@ -500,7 +527,7 @@ class EditorPanel():
def importFile(self):
"imports a tooltable from a file"
filename = QtGui.QFileDialog.getOpenFileName(self.form, translate( "TooltableEditor", "Open tooltable", None), None, translate("TooltableEditor", "Tooltable XML (*.xml);;HeeksCAD tooltable (*.tooltable)", None))
filename = QtGui.QFileDialog.getOpenFileName(self.form, translate( "TooltableEditor", "Open tooltable", None), None, "{};;{};;{}".format(ToolLibraryManager.TooltableTypeJSON, ToolLibraryManager.TooltableTypeXML, ToolLibraryManager.TooltableTypeHeekscad))
if filename[0]:
listname = '<Main>'
if self.TLM.read(filename, listname):
@@ -508,8 +535,8 @@ class EditorPanel():
def exportFile(self):
"imports a tooltable from a file"
filename = QtGui.QFileDialog.getSaveFileName(self.form, translate("TooltableEditor", "Save tooltable", None), None, translate("TooltableEditor", "Tooltable XML (*.xml);;LinuxCNC tooltable (*.tbl)", None))
"export a tooltable to a file"
filename = QtGui.QFileDialog.getSaveFileName(self.form, translate("TooltableEditor", "Save tooltable", None), None, "{};;{};;{}".format(ToolLibraryManager.TooltableTypeJSON, ToolLibraryManager.TooltableTypeXML, ToolLibraryManager.TooltableTypeLinuxCNC))
if filename[0]:
#listname = self.form.listView.selectedIndexes()[0].data()