- Gerber Editor: fixed the Poligonize Tool to work with new geometric structure and took care of a special case

This commit is contained in:
Marius Stanciu
2019-05-15 01:49:35 +03:00
parent 3e3c8ae703
commit 8679cbbcda
2 changed files with 42 additions and 6 deletions

View File

@@ -737,23 +737,58 @@ class FCPoligonize(FCShapeTool):
self.draw_app.select_tool("select")
return
exterior_geo = [Polygon(sh.geo.exterior) for sh in self.draw_app.selected]
apid_set = set()
for elem in self.draw_app.selected:
for apid in self.draw_app.storage_dict:
if 'geometry' in self.draw_app.storage_dict[apid]:
if elem in self.draw_app.storage_dict[apid]['geometry']:
apid_set.add(apid)
break
if len (apid_set) > 1:
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Failed. Poligonize works only on "
"geometries belonging to the same aperture."))
self.draw_app.select_tool("select")
return
# exterior_geo = [Polygon(sh.geo.exterior) for sh in self.draw_app.selected]
exterior_geo = []
for geo_shape in self.draw_app.selected:
geometric_data = geo_shape.geo
if 'solid' in geometric_data:
exterior_geo.append(Polygon(geometric_data['solid'].exterior))
fused_geo = MultiPolygon(exterior_geo)
fused_geo = fused_geo.buffer(0.0000001)
current_storage = self.draw_app.storage_dict[self.draw_app.last_aperture_selected]['solid_geometry']
current_storage = self.draw_app.storage_dict[self.draw_app.last_aperture_selected]['geometry']
if isinstance(fused_geo, MultiPolygon):
for geo in fused_geo:
self.draw_app.on_grb_shape_complete(current_storage, specific_shape=DrawToolShape(geo))
if len(geo.interiors) == 0:
try:
current_storage = self.draw_app.storage_dict['0']['geometry']
except KeyError:
self.draw_app.on_aperture_add(apid='0')
current_storage = self.draw_app.storage_dict['0']['geometry']
new_el = dict()
new_el['solid'] = geo
new_el['follow'] = geo.exterior
self.draw_app.on_grb_shape_complete(current_storage, specific_shape=DrawToolShape(deepcopy(new_el)))
else:
if len(fused_geo.interiors) == 0 and len(exterior_geo) == 1:
try:
current_storage = self.draw_app.storage_dict['0']['solid_geometry']
current_storage = self.draw_app.storage_dict['0']['geometry']
except KeyError:
self.draw_app.on_aperture_add(apid='0')
current_storage = self.draw_app.storage_dict['0']['solid_geometry']
current_storage = self.draw_app.storage_dict['0']['geometry']
self.draw_app.on_grb_shape_complete(current_storage, specific_shape=DrawToolShape(fused_geo))
new_el = dict()
new_el['solid'] = fused_geo
new_el['follow'] = fused_geo.exterior
self.draw_app.on_grb_shape_complete(current_storage, specific_shape=DrawToolShape(deepcopy(new_el)))
self.draw_app.delete_selected()
self.draw_app.plot_all()