- fixed cutting from copper features when doing Gerber isolation with multiple passes
This commit is contained in:
parent
7e002dfc9f
commit
ddf4884051
|
@ -604,6 +604,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
||||||
geom = self.isolation_geometry(offset, iso_type=envelope_iso_type)
|
geom = self.isolation_geometry(offset, iso_type=envelope_iso_type)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.debug(str(e))
|
log.debug(str(e))
|
||||||
|
return 'fail'
|
||||||
|
|
||||||
if invert:
|
if invert:
|
||||||
try:
|
try:
|
||||||
|
@ -614,8 +615,10 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
||||||
geom = MultiPolygon(pl)
|
geom = MultiPolygon(pl)
|
||||||
elif type(geom) is Polygon:
|
elif type(geom) is Polygon:
|
||||||
geom = Polygon(geom.exterior.coords[::-1], geom.interiors)
|
geom = Polygon(geom.exterior.coords[::-1], geom.interiors)
|
||||||
|
else:
|
||||||
|
log.debug("FlatCAMGerber.isolate().generate_envelope() Error --> Unexpected Geometry")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
s = str("Unexpected Geometry")
|
log.debug("FlatCAMGerber.isolate().generate_envelope() Error --> %s" % str(e))
|
||||||
return geom
|
return geom
|
||||||
|
|
||||||
if combine:
|
if combine:
|
||||||
|
@ -633,14 +636,14 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
||||||
geo_obj.options["cnctooldia"] = self.options["isotooldia"]
|
geo_obj.options["cnctooldia"] = self.options["isotooldia"]
|
||||||
geo_obj.solid_geometry = []
|
geo_obj.solid_geometry = []
|
||||||
for i in range(passes):
|
for i in range(passes):
|
||||||
offset = (((2 * i + 1) / 2.0) * dia) - (i * overlap * dia)
|
iso_offset = (((2 * i + 1) / 2.0) * dia) - (i * overlap * dia)
|
||||||
|
|
||||||
# if milling type is climb then the move is counter-clockwise around features
|
# if milling type is climb then the move is counter-clockwise around features
|
||||||
if milling_type == 'cl':
|
if milling_type == 'cl':
|
||||||
# geom = generate_envelope (offset, i == 0)
|
# geom = generate_envelope (offset, i == 0)
|
||||||
geom = generate_envelope(offset, 1, envelope_iso_type=self.iso_type)
|
geom = generate_envelope(iso_offset, 1, envelope_iso_type=self.iso_type)
|
||||||
else:
|
else:
|
||||||
geom = generate_envelope(offset, 0, envelope_iso_type=self.iso_type)
|
geom = generate_envelope(iso_offset, 0, envelope_iso_type=self.iso_type)
|
||||||
geo_obj.solid_geometry.append(geom)
|
geo_obj.solid_geometry.append(geom)
|
||||||
|
|
||||||
# detect if solid_geometry is empty and this require list flattening which is "heavy"
|
# detect if solid_geometry is empty and this require list flattening which is "heavy"
|
||||||
|
|
|
@ -12,6 +12,7 @@ CAD program, and create G-Code for Isolation routing.
|
||||||
7.01.2019
|
7.01.2019
|
||||||
|
|
||||||
- added tooltips in Edit->Convert menu
|
- added tooltips in Edit->Convert menu
|
||||||
|
- fixed cutting from copper features when doing Gerber isolation with multiple passes
|
||||||
|
|
||||||
6.01.2019
|
6.01.2019
|
||||||
|
|
||||||
|
|
26
camlib.py
26
camlib.py
|
@ -519,14 +519,26 @@ class Geometry(object):
|
||||||
# geo_iso.append(mp_geo.buffer(offset, int(int(self.geo_steps_per_circle) / 4)))
|
# geo_iso.append(mp_geo.buffer(offset, int(int(self.geo_steps_per_circle) / 4)))
|
||||||
# except TypeError:
|
# except TypeError:
|
||||||
# geo_iso.append(self.solid_geometry.buffer(offset, int(int(self.geo_steps_per_circle) / 4)))
|
# geo_iso.append(self.solid_geometry.buffer(offset, int(int(self.geo_steps_per_circle) / 4)))
|
||||||
|
# return geo_iso
|
||||||
|
|
||||||
geo_iso = []
|
|
||||||
flattened_geo = self.flatten_list(self.solid_geometry)
|
# commented this because of the bug with multiple passes cutting out of the copper
|
||||||
try:
|
# geo_iso = []
|
||||||
for mp_geo in flattened_geo:
|
# flattened_geo = self.flatten_list(self.solid_geometry)
|
||||||
geo_iso.append(mp_geo.buffer(offset, int(int(self.geo_steps_per_circle) / 4)))
|
# try:
|
||||||
except TypeError:
|
# for mp_geo in flattened_geo:
|
||||||
geo_iso.append(self.solid_geometry.buffer(offset, int(int(self.geo_steps_per_circle) / 4)))
|
# geo_iso.append(mp_geo.buffer(offset, int(int(self.geo_steps_per_circle) / 4)))
|
||||||
|
# except TypeError:
|
||||||
|
# geo_iso.append(self.solid_geometry.buffer(offset, int(int(self.geo_steps_per_circle) / 4)))
|
||||||
|
|
||||||
|
|
||||||
|
# the previously commented block is replaced with this block - regression - to solve the bug with multiple
|
||||||
|
# isolation passes cutting from the copper features
|
||||||
|
if offset == 0:
|
||||||
|
geo_iso = self.solid_geometry
|
||||||
|
else:
|
||||||
|
geo_iso = self.solid_geometry.buffer(offset, int(self.geo_steps_per_circle / 4))
|
||||||
|
# end of replaced block
|
||||||
|
|
||||||
if iso_type == 2:
|
if iso_type == 2:
|
||||||
return geo_iso
|
return geo_iso
|
||||||
|
|
Loading…
Reference in New Issue