- Subtraction Tool - minor changes

- in Gerber Editor - added some parameters to the UI: selected polygon coordinates and vertexes number and also added polygon simplification
- in Gerber Editor - fixed update of Aperture Table rows selection on multiple shapes selection
This commit is contained in:
Marius Stanciu
2020-12-02 21:09:03 +02:00
committed by Marius Stanciu
parent aa40b019a7
commit 356a13bf8b
3 changed files with 253 additions and 24 deletions

View File

@@ -274,7 +274,7 @@ class ToolSub(AppTool):
:type target_geo: list
:param sub_geometry: the apertures dict that holds all the geometry that is subtracted
:type sub_geometry: dict
:return: (apid, unaffected_geometry lsit, affected_geometry list)
:return: (apid, unaffected_geometry list, affected_geometry list)
:rtype: tuple
"""
@@ -286,28 +286,30 @@ class ToolSub(AppTool):
destination_geo_obj = {}
if "solid" in target_geo_obj:
diff = []
target_solid = target_geo_obj["solid"]
for sub_solid_geo in sub_geometry["solid"]:
if target_geo_obj["solid"].intersects(sub_solid_geo):
new_geo = target_geo_obj["solid"].difference(sub_solid_geo)
if target_solid.intersects(sub_solid_geo) or target_solid.contains(sub_solid_geo):
new_geo = target_solid.difference(sub_solid_geo)
if not new_geo.is_empty:
diff.append(new_geo)
solid_is_modified = True
if solid_is_modified:
target_geo_obj["solid"] = unary_union(diff)
destination_geo_obj["solid"] = deepcopy(target_geo_obj["solid"])
target_solid = unary_union(diff)
destination_geo_obj["solid"] = deepcopy(target_solid)
clear_is_modified = False
if "clear" in target_geo_obj:
clear_diff = []
target_clear = target_geo_obj["clear"]
for sub_clear_geo in sub_geometry["clear"]:
if target_geo_obj["clear"].intersects(sub_clear_geo):
new_geo = target_geo_obj["clear"].difference(sub_clear_geo)
if target_clear.intersects(sub_clear_geo) or target_clear.contains(sub_clear_geo):
new_geo = target_clear.difference(sub_clear_geo)
if not new_geo.is_empty:
clear_diff.append(new_geo)
clear_is_modified = True
if clear_is_modified:
target_geo_obj["clear"] = unary_union(clear_diff)
destination_geo_obj["clear"] = deepcopy(target_geo_obj["clear"])
target_clear = unary_union(clear_diff)
destination_geo_obj["clear"] = deepcopy(target_clear)
if solid_is_modified or clear_is_modified:
affected_geo.append(deepcopy(destination_geo_obj))