- fixed issue in the isolation function, if the isolation can't be done there will be generated no Geometry object
This commit is contained in:
@@ -876,17 +876,19 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
|
|
||||||
if invert:
|
if invert:
|
||||||
try:
|
try:
|
||||||
if type(geom) is MultiPolygon:
|
if type(geom) is MultiPolygon or type(geom) is list:
|
||||||
pl = []
|
pl = []
|
||||||
for p in geom:
|
for p in geom:
|
||||||
pl.append(Polygon(p.exterior.coords[::-1], p.interiors))
|
if p is not None:
|
||||||
|
pl.append(Polygon(p.exterior.coords[::-1], p.interiors))
|
||||||
geom = MultiPolygon(pl)
|
geom = MultiPolygon(pl)
|
||||||
elif type(geom) is Polygon:
|
elif type(geom) is Polygon and geom is not None:
|
||||||
geom = Polygon(geom.exterior.coords[::-1], geom.interiors)
|
geom = Polygon(geom.exterior.coords[::-1], geom.interiors)
|
||||||
else:
|
else:
|
||||||
log.debug("FlatCAMGerber.isolate().generate_envelope() Error --> Unexpected Geometry")
|
log.debug("FlatCAMGerber.isolate().generate_envelope() Error --> Unexpected Geometry")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.debug("FlatCAMGerber.isolate().generate_envelope() Error --> %s" % str(e))
|
log.debug("FlatCAMGerber.isolate().generate_envelope() Error --> %s" % str(e))
|
||||||
|
return 'fail'
|
||||||
return geom
|
return geom
|
||||||
|
|
||||||
if float(self.options["isotooldia"]) < 0:
|
if float(self.options["isotooldia"]) < 0:
|
||||||
@@ -914,6 +916,9 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
geom = generate_envelope(iso_offset, 1, envelope_iso_type=self.iso_type, follow=follow)
|
geom = generate_envelope(iso_offset, 1, envelope_iso_type=self.iso_type, follow=follow)
|
||||||
else:
|
else:
|
||||||
geom = generate_envelope(iso_offset, 0, envelope_iso_type=self.iso_type, follow=follow)
|
geom = generate_envelope(iso_offset, 0, envelope_iso_type=self.iso_type, follow=follow)
|
||||||
|
if geom == 'fail':
|
||||||
|
# app_obj.inform.emit(_("[ERROR_NOTCL] Isolation geometry could not be generated."))
|
||||||
|
return 'fail'
|
||||||
geo_obj.solid_geometry.append(geom)
|
geo_obj.solid_geometry.append(geom)
|
||||||
|
|
||||||
# store here the default data for Geometry Data
|
# store here the default data for Geometry Data
|
||||||
@@ -1006,11 +1011,14 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
# 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':
|
||||||
# geo_obj.solid_geometry = generate_envelope(offset, i == 0)
|
# geo_obj.solid_geometry = generate_envelope(offset, i == 0)
|
||||||
geo_obj.solid_geometry = generate_envelope(offset, 1, envelope_iso_type=self.iso_type,
|
geom = generate_envelope(offset, 1, envelope_iso_type=self.iso_type, follow=follow)
|
||||||
follow=follow)
|
|
||||||
else:
|
else:
|
||||||
geo_obj.solid_geometry = generate_envelope(offset, 0, envelope_iso_type=self.iso_type,
|
geom = generate_envelope(offset, 0, envelope_iso_type=self.iso_type, follow=follow)
|
||||||
follow=follow)
|
if geom == 'fail':
|
||||||
|
# app_obj.inform.emit(_("[ERROR_NOTCL] Isolation geometry could not be generated."))
|
||||||
|
return 'fail'
|
||||||
|
|
||||||
|
geo_obj.solid_geometry = 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"
|
||||||
# or just looking in the lists (they are one level depth) and if any is not empty
|
# or just looking in the lists (they are one level depth) and if any is not empty
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ CAD program, and create G-Code for Isolation routing.
|
|||||||
|
|
||||||
- fixed bug that crashed the app after creating a new geometry, if a new object is loaded and the new geometry is deleted and then trying to select the just loaded new object
|
- fixed bug that crashed the app after creating a new geometry, if a new object is loaded and the new geometry is deleted and then trying to select the just loaded new object
|
||||||
- made some GUI elements in Edit -> Preferences to have a minimum width as opposed to the previous fixed one
|
- made some GUI elements in Edit -> Preferences to have a minimum width as opposed to the previous fixed one
|
||||||
|
- fixed issue in the isolation function, if the isolation can't be done there will be generated no Geometry object
|
||||||
|
|
||||||
5.08.2019
|
5.08.2019
|
||||||
|
|
||||||
|
|||||||
@@ -544,6 +544,7 @@ class Geometry(object):
|
|||||||
# the previously commented block is replaced with this block - regression - to solve the bug with multiple
|
# the previously commented block is replaced with this block - regression - to solve the bug with multiple
|
||||||
# isolation passes cutting from the copper features
|
# isolation passes cutting from the copper features
|
||||||
|
|
||||||
|
geo_iso = []
|
||||||
if offset == 0:
|
if offset == 0:
|
||||||
if follow:
|
if follow:
|
||||||
geo_iso = self.follow_geometry
|
geo_iso = self.follow_geometry
|
||||||
@@ -557,14 +558,16 @@ class Geometry(object):
|
|||||||
if type(self.solid_geometry) is list and len(self.solid_geometry) == 1:
|
if type(self.solid_geometry) is list and len(self.solid_geometry) == 1:
|
||||||
geo_iso = self.solid_geometry[0].buffer(offset, int(int(self.geo_steps_per_circle) / 4))
|
geo_iso = self.solid_geometry[0].buffer(offset, int(int(self.geo_steps_per_circle) / 4))
|
||||||
else:
|
else:
|
||||||
geo_iso = self.solid_geometry.buffer(offset, int(int(self.geo_steps_per_circle) / 4))
|
for el in self.solid_geometry:
|
||||||
|
geo_iso.append(el.buffer(offset, int(int(self.geo_steps_per_circle) / 4)))
|
||||||
else:
|
else:
|
||||||
if type(self.solid_geometry) is list and len(self.solid_geometry) == 1:
|
if type(self.solid_geometry) is list and len(self.solid_geometry) == 1:
|
||||||
geo_iso = self.solid_geometry.buffer[0](offset, int(int(self.geo_steps_per_circle) / 4),
|
geo_iso = self.solid_geometry.buffer[0](offset, int(int(self.geo_steps_per_circle) / 4),
|
||||||
join_style=corner)
|
join_style=corner)
|
||||||
else:
|
else:
|
||||||
geo_iso = self.solid_geometry.buffer(offset, int(int(self.geo_steps_per_circle) / 4),
|
for el in self.solid_geometry:
|
||||||
join_style=corner)
|
geo_iso.append(el.buffer(offset, int(int(self.geo_steps_per_circle) / 4),
|
||||||
|
join_style=corner))
|
||||||
|
|
||||||
# end of replaced block
|
# end of replaced block
|
||||||
if follow:
|
if follow:
|
||||||
|
|||||||
Reference in New Issue
Block a user