Added full JSON file format support to ToolLibraryManager.
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user