- added support for Gerber format specification D (no zero suppression) - PCBWizard Gerber files support

This commit is contained in:
Marius Stanciu 2019-04-04 16:21:26 +03:00 committed by Marius
parent 4bbdeaf844
commit c623b8d63c
4 changed files with 33 additions and 20 deletions

View File

@ -1810,9 +1810,11 @@ class App(QtCore.QObject):
# Variable to store the GCODE that was edited
self.gcode_edited = ""
self.grb_list = ['gbr', 'ger', 'gtl', 'gbl', 'gts', 'gbs', 'gtp', 'gbp', 'gto', 'gbo', 'gm1', 'gm2', 'gm3', 'gko',
'cmp', 'sol', 'stc', 'sts', 'plc', 'pls', 'crc', 'crs', 'tsm', 'bsm', 'ly2', 'ly15', 'dim', 'mil',
'grb', 'top', 'bot', 'smt', 'smb', 'sst', 'ssb', 'spt', 'spb', 'pho', 'gdo', 'art', 'gbd']
self.grb_list = ['gbr', 'ger', 'gtl', 'gbl', 'gts', 'gbs', 'gtp', 'gbp', 'gto', 'gbo', 'gm1', 'gm2', 'gm3',
'gko', 'cmp', 'sol', 'stc', 'sts', 'plc', 'pls', 'crc', 'crs', 'tsm', 'bsm', 'ly2', 'ly15',
'dim', 'mil', 'grb', 'top', 'bot', 'smt', 'smb', 'sst', 'ssb', 'spt', 'spb', 'pho', 'gdo',
'art', 'gbd', 'gb0', 'gb1', 'gb2', 'gb3', 'g4', 'gb5', 'gb6', 'gb7', 'gb8', 'gb9'
]
self.exc_list = ['drl', 'txt', 'xln', 'drd', 'tap', 'exc']
self.gcode_list = ['nc', 'ncc', 'tap', 'gcode', 'cnc', 'ecs', 'fnc', 'dnc', 'ncg', 'gc', 'fan', 'fgc', 'din',
'xpi', 'hnc', 'h', 'i', 'ncp', 'min', 'gcd', 'rol', 'mpr', 'ply', 'out', 'eia', 'plt', 'sbp',
@ -5592,7 +5594,7 @@ class App(QtCore.QObject):
_filter_ = "Gerber Files (*.gbr *.ger *.gtl *.gbl *.gts *.gbs *.gtp *.gbp *.gto *.gbo *.gm1 *.gml *.gm3 *.gko " \
"*.cmp *.sol *.stc *.sts *.plc *.pls *.crc *.crs *.tsm *.bsm *.ly2 *.ly15 *.dim *.mil *.grb" \
"*.top *.bot *.smt *.smb *.sst *.ssb *.spt *.spb *.pho *.gdo *.art *.gbd);;" \
"*.top *.bot *.smt *.smb *.sst *.ssb *.spt *.spb *.pho *.gdo *.art *.gbd *.gb*);;" \
"Protel Files (*.gtl *.gbl *.gts *.gbs *.gto *.gbo *.gtp *.gbp *.gml *.gm1 *.gm3 *.gko);;" \
"Eagle Files (*.cmp *.sol *.stc *.sts *.plc *.pls *.crc *.crs *.tsm *.bsm *.ly2 *.ly15 *.dim *.mil);;" \
"OrCAD Files (*.top *.bot *.smt *.smb *.sst *.ssb *.spt *.spb);;" \

View File

@ -9,6 +9,10 @@ CAD program, and create G-Code for Isolation routing.
=================================================
4.04.2019
- added support for Gerber format specification D (no zero suppression) - PCBWizard Gerber files support
3.04.2019
- fixed plotting in Gerber Editor

View File

@ -1951,9 +1951,9 @@ class Gerber (Geometry):
#### Parser patterns ####
# FS - Format Specification
# The format of X and Y must be the same!
# L-omit leading zeros, T-omit trailing zeros
# L-omit leading zeros, T-omit trailing zeros, D-no zero supression
# A-absolute notation, I-incremental notation
self.fmt_re = re.compile(r'%?FS([LT])([AI])X(\d)(\d)Y\d\d\*%?$')
self.fmt_re = re.compile(r'%?FS([LTD])([AI])X(\d)(\d)Y\d\d\*%?$')
self.fmt_re_alt = re.compile(r'%FS([LT])([AI])X(\d)(\d)Y\d\d\*MO(IN|MM)\*%$')
self.fmt_re_orcad = re.compile(r'(G\d+)*\**%FS([LT])([AI]).*X(\d)(\d)Y\d\d\*%$')
@ -2289,8 +2289,8 @@ class Gerber (Geometry):
log.debug("Gerber format found. (%s) " % str(gline))
log.debug(
"Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros)" %
self.gerber_zeros)
"Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros, "
"D-no zero supression)" % self.gerber_zeros)
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
continue
@ -2313,8 +2313,8 @@ class Gerber (Geometry):
self.frac_digits = int(match.group(4))
log.debug("Gerber format found. (%s) " % str(gline))
log.debug(
"Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros)" %
self.gerber_zeros)
"Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros, "
"D-no zero suppression)" % self.gerber_zeros)
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
gerber_units = match.group(1)
@ -2337,8 +2337,8 @@ class Gerber (Geometry):
self.frac_digits = int(match.group(5))
log.debug("Gerber format found. (%s) " % str(gline))
log.debug(
"Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros)" %
self.gerber_zeros)
"Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros, "
"D-no zerosuppressionn)" % self.gerber_zeros)
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
gerber_units = match.group(1)
@ -7175,17 +7175,22 @@ def parse_gerber_number(strnumber, int_digits, frac_digits, zeros):
:param frac_digits: Number of digits used for the fractional
part of the number
:type frac_digits: int
:param zeros: If 'L', leading zeros are removed and trailing zeros are kept. If 'T', is in reverse.
:param zeros: If 'L', leading zeros are removed and trailing zeros are kept. Same situation for 'D' when
no zero suppression is done. If 'T', is in reverse.
:type zeros: str
:return: The number in floating point.
:rtype: float
"""
if zeros == 'L':
ret_val = None
if zeros == 'L' or zeros == 'D':
ret_val = int(strnumber) * (10 ** (-frac_digits))
if zeros == 'T':
int_val = int(strnumber)
ret_val = (int_val * (10 ** ((int_digits + frac_digits) - len(strnumber)))) * (10 ** (-frac_digits))
return ret_val

View File

@ -2774,35 +2774,37 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
if self.filename == "":
self.app.inform.emit("Open cancelled.")
else:
if self.filename.lower().rpartition('.')[-1] in self.app.grb_list:
extension = self.filename.lower().rpartition('.')[-1]
if extension in self.app.grb_list:
self.app.worker_task.emit({'fcn': self.app.open_gerber,
'params': [self.filename]})
else:
event.ignore()
if self.filename.lower().rpartition('.')[-1] in self.app.exc_list:
if extension in self.app.exc_list:
self.app.worker_task.emit({'fcn': self.app.open_excellon,
'params': [self.filename]})
else:
event.ignore()
if self.filename.lower().rpartition('.')[-1] in self.app.gcode_list:
if extension in self.app.gcode_list:
self.app.worker_task.emit({'fcn': self.app.open_gcode,
'params': [self.filename]})
else:
event.ignore()
if self.filename.lower().rpartition('.')[-1] in self.app.svg_list:
if extension in self.app.svg_list:
object_type = 'geometry'
self.app.worker_task.emit({'fcn': self.app.import_svg,
'params': [self.filename, object_type, None]})
if self.filename.lower().rpartition('.')[-1] in self.app.dxf_list:
if extension in self.app.dxf_list:
object_type = 'geometry'
self.app.worker_task.emit({'fcn': self.app.import_dxf,
'params': [self.filename, object_type, None]})
if self.filename.lower().rpartition('.')[-1] in self.app.prj_list:
if extension in self.app.prj_list:
# self.app.open_project() is not Thread Safe
self.app.open_project(self.filename)
else: