- 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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user