- remade the Excellon export function to work with parameters entered in Edit -> Preferences -> Excellon Export

- added a new entry in the Project Context Menu named 'Save'. It will actually work for Geometry and it will do Export DXF and for Excellon and it will do Export Excellon
This commit is contained in:
Marius Stanciu
2019-02-15 23:35:23 +02:00
committed by Marius S
parent aea67a4a1d
commit e717cb8f15
5 changed files with 195 additions and 157 deletions

View File

@@ -1079,8 +1079,8 @@ class App(QtCore.QObject):
self.ui.menufileexportsvg.triggered.connect(self.on_file_exportsvg)
self.ui.menufileexportpng.triggered.connect(self.on_file_exportpng)
self.ui.menufileexportexcellon.triggered.connect(lambda: self.on_file_exportexcellon(altium_format=None))
self.ui.menufileexportexcellon_altium.triggered.connect(lambda: self.on_file_exportexcellon(altium_format=True))
self.ui.menufileexportexcellon.triggered.connect(self.on_file_exportexcellon)
self.ui.menufileexportdxf.triggered.connect(self.on_file_exportdxf)
@@ -1156,6 +1156,7 @@ class App(QtCore.QObject):
self.ui.menuprojectedit.triggered.connect(self.object2editor)
self.ui.menuprojectdelete.triggered.connect(self.on_delete)
self.ui.menuprojectsave.triggered.connect(self.on_project_context_save)
self.ui.menuprojectproperties.triggered.connect(self.obj_properties)
# Toolbar
@@ -4693,6 +4694,13 @@ class App(QtCore.QObject):
self.properties_tool.run()
def on_project_context_save(self):
obj = self.collection.get_active()
if type(obj) == FlatCAMGeometry:
self.on_file_exportdxf()
elif type(obj) == FlatCAMExcellon:
self.on_file_exportexcellon()
def obj_move(self):
self.report_usage("obj_move()")
@@ -4939,7 +4947,7 @@ class App(QtCore.QObject):
write_png(filename, data)
self.file_saved.emit("png", filename)
def on_file_exportexcellon(self, altium_format=None):
def on_file_exportexcellon(self):
"""
Callback for menu item File->Export SVG.
@@ -4971,7 +4979,7 @@ class App(QtCore.QObject):
name = self.collection.get_active().options["name"]
filter = "Excellon File (*.drl);;Excellon File (*.txt);;All Files (*.*)"
filter = "Excellon File (*.DRL);;Excellon File (*.TXT);;All Files (*.*)"
try:
filename, _ = QtWidgets.QFileDialog.getSaveFileName(
caption="Export Excellon",
@@ -4986,12 +4994,8 @@ class App(QtCore.QObject):
self.inform.emit("[WARNING_NOTCL]Export Excellon cancelled.")
return
else:
if altium_format is None:
self.export_excellon(name, filename)
self.file_saved.emit("Excellon", filename)
else:
self.export_excellon(name, filename, altium_format=True)
self.file_saved.emit("Excellon", filename)
self.export_excellon(name, filename)
self.file_saved.emit("Excellon", filename)
def on_file_exportdxf(self):
"""
@@ -5528,9 +5532,17 @@ class App(QtCore.QObject):
return "Could not retrieve object: %s" % obj_name
# updated units
units = self.defaults["excellon_exp_units"]
whole = self.defaults["excellon_exp_integer"]
fract = self.defaults["excellon_exp_decimals"]
eunits = self.defaults["excellon_exp_units"]
ewhole = self.defaults["excellon_exp_integer"]
efract = self.defaults["excellon_exp_decimals"]
ezeros = self.defaults["excellon_exp_zeros"]
eformat = self.defaults[ "excellon_exp_format"]
fc_units = self.general_options_form.general_app_group.units_radio.get_value().upper()
if fc_units == 'MM':
factor = 1 if eunits == 'METRIC' else 0.03937
else:
factor = 25.4 if eunits == 'METRIC' else 1
def make_excellon():
try:
@@ -5538,32 +5550,55 @@ class App(QtCore.QObject):
header = 'M48\n'
header += ';EXCELLON GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s\n' % \
(str(self.app.version), str(self.app.version_date))
(str(self.version), str(self.version_date))
header += ';Filename: %s' % str(obj_name) + '\n'
header += ';Created on : %s' % time_str + '\n'
if self.defaults["excellon_exp_format"] == 'dec':
has_slots, excellon_code = obj.export_excellon_decimals(whole, fract, units)
header += units + '\n'
if eformat == 'dec':
has_slots, excellon_code = obj.export_excellon(ewhole, efract, factor=factor)
header += eunits + '\n'
for tool in obj.tools:
if units == 'METRIC':
header += 'T' + str(tool) + 'F00S00' + 'C' + '%.2f' % float(obj.tools[tool]['C']) + '\n'
if eunits == 'METRIC':
header += "T{tool}F00S00C{:.{dec}f}\n".format(float(obj.tools[tool]['C']) * factor,
tool=str(tool),
dec=2)
else:
header += 'T' + str(tool) + 'F00S00' + 'C' + '%.4f' % float(obj.tools[tool]['C']) + '\n'
header += "T{tool}F00S00C{:.{dec}f}\n".format(float(obj.tools[tool]['C']) * factor,
tool=str(tool),
dec=4)
else:
has_slots, excellon_code = obj.export_excellon_ndecimals(whole, fract, units)
header += '%s,%s\n' % (units, self.defaults["excellon_exp_zeros"])
header += format_exc
if ezeros == 'LZ':
has_slots, excellon_code = obj.export_excellon(ewhole, efract,
form='ndec', e_zeros='LZ', factor=factor)
header += '%s,%s\n' % (eunits, 'LZ')
header += format_exc
for tool in obj.tools:
if units == 'METRIC':
header += 'T' + str(tool) + 'F00S00' + 'C' + \
'%.2f' % (float(obj.tools[tool]['C']) / 25.4) + '\n'
else:
header += 'T' + str(tool) + 'F00S00' + 'C' + '%.4f' % float(obj.tools[tool]['C']) + '\n'
for tool in obj.tools:
if eunits == 'METRIC':
header += "T{tool}F00S00C{:.{dec}f}\n".format(float(obj.tools[tool]['C']) * factor,
tool=str(tool),
dec=2)
else:
header += "T{tool}F00S00C{:.{dec}f}\n".format(float(obj.tools[tool]['C']) * factor,
tool=str(tool),
dec=4)
else:
has_slots, excellon_code = obj.export_excellon(ewhole, efract,
form='ndec', e_zeros='TZ', factor=factor)
header += '%s,%s\n' % (eunits, 'TZ')
header += format_exc
for tool in obj.tools:
if eunits == 'METRIC':
header += "T{tool}F00S00C{:.{dec}f}\n".format(float(obj.tools[tool]['C']) * factor,
tool=str(tool),
dec=2)
else:
header += "T{tool}F00S00C{:.{dec}f}\n".format(float(obj.tools[tool]['C']) * factor,
tool=str(tool),
dec=4)
header += '%\n'
footer = 'M30\n'
@@ -5576,7 +5611,8 @@ class App(QtCore.QObject):
self.file_saved.emit("Excellon", filename)
self.inform.emit("[success] Excellon file exported to " + filename)
except:
except Exception as e:
log.debug("App.export_excellon.make_excellon() --> %s" % str(e))
return 'fail'
if use_thread is True: