Merge remote-tracking branch 'origin/Beta' into Beta

# Conflicts:
#	FlatCAMObj.py
#	README.md
This commit is contained in:
Marius 2019-11-15 21:42:12 +02:00
commit 172f527713
3 changed files with 88 additions and 12 deletions

View File

@ -498,6 +498,24 @@ class App(QtCore.QObject):
"gerber_use_buffer_for_union": True,
"gerber_def_units": 'IN',
"gerber_def_zeros": 'L',
"gerber_save_filters": "Gerber File (*.gbr);;Gerber File (*.bot);;Gerber File (*.bsm);;"
"Gerber File (*.cmp);;Gerber File (*.crc);;Gerber File (*.crs);;"
"Gerber File (*.gb0);;Gerber File (*.gb1);;Gerber File (*.gb2);;"
"Gerber File (*.gb3);;Gerber File (*.gb4);;Gerber File (*.gb5);;"
"Gerber File (*.gb6);;Gerber File (*.gb7);;Gerber File (*.gb8);;"
"Gerber File (*.gb9);;Gerber File (*.gbd);;Gerber File (*.gbl);;"
"Gerber File (*.gbo);;Gerber File (*.gbp);;Gerber File (*.gbs);;"
"Gerber File (*.gdo);;Gerber File (*.ger);;Gerber File (*.gko);;"
"Gerber File (*.gm1);;Gerber File (*.gm2);;Gerber File (*.gm3);;"
"Gerber File (*.grb);;Gerber File (*.gtl);;Gerber File (*.gto);;"
"Gerber File (*.gtp);;Gerber File (*.gts);;Gerber File (*.ly15);;"
"Gerber File (*.ly2);;Gerber File (*.mil);;Gerber File (*.pho);;"
"Gerber File (*.plc);;Gerber File (*.pls);;Gerber File (*.smb);;"
"Gerber File (*.smt);;Gerber File (*.sol);;Gerber File (*.spb);;"
"Gerber File (*.spt);;Gerber File (*.ssb);;Gerber File (*.sst);;"
"Gerber File (*.stc);;Gerber File (*.sts);;Gerber File (*.top);;"
"Gerber File (*.tsm);;Gerber File (*.art)"
"All Files (*.*)",
# Gerber Options
"gerber_isotooldia": 0.00787402,
@ -558,6 +576,9 @@ class App(QtCore.QObject):
"excellon_update": True,
"excellon_optimization_type": 'B',
"excellon_search_time": 3,
"excellon_save_filters": "Excellon File (*.txt);;Excellon File (*.drd);;Excellon File (*.drl);;"
"Excellon File (*.exc);;Excellon File (*.ncd);;Excellon File (*.tap);;"
"Excellon File (*.xln);;All Files (*.*)",
# Excellon Options
"excellon_drillz": -0.0590551,
@ -663,6 +684,16 @@ class App(QtCore.QObject):
"cncjob_steps_per_circle": 128,
"cncjob_footer": False,
"cncjob_line_ending": False,
"cncjob_save_filters": "G-Code Files (*.nc);;G-Code Files (*.din);;G-Code Files (*.dnc);;"
"G-Code Files (*.ecs);;G-Code Files (*.eia);;G-Code Files (*.fan);;"
"G-Code Files (*.fgc);;G-Code Files (*.fnc);;G-Code Files (*.gc);;"
"G-Code Files (*.gcd);;G-Code Files (*.gcode);;G-Code Files (*.h);;"
"G-Code Files (*.hnc);;G-Code Files (*.i);;G-Code Files (*.min);;"
"G-Code Files (*.mpf);;G-Code Files (*.mpr);;G-Code Files (*.cnc);;"
"G-Code Files (*.ncc);;G-Code Files (*.ncg);;G-Code Files (*.ncp);;"
"G-Code Files (*.ngc);;G-Code Files (*.out);;G-Code Files (*.ply);;"
"G-Code Files (*.sbp);;G-Code Files (*.tap);;G-Code Files (*.xpi);;"
"All Files (*.*)",
# CNC Job Options
"cncjob_prepend": "",
@ -846,7 +877,7 @@ class App(QtCore.QObject):
"fa_excellon": 'drd, drl, exc, ncd, tap, xln',
"fa_gcode": 'cnc, din, dnc, ecs, eia, fan, fgc, fnc, gc, gcd, gcode, h, hnc, i, min, mpf, mpr, nc, ncc, '
'ncg, ncp, ngc, out, plt, ply, rol, sbp, tap, xpi',
"fa_gerber": 'art, bot, bsm, cmp, crc, crs, dim, g4, gb0, gb1, gb2, gb3, gb5, gb6, gb7, gb8, gb9, gbd, '
"fa_gerber": 'art, bot, bsm, cmp, crc, crs, dim, gb0, gb1, gb2, gb3, gb4, gb5, gb6, gb7, gb8, gb9, gbd, '
'gbl, gbo, gbp, gbr, gbs, gdo, ger, gko, gm1, gm2, gm3, grb, gtl, gto, gtp, gts, ly15, ly2, '
'mil, pho, plc, pls, smb, smt, sol, spb, spt, ssb, sst, stc, sts, top, tsm',
# Keyword list
@ -9357,7 +9388,7 @@ class App(QtCore.QObject):
name = self.collection.get_active().options["name"]
_filter = "Excellon File (*.DRL);;Excellon File (*.TXT);;All Files (*.*)"
_filter = self.defaults["excellon_save_filters"]
try:
filename, _f = QtWidgets.QFileDialog.getSaveFileName(
caption=_("Export Excellon"),
@ -9373,6 +9404,9 @@ class App(QtCore.QObject):
_("Export Excellon cancelled."))
return
else:
used_extension = filename.rpartition('.')[2]
obj.update_filters(last_ext=used_extension, filter_string='excellon_save_filters')
self.export_excellon(name, filename)
if self.defaults["global_open_style"] is False:
self.file_opened.emit("Excellon", filename)
@ -9401,7 +9435,7 @@ class App(QtCore.QObject):
name = self.collection.get_active().options["name"]
_filter_ = "Gerber File (*.GBR);;All Files (*.*)"
_filter_ = self.defaults['gerber_save_filters']
try:
filename, _f = QtWidgets.QFileDialog.getSaveFileName(
caption=_("Export Gerber"),
@ -9417,6 +9451,9 @@ class App(QtCore.QObject):
_("Export Gerber cancelled."))
return
else:
used_extension = filename.rpartition('.')[2]
obj.update_filters(last_ext=used_extension, filter_string='gerber_save_filters')
self.export_gerber(name, filename)
if self.defaults["global_open_style"] is False:
self.file_opened.emit("Gerber", filename)

View File

@ -412,6 +412,43 @@ class FlatCAMObj(QtCore.QObject):
key = self.mark_shapes[apid].add(tolerance=self.drawing_tolerance, **kwargs)
return key
def update_filters(self, last_ext, filter_string):
"""
Will modify the filter string that is used when saving a file (a list of file extensions) to have the last
used file extension as the first one in the special string
:param last_ext: the file extension that was last used to save a file
:param filter_string: a key in self.app.defaults that holds a string with the filter from QFileDialog
used when saving a file
:return: None
"""
filters = copy(self.app.defaults[filter_string])
filter_list = filters.split(';;')
filter_list_enum_1 = enumerate(filter_list)
# search for the last element in the filters which should always be "All Files (*.*)"
last_elem = ''
for elem in list(filter_list_enum_1):
if '(*.*)' in elem[1]:
last_elem = filter_list.pop(elem[0])
filter_list_enum = enumerate(filter_list)
for elem in list(filter_list_enum):
if '.' + last_ext in elem[1]:
used_ext = filter_list.pop(elem[0])
# sort the extensions back
filter_list.sort(key=lambda x: x.rpartition('.')[2])
# add as a first element the last used extension
filter_list.insert(0, used_ext)
# add back the element that should always be the last (All Files)
filter_list.append(last_elem)
self.app.defaults[filter_string] = ';;'.join(filter_list)
return
@staticmethod
def poly2rings(poly):
return [poly.exterior] + [interior for interior in poly.interiors]
@ -6043,16 +6080,15 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
self.read_form()
name = self.app.collection.get_active().options['name']
save_gcode = False
if 'Roland' in self.pp_excellon_name or 'Roland' in self.pp_geometry_name:
_filter_ = "RML1 Files (*.rol);;" \
"All Files (*.*)"
_filter_ = "RML1 Files (*.rol);;All Files (*.*)"
elif 'hpgl' in self.pp_geometry_name:
_filter_ = "HPGL Files (*.plt);;" \
"All Files (*.*)"
_filter_ = "HPGL Files (*.plt);;All Files (*.*)"
else:
_filter_ = "G-Code Files (*.nc);;G-Code Files (*.txt);;G-Code Files (*.tap);;G-Code Files (*.ngc);;" \
"G-Code Files (*.cnc);;G-Code Files (*.g-code);;All Files (*.*);;G-Code Files (*.gcode)"
save_gcode = True
_filter_ = self.app.defaults['cncjob_save_filters']
try:
dir_file_to_save = self.app.get_last_save_folder() + '/' + str(name)
@ -6067,9 +6103,12 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
filename = str(filename)
if filename == '':
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Export Machine Code cancelled ..."))
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Export Machine Code cancelled ..."))
return
else:
if save_gcode is True:
used_extension = filename.rpartition('.')[2]
self.update_filters(last_ext=used_extension, filter_string='cncjob_save_filters')
new_name = os.path.split(str(filename))[1].rpartition('.')[0]
self.ui.name_entry.set_value(new_name)

View File

@ -11,7 +11,7 @@ CAD program, and create G-Code for Isolation routing.
15.11.2019
- added the .gcode extension to the GCode saving dialog filter
- added all the recognized extensions to the save dialog filters; latest extension used will be preselected next time a save operation occur
14.11.2019