- in ParseGerber class fixed simplification controlled by the Preferences parameter

- in ParseGerber class made logs use the self.app.log handler which in turn can output messages in the Tcl Shell
This commit is contained in:
Marius Stanciu
2020-12-15 17:52:07 +02:00
committed by Marius
parent a785aabdcc
commit 66bb202a17
2 changed files with 110 additions and 107 deletions

View File

@@ -9,7 +9,9 @@ CHANGELOG for FlatCAM beta
15.12.2020 15.12.2020
- modified the way that the plotcanvas widget is added - modified the way that the PlotCanvas widget is added
- in ParseGerber class fixed simplification controlled by the Preferences parameter
- in ParseGerber class made logs use the self.app.log handler which in turn can output messages in the Tcl Shell
14.12.2020 14.12.2020

View File

@@ -432,7 +432,7 @@ class Gerber(Geometry):
# Cleanup # # Cleanup #
gline = gline.strip(' \r\n') gline = gline.strip(' \r\n')
# log.debug("Line=%3s %s" % (line_num, gline)) # self.app.log.debug("Line=%3s %s" % (line_num, gline))
# ############################################################### # ###############################################################
# ################ Ignored lines ############################ # ################ Ignored lines ############################
@@ -471,11 +471,10 @@ class Gerber(Geometry):
geo_dict['follow'] = geo_f geo_dict['follow'] = geo_f
geo_s = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4)) geo_s = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4))
if self.app.defaults['gerber_simplification']:
geo_s = geo_s.simplify(s_tol)
if not geo_s.is_empty and geo_s.is_valid: if not geo_s.is_empty and geo_s.is_valid:
if self.app.defaults['gerber_simplification']: poly_buffer.append(geo_s)
poly_buffer.append(geo_s.simplify(s_tol))
else:
poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
@@ -523,12 +522,12 @@ class Gerber(Geometry):
self.gerber_zeros = match.group(1) self.gerber_zeros = match.group(1)
self.int_digits = int(match.group(3)) self.int_digits = int(match.group(3))
self.frac_digits = int(match.group(4)) self.frac_digits = int(match.group(4))
log.debug("Gerber format found. (%s) " % str(gline)) self.app.log.debug("Gerber format found. (%s) " % str(gline))
log.debug( self.app.log.debug(
"Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros, " "Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros, "
"D-no zero supression)" % self.gerber_zeros) "D-no zero supression)" % self.gerber_zeros)
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute) self.app.log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
continue continue
# ################################################################ # ################################################################
@@ -538,7 +537,7 @@ class Gerber(Geometry):
match = self.mode_re.search(gline) match = self.mode_re.search(gline)
if match: if match:
self.units = match.group(1) self.units = match.group(1)
log.debug("Gerber units found = %s" % self.units) self.app.log.debug("Gerber units found = %s" % self.units)
# Changed for issue #80 # Changed for issue #80
# self.convert_units(match.group(1)) # self.convert_units(match.group(1))
self.conversion_done = True self.conversion_done = True
@@ -554,14 +553,14 @@ class Gerber(Geometry):
self.gerber_zeros = match.group(1) self.gerber_zeros = match.group(1)
self.int_digits = int(match.group(3)) self.int_digits = int(match.group(3))
self.frac_digits = int(match.group(4)) self.frac_digits = int(match.group(4))
log.debug("Gerber format found. (%s) " % str(gline)) self.app.log.debug("Gerber format found. (%s) " % str(gline))
log.debug( self.app.log.debug(
"Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros, " "Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros, "
"D-no zero suppression)" % self.gerber_zeros) "D-no zero suppression)" % self.gerber_zeros)
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute) self.app.log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
self.units = match.group(5) self.units = match.group(5)
log.debug("Gerber units found = %s" % self.units) self.app.log.debug("Gerber units found = %s" % self.units)
# Changed for issue #80 # Changed for issue #80
# self.convert_units(match.group(5)) # self.convert_units(match.group(5))
self.conversion_done = True self.conversion_done = True
@@ -583,14 +582,15 @@ class Gerber(Geometry):
self.int_digits = int(match.group(4)) self.int_digits = int(match.group(4))
self.frac_digits = int(match.group(5)) self.frac_digits = int(match.group(5))
log.debug("Gerber format found. (%s) " % str(gline)) self.app.log.debug("Gerber format found. (%s) " % str(gline))
log.debug( self.app.log.debug(
"Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros, " "Gerber format found. Gerber zeros = %s (L-omit leading zeros, T-omit trailing zeros, "
"D-no zerosuppressionn)" % self.gerber_zeros) "D-no zerosuppressionn)" % self.gerber_zeros)
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute) self.app.log.debug(
"Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
self.units = match.group(1) self.units = match.group(1)
log.debug("Gerber units found = %s" % self.units) self.app.log.debug("Gerber units found = %s" % self.units)
# Changed for issue #80 # Changed for issue #80
# self.convert_units(match.group(5)) # self.convert_units(match.group(5))
self.conversion_done = True self.conversion_done = True
@@ -603,7 +603,7 @@ class Gerber(Geometry):
if match: if match:
obs_gerber_units = {'0': 'IN', '1': 'MM'}[match.group(1)] obs_gerber_units = {'0': 'IN', '1': 'MM'}[match.group(1)]
self.units = obs_gerber_units self.units = obs_gerber_units
log.warning("Gerber obsolete units found = %s" % obs_gerber_units) self.app.log.warning("Gerber obsolete units found = %s" % obs_gerber_units)
# Changed for issue #80 # Changed for issue #80
# self.convert_units({'0': 'IN', '1': 'MM'}[match.group(1)]) # self.convert_units({'0': 'IN', '1': 'MM'}[match.group(1)])
self.conversion_done = True self.conversion_done = True
@@ -615,7 +615,8 @@ class Gerber(Geometry):
match = self.absrel_re.search(gline) match = self.absrel_re.search(gline)
if match: if match:
absolute = {'0': "Absolute", '1': "Relative"}[match.group(1)] absolute = {'0': "Absolute", '1': "Relative"}[match.group(1)]
log.warning("Gerber obsolete coordinates type found = %s (Absolute or Relative) " % absolute) self.app.log.warning(
"Gerber obsolete coordinates type found = %s (Absolute or Relative) " % absolute)
continue continue
# ################################################################ # ################################################################
@@ -628,7 +629,7 @@ class Gerber(Geometry):
match = self.am1_re.search(gline) match = self.am1_re.search(gline)
# Start macro if match, else not an AM, carry on. # Start macro if match, else not an AM, carry on.
if match: if match:
log.debug("Starting macro. Line %d: %s" % (line_num, gline)) self.app.log.debug("Starting macro. Line %d: %s" % (line_num, gline))
current_macro = match.group(1) current_macro = match.group(1)
self.aperture_macros[current_macro] = ApertureMacro(name=current_macro) self.aperture_macros[current_macro] = ApertureMacro(name=current_macro)
if match.group(2): # Append if match.group(2): # Append
@@ -636,13 +637,13 @@ class Gerber(Geometry):
if match.group(3): # Finish macro if match.group(3): # Finish macro
# self.aperture_macros[current_macro].parse_content() # self.aperture_macros[current_macro].parse_content()
current_macro = None current_macro = None
log.debug("Macro complete in 1 line.") self.app.log.debug("Macro complete in 1 line.")
continue continue
else: # Continue macro else: # Continue macro
log.debug("Continuing macro. Line %d." % line_num) self.app.log.debug("Continuing macro. Line %d." % line_num)
match = self.am2_re.search(gline) match = self.am2_re.search(gline)
if match: # Finish macro if match: # Finish macro
log.debug("End of macro. Line %d." % line_num) self.app.log.debug("End of macro. Line %d." % line_num)
self.aperture_macros[current_macro].append(match.group(1)) self.aperture_macros[current_macro].append(match.group(1))
# self.aperture_macros[current_macro].parse_content() # self.aperture_macros[current_macro].parse_content()
current_macro = None current_macro = None
@@ -673,7 +674,7 @@ class Gerber(Geometry):
# --- Buffered --- # --- Buffered ---
try: try:
# log.debug("Bare op-code %d." % current_operation_code) # self.app.log.debug("Bare op-code %d." % current_operation_code)
geo_dict = {} geo_dict = {}
flash = self.create_flash_geometry( flash = self.create_flash_geometry(
Point(current_x, current_y), self.apertures[current_aperture], Point(current_x, current_y), self.apertures[current_aperture],
@@ -683,9 +684,8 @@ class Gerber(Geometry):
if not flash.is_empty: if not flash.is_empty:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(flash.simplify(s_tol)) flash = flash.simplify(s_tol)
else: poly_buffer.append(flash)
poly_buffer.append(flash)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = flash geo_dict['clear'] = flash
@@ -710,7 +710,7 @@ class Gerber(Geometry):
match = self.tool_re.search(gline) match = self.tool_re.search(gline)
if match: if match:
current_aperture = match.group(1) current_aperture = match.group(1)
# log.debug("Line %d: Aperture change to (%s)" % (line_num, current_aperture)) # self.app.log.debug("Line %d: Aperture change to (%s)" % (line_num, current_aperture))
# If the aperture value is zero then make it something quite small but with a non-zero value # If the aperture value is zero then make it something quite small but with a non-zero value
# so it can be processed by FlatCAM. # so it can be processed by FlatCAM.
@@ -719,7 +719,7 @@ class Gerber(Geometry):
if self.apertures[current_aperture]["type"] != "AM": if self.apertures[current_aperture]["type"] != "AM":
if self.apertures[current_aperture]["size"] == 0: if self.apertures[current_aperture]["size"] == 0:
self.apertures[current_aperture]["size"] = 10 ** -self.decimals self.apertures[current_aperture]["size"] = 10 ** -self.decimals
# log.debug(self.apertures[current_aperture]) # self.app.log.debug(self.apertures[current_aperture])
# Take care of the current path with the previous tool # Take care of the current path with the previous tool
try: try:
@@ -741,11 +741,11 @@ class Gerber(Geometry):
# --- Buffered ---- # --- Buffered ----
width = self.apertures[last_path_aperture]["size"] width = self.apertures[last_path_aperture]["size"]
geo_s = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4)) geo_s = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4))
if self.app.defaults['gerber_simplification']:
geo_s = geo_s.simplify(s_tol)
if not geo_s.is_empty: if not geo_s.is_empty:
if self.app.defaults['gerber_simplification']: poly_buffer.append(geo_s)
poly_buffer.append(geo_s.simplify(s_tol))
else:
poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
else: else:
@@ -781,11 +781,12 @@ class Gerber(Geometry):
# --- Buffered ---- # --- Buffered ----
width = self.apertures[last_path_aperture]["size"] width = self.apertures[last_path_aperture]["size"]
geo_s = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4)) geo_s = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4))
if not geo_s.is_empty: if not geo_s.is_empty:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(geo_s.simplify(s_tol)) geo_s = geo_s.simplify(s_tol)
else:
poly_buffer.append(geo_s) poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
else: else:
@@ -832,9 +833,9 @@ class Gerber(Geometry):
if geo_s: if geo_s:
if not geo_s.is_empty: if not geo_s.is_empty:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(geo_s.simplify(s_tol)) geo_s = geo_s.simplify(s_tol)
else:
poly_buffer.append(geo_s) poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
else: else:
@@ -880,9 +881,9 @@ class Gerber(Geometry):
region_s = region_s.buffer(0, int(self.steps_per_circle)) region_s = region_s.buffer(0, int(self.steps_per_circle))
if not region_s.is_empty: if not region_s.is_empty:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(region_s.simplify(s_tol)) region_s = region_s.simplify(s_tol)
else:
poly_buffer.append(region_s) poly_buffer.append(region_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = region_s geo_dict['clear'] = region_s
@@ -974,9 +975,9 @@ class Gerber(Geometry):
) )
if not flash.is_empty: if not flash.is_empty:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(flash.simplify(s_tol)) flash = flash.simplify(s_tol)
else:
poly_buffer.append(flash) poly_buffer.append(flash)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = flash geo_dict['clear'] = flash
@@ -1001,7 +1002,7 @@ class Gerber(Geometry):
maxx = max(path[0][0], path[1][0]) + width / 2 maxx = max(path[0][0], path[1][0]) + width / 2
miny = min(path[0][1], path[1][1]) - height / 2 miny = min(path[0][1], path[1][1]) - height / 2
maxy = max(path[0][1], path[1][1]) + height / 2 maxy = max(path[0][1], path[1][1]) + height / 2
log.debug("Coords: %s - %s - %s - %s" % (minx, miny, maxx, maxy)) self.app.log.debug("Coords: %s - %s - %s - %s" % (minx, miny, maxx, maxy))
geo_dict = {} geo_dict = {}
geo_f = Point([current_x, current_y]) geo_f = Point([current_x, current_y])
@@ -1010,9 +1011,9 @@ class Gerber(Geometry):
geo_s = shply_box(minx, miny, maxx, maxy) geo_s = shply_box(minx, miny, maxx, maxy)
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(geo_s.simplify(s_tol)) geo_s = geo_s.simplify(s_tol)
else:
poly_buffer.append(geo_s) poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
@@ -1072,7 +1073,7 @@ class Gerber(Geometry):
follow_buffer.append(geo_f) follow_buffer.append(geo_f)
geo_dict['follow'] = geo_f geo_dict['follow'] = geo_f
except Exception as e: except Exception as e:
log.debug("camlib.Gerber.parse_lines() --> %s" % str(e)) self.app.log.debug("camlib.Gerber.parse_lines() --> %s" % str(e))
if not geo_f.is_empty: if not geo_f.is_empty:
follow_buffer.append(geo_f) follow_buffer.append(geo_f)
geo_dict['follow'] = geo_f geo_dict['follow'] = geo_f
@@ -1106,20 +1107,20 @@ class Gerber(Geometry):
if self.apertures[last_path_aperture]["type"] != 'R': if self.apertures[last_path_aperture]["type"] != 'R':
if not geo_s.is_empty: if not geo_s.is_empty:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(geo_s.simplify(s_tol)) geo_s = geo_s.simplify(s_tol)
else:
poly_buffer.append(geo_s) poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
else: else:
geo_dict['solid'] = geo_s geo_dict['solid'] = geo_s
except Exception as e: except Exception as e:
log.debug("camlib.Gerber.parse_lines() --> %s" % str(e)) self.app.log.debug("camlib.Gerber.parse_lines() --> %s" % str(e))
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(geo_s.simplify(s_tol)) geo_s = geo_s.simplify(s_tol)
else:
poly_buffer.append(geo_s) poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
@@ -1163,7 +1164,7 @@ class Gerber(Geometry):
follow_buffer.append(geo_f) follow_buffer.append(geo_f)
geo_dict['follow'] = geo_f geo_dict['follow'] = geo_f
except Exception as e: except Exception as e:
log.debug("camlib.Gerber.parse_lines() --> G01 match D03 --> %s" % str(e)) self.app.log.debug("camlib.Gerber.parse_lines() --> G01 match D03 --> %s" % str(e))
follow_buffer.append(geo_f) follow_buffer.append(geo_f)
geo_dict['follow'] = geo_f geo_dict['follow'] = geo_f
@@ -1174,9 +1175,9 @@ class Gerber(Geometry):
try: try:
if self.apertures[last_path_aperture]["type"] != 'R': if self.apertures[last_path_aperture]["type"] != 'R':
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(geo_s.simplify(s_tol)) geo_s = geo_s.simplify(s_tol)
else:
poly_buffer.append(geo_s) poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
@@ -1184,9 +1185,9 @@ class Gerber(Geometry):
geo_dict['solid'] = geo_s geo_dict['solid'] = geo_s
except Exception: except Exception:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(geo_s.simplify(s_tol)) geo_s = geo_s.simplify(s_tol)
else:
poly_buffer.append(geo_s) poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
@@ -1219,9 +1220,9 @@ class Gerber(Geometry):
if not flash.is_empty: if not flash.is_empty:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(flash.simplify(s_tol)) flash = flash.simplify(s_tol)
else:
poly_buffer.append(flash) poly_buffer.append(flash)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = flash geo_dict['clear'] = flash
@@ -1239,7 +1240,7 @@ class Gerber(Geometry):
current_x = linear_x current_x = linear_x
current_y = linear_y current_y = linear_y
# log.debug("Line_number=%3s X=%s Y=%s (%s)" % (line_num, linear_x, linear_y, gline)) # self.app.log.debug("Line_number=%3s X=%s Y=%s (%s)" % (line_num, linear_x, linear_y, gline))
continue continue
# ################################################################ # ################################################################
@@ -1332,9 +1333,9 @@ class Gerber(Geometry):
buffered = LineString(path).buffer(width / 1.999, int(self.steps_per_circle)) buffered = LineString(path).buffer(width / 1.999, int(self.steps_per_circle))
if not buffered.is_empty: if not buffered.is_empty:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(buffered.simplify(s_tol)) buffered = buffered.simplify(s_tol)
else:
poly_buffer.append(buffered) poly_buffer.append(buffered)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = buffered geo_dict['clear'] = buffered
@@ -1399,7 +1400,7 @@ class Gerber(Geometry):
] ]
valid = False valid = False
log.debug("I: %f J: %f" % (i, j)) self.app.log.debug("I: %f J: %f" % (i, j))
for center in center_candidates: for center in center_candidates:
radius = np.sqrt(i ** 2 + j ** 2) radius = np.sqrt(i ** 2 + j ** 2)
@@ -1415,14 +1416,14 @@ class Gerber(Geometry):
start = np.arctan2(-j, -i) # Start angle start = np.arctan2(-j, -i) # Start angle
stop = np.arctan2(-center[1] + circular_y, -center[0] + circular_x) # Stop angle stop = np.arctan2(-center[1] + circular_y, -center[0] + circular_x) # Stop angle
angle = abs(arc_angle(start, stop, arcdir[current_interpolation_mode])) angle = abs(arc_angle(start, stop, arcdir[current_interpolation_mode]))
log.debug("ARC START: %f, %f CENTER: %f, %f STOP: %f, %f" % self.app.log.debug("ARC START: %f, %f CENTER: %f, %f STOP: %f, %f" %
(current_x, current_y, center[0], center[1], circular_x, circular_y)) (current_x, current_y, center[0], center[1], circular_x, circular_y))
log.debug("START Ang: %f, STOP Ang: %f, DIR: %s, ABS: %.12f <= %.12f: %s" % self.app.log.debug("START Ang: %f, STOP Ang: %f, DIR: %s, ABS: %.12f <= %.12f: %s" %
(start * 180 / np.pi, stop * 180 / np.pi, arcdir[current_interpolation_mode], (start * 180 / np.pi, stop * 180 / np.pi, arcdir[current_interpolation_mode],
angle * 180 / np.pi, np.pi / 2 * 180 / np.pi, angle <= (np.pi + 1e-6) / 2)) angle * 180 / np.pi, np.pi / 2 * 180 / np.pi, angle <= (np.pi + 1e-6) / 2))
if angle <= (np.pi + 1e-6) / 2: if angle <= (np.pi + 1e-6) / 2:
log.debug("########## ACCEPTING ARC ############") self.app.log.debug("########## ACCEPTING ARC ############")
this_arc = arc(center, radius, start, stop, this_arc = arc(center, radius, start, stop,
arcdir[current_interpolation_mode], arcdir[current_interpolation_mode],
self.steps_per_circle) self.steps_per_circle)
@@ -1442,7 +1443,7 @@ class Gerber(Geometry):
if valid: if valid:
continue continue
else: else:
log.warning("Invalid arc in line %d." % line_num) self.app.log.warning("Invalid arc in line %d." % line_num)
# ################################################################ # ################################################################
# ######### EOF - END OF FILE #################################### # ######### EOF - END OF FILE ####################################
@@ -1454,7 +1455,7 @@ class Gerber(Geometry):
# ################################################################ # ################################################################
# ######### Line did not match any pattern. Warn user. ########## # ######### Line did not match any pattern. Warn user. ##########
# ################################################################ # ################################################################
log.warning("Line ignored (%d): %s" % (line_num, gline)) self.app.log.warning("Line ignored (%d): %s" % (line_num, gline))
# provide the app with a way to process the GUI events when in a blocking loop # provide the app with a way to process the GUI events when in a blocking loop
QtWidgets.QApplication.processEvents() QtWidgets.QApplication.processEvents()
@@ -1485,9 +1486,9 @@ class Gerber(Geometry):
geo_s = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4)) geo_s = LineString(path).buffer(width / 1.999, int(self.steps_per_circle / 4))
if not geo_s.is_empty: if not geo_s.is_empty:
if self.app.defaults['gerber_simplification']: if self.app.defaults['gerber_simplification']:
poly_buffer.append(geo_s.simplify(s_tol)) geo_s = geo_s.simplify(s_tol)
else:
poly_buffer.append(geo_s) poly_buffer.append(geo_s)
if self.is_lpc is True: if self.is_lpc is True:
geo_dict['clear'] = geo_s geo_dict['clear'] = geo_s
@@ -1527,7 +1528,7 @@ class Gerber(Geometry):
self.app.inform.emit('%s: %d.' % (_("Gerber processing. Joining polygons"), buff_length)) self.app.inform.emit('%s: %d.' % (_("Gerber processing. Joining polygons"), buff_length))
if self.use_buffer_for_union: if self.use_buffer_for_union:
log.debug("Union by buffer...") self.app.log.debug("Union by buffer...")
new_poly = MultiPolygon(poly_buffer) new_poly = MultiPolygon(poly_buffer)
if self.app.defaults["gerber_buffering"] == 'full': if self.app.defaults["gerber_buffering"] == 'full':
@@ -1536,7 +1537,7 @@ class Gerber(Geometry):
log.warning("Union(buffer) done.") log.warning("Union(buffer) done.")
else: else:
log.debug("Union by union()...") self.app.log.debug("Union by union()...")
new_poly = unary_union(poly_buffer) new_poly = unary_union(poly_buffer)
new_poly = new_poly.buffer(0, int(self.steps_per_circle / 4)) new_poly = new_poly.buffer(0, int(self.steps_per_circle / 4))
log.warning("Union done.") log.warning("Union done.")
@@ -1717,10 +1718,10 @@ class Gerber(Geometry):
:return: None :return: None
""" """
log.debug("parseGerber.Gerber.bounds()") self.app.log.debug("parseGerber.Gerber.bounds()")
if self.solid_geometry is None: if self.solid_geometry is None:
log.debug("solid_geometry is None") self.app.log.debug("solid_geometry is None")
return 0, 0, 0, 0 return 0, 0, 0, 0
def bounds_rec(obj): def bounds_rec(obj):
@@ -1743,7 +1744,7 @@ class Gerber(Geometry):
try: try:
minx_, miny_, maxx_, maxy_ = bounds_rec(k) minx_, miny_, maxx_, maxy_ = bounds_rec(k)
except Exception as e: except Exception as e:
log.debug("camlib.Gerber.bounds() --> %s" % str(e)) self.app.log.debug("camlib.Gerber.bounds() --> %s" % str(e))
return return
minx = min(minx, minx_) minx = min(minx, minx_)
@@ -1771,18 +1772,18 @@ class Gerber(Geometry):
""" """
if obj_units.upper() == self.units.upper(): if obj_units.upper() == self.units.upper():
log.debug("parseGerber.Gerber.convert_units() --> Factor: 1") self.app.log.debug("parseGerber.Gerber.convert_units() --> Factor: 1")
return 1.0 return 1.0
if obj_units.upper() == "MM": if obj_units.upper() == "MM":
factor = 25.4 factor = 25.4
log.debug("parseGerber.Gerber.convert_units() --> Factor: 25.4") self.app.log.debug("parseGerber.Gerber.convert_units() --> Factor: 25.4")
elif obj_units.upper() == "IN": elif obj_units.upper() == "IN":
factor = 1 / 25.4 factor = 1 / 25.4
log.debug("parseGerber.Gerber.convert_units() --> Factor: %s" % str(1 / 25.4)) self.app.log.debug("parseGerber.Gerber.convert_units() --> Factor: %s" % str(1 / 25.4))
else: else:
log.error("Unsupported units: %s" % str(obj_units)) self.app.log.error("Unsupported units: %s" % str(obj_units))
log.debug("parseGerber.Gerber.convert_units() --> Factor: 1") self.app.log.debug("parseGerber.Gerber.convert_units() --> Factor: 1")
return 1.0 return 1.0
self.units = obj_units self.units = obj_units
@@ -1803,7 +1804,7 @@ class Gerber(Geometry):
:return: None :return: None
""" """
log.debug("appParsers.ParseGerber.Gerber.import_svg()") self.app.log.debug("appParsers.ParseGerber.Gerber.import_svg()")
# Parse into list of shapely objects # Parse into list of shapely objects
svg_tree = ET.parse(filename) svg_tree = ET.parse(filename)
@@ -1886,7 +1887,7 @@ class Gerber(Geometry):
:return: None :return: None
""" """
log.debug("Parsing DXF file geometry into a Gerber object geometry.") self.app.log.debug("Parsing DXF file geometry into a Gerber object geometry.")
# Parse into list of shapely objects # Parse into list of shapely objects
dxf = ezdxf.readfile(filename) dxf = ezdxf.readfile(filename)
geos = getdxfgeo(dxf) geos = getdxfgeo(dxf)
@@ -1947,7 +1948,7 @@ class Gerber(Geometry):
:param point: reference point for scaling operation :param point: reference point for scaling operation
:rtype : None :rtype : None
""" """
log.debug("parseGerber.Gerber.scale()") self.app.log.debug("parseGerber.Gerber.scale()")
try: try:
xfactor = float(xfactor) xfactor = float(xfactor)
@@ -2040,7 +2041,7 @@ class Gerber(Geometry):
pass pass
except Exception as e: except Exception as e:
log.debug('camlib.Gerber.scale() Exception --> %s' % str(e)) self.app.log.debug('ParseGerber.Gerber.scale() Exception --> %s' % str(e))
return 'fail' return 'fail'
self.app.inform.emit('[success] %s' % _("Done.")) self.app.inform.emit('[success] %s' % _("Done."))
@@ -2073,7 +2074,7 @@ class Gerber(Geometry):
:type vect: tuple :type vect: tuple
:return: None :return: None
""" """
log.debug("parseGerber.Gerber.offset()") self.app.log.debug("ParseGerber.Gerber.offset()")
try: try:
dx, dy = vect dx, dy = vect
@@ -2131,7 +2132,7 @@ class Gerber(Geometry):
geo_el['clear'] = offset_geom(geo_el['clear']) geo_el['clear'] = offset_geom(geo_el['clear'])
except Exception as e: except Exception as e:
log.debug('camlib.Gerber.offset() Exception --> %s' % str(e)) self.app.log.debug('ParseGerber.Gerber.offset() Exception --> %s' % str(e))
return 'fail' return 'fail'
self.app.inform.emit('[success] %s' % _("Done.")) self.app.inform.emit('[success] %s' % _("Done."))
@@ -2158,7 +2159,7 @@ class Gerber(Geometry):
:type point: list :type point: list
:return: None :return: None
""" """
log.debug("parseGerber.Gerber.mirror()") self.app.log.debug("parseGerber.Gerber.mirror()")
px, py = point px, py = point
xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis] xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis]
@@ -2206,7 +2207,7 @@ class Gerber(Geometry):
if 'clear' in geo_el: if 'clear' in geo_el:
geo_el['clear'] = mirror_geom(geo_el['clear']) geo_el['clear'] = mirror_geom(geo_el['clear'])
except Exception as e: except Exception as e:
log.debug('camlib.Gerber.mirror() Exception --> %s' % str(e)) self.app.log.debug('ParseGerber.Gerber.mirror() Exception --> %s' % str(e))
return 'fail' return 'fail'
self.app.inform.emit('[success] %s' % _("Done.")) self.app.inform.emit('[success] %s' % _("Done."))
@@ -2230,7 +2231,7 @@ class Gerber(Geometry):
:param point: reference point for skewing operation :param point: reference point for skewing operation
:return None :return None
""" """
log.debug("parseGerber.Gerber.skew()") self.app.log.debug("parseGerber.Gerber.skew()")
px, py = point px, py = point
@@ -2280,7 +2281,7 @@ class Gerber(Geometry):
if 'clear' in geo_el: if 'clear' in geo_el:
geo_el['clear'] = skew_geom(geo_el['clear']) geo_el['clear'] = skew_geom(geo_el['clear'])
except Exception as e: except Exception as e:
log.debug('camlib.Gerber.skew() Exception --> %s' % str(e)) self.app.log.debug('ParseGerber.Gerber.skew() Exception --> %s' % str(e))
return 'fail' return 'fail'
self.app.inform.emit('[success] %s' % _("Done.")) self.app.inform.emit('[success] %s' % _("Done."))
@@ -2293,7 +2294,7 @@ class Gerber(Geometry):
:param point: :param point:
:return: :return:
""" """
log.debug("parseGerber.Gerber.rotate()") self.app.log.debug("parseGerber.Gerber.rotate()")
px, py = point px, py = point
@@ -2343,7 +2344,7 @@ class Gerber(Geometry):
if 'clear' in geo_el: if 'clear' in geo_el:
geo_el['clear'] = rotate_geom(geo_el['clear']) geo_el['clear'] = rotate_geom(geo_el['clear'])
except Exception as e: except Exception as e:
log.debug('camlib.Gerber.rotate() Exception --> %s' % str(e)) self.app.log.debug('ParseGerber.Gerber.rotate() Exception --> %s' % str(e))
return 'fail' return 'fail'
self.app.inform.emit('[success] %s' % _("Done.")) self.app.inform.emit('[success] %s' % _("Done."))
self.app.proc_container.new_text = '' self.app.proc_container.new_text = ''
@@ -2356,7 +2357,7 @@ class Gerber(Geometry):
:param factor: True or False (None) :param factor: True or False (None)
:return: :return:
""" """
log.debug("parseGerber.Gerber.buffer()") self.app.log.debug("parseGerber.Gerber.buffer()")
if distance == 0: if distance == 0:
return return
@@ -2431,7 +2432,7 @@ class Gerber(Geometry):
except KeyError: except KeyError:
pass pass
except Exception as e: except Exception as e:
log.debug('camlib.Gerber.buffer() Exception --> %s' % str(e)) self.app.log.debug('ParseGerber.Gerber.buffer() Exception --> %s' % str(e))
return 'fail' return 'fail'
else: else:
try: try:
@@ -2476,7 +2477,7 @@ class Gerber(Geometry):
geo_p = shply_box(minx, miny, maxx, maxy) geo_p = shply_box(minx, miny, maxx, maxy)
new_geo_el['solid'] = geo_p new_geo_el['solid'] = geo_p
else: else:
log.debug("appParsers.ParseGerber.Gerber.buffer() --> " self.app.log.debug("appParsers.ParseGerber.Gerber.buffer() --> "
"ap type not supported") "ap type not supported")
else: else:
new_geo_el['solid'] = geo_el['follow'].buffer( new_geo_el['solid'] = geo_el['follow'].buffer(
@@ -2489,7 +2490,7 @@ class Gerber(Geometry):
self.apertures[apid]['geometry'] = deepcopy(new_geometry) self.apertures[apid]['geometry'] = deepcopy(new_geometry)
except Exception as e: except Exception as e:
log.debug('camlib.Gerber.buffer() Exception --> %s' % str(e)) self.app.log.debug('ParseGerber.Gerber.buffer() Exception --> %s' % str(e))
return 'fail' return 'fail'
# make the new solid_geometry # make the new solid_geometry