diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f709f14..a92b5156 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ CHANGELOG for FlatCAM beta - fixed all transformations in the Excellon object attributes; still need to fix the App Tools that creates or use Exellon objects - fixed some problems (typos, missing data) generated by latest changes - more typos fixed in Excellon parser, slots processing +- fixed Extract Drills Tool to work with the new Excellon data format 15.06.2020 diff --git a/appTools/ToolExtractDrills.py b/appTools/ToolExtractDrills.py index 9927ef38..9b1a3942 100644 --- a/appTools/ToolExtractDrills.py +++ b/appTools/ToolExtractDrills.py @@ -441,7 +441,13 @@ class ToolExtractDrills(AppTool): mode = self.hole_size_radio.get_value() if mode == 'fixed': - tools = {"1": {"C": drill_dia}} + tools = { + 1: { + "tooldia": drill_dia, + "drills": [], + "slots": [] + } + } for apid, apid_value in fcobj.apertures.items(): ap_type = apid_value['type'] @@ -468,13 +474,13 @@ class ToolExtractDrills(AppTool): for geo_el in apid_value['geometry']: if 'follow' in geo_el and isinstance(geo_el['follow'], Point): - drills.append({"point": geo_el['follow'], "tool": "1"}) - if 'solid_geometry' not in tools["1"]: - tools["1"]['solid_geometry'] = [] + tools[1]["drills"].append(geo_el['follow']) + if 'solid_geometry' not in tools[1]: + tools[1]['solid_geometry'] = [] else: - tools["1"]['solid_geometry'].append(geo_el['follow']) + tools[1]['solid_geometry'].append(geo_el['follow']) - if 'solid_geometry' not in tools["1"] or not tools["1"]['solid_geometry']: + if 'solid_geometry' not in tools[1] or not tools[1]['solid_geometry']: self.app.inform.emit('[WARNING_NOTCL] %s' % _("No drills extracted. Try different parameters.")) return elif mode == 'ring': @@ -530,23 +536,28 @@ class ToolExtractDrills(AppTool): tool_in_drills = False for tool, tool_val in tools.items(): - if abs(float('%.*f' % (self.decimals, tool_val["tooldia"])) - float('%.*f' % (self.decimals, dia))) < \ - (10 ** -self.decimals): + if abs(float('%.*f' % ( + self.decimals, + tool_val["tooldia"])) - float('%.*f' % (self.decimals, dia))) < (10 ** -self.decimals): tool_in_drills = tool if tool_in_drills is False: if tools: new_tool = max([int(t) for t in tools]) + 1 - tool_in_drills = str(new_tool) + tool_in_drills = new_tool else: - tool_in_drills = "1" + tool_in_drills = 1 for geo_el in apid_value['geometry']: if 'follow' in geo_el and isinstance(geo_el['follow'], Point): if tool_in_drills not in tools: - tools[tool_in_drills] = {"C": dia} + tools[tool_in_drills] = { + "tooldia": dia, + "drills": [], + "slots": [] + } - drills.append({"point": geo_el['follow'], "tool": tool_in_drills}) + tools[tool_in_drills]['drills'].append(geo_el['follow']) if 'solid_geometry' not in tools[tool_in_drills]: tools[tool_in_drills]['solid_geometry'] = [] @@ -615,23 +626,28 @@ class ToolExtractDrills(AppTool): tool_in_drills = False for tool, tool_val in tools.items(): - if abs(float('%.*f' % (self.decimals, tool_val["tooldia"])) - float('%.*f' % (self.decimals, dia))) < \ - (10 ** -self.decimals): + if abs(float('%.*f' % ( + self.decimals, + tool_val["tooldia"])) - float('%.*f' % (self.decimals, dia))) < (10 ** -self.decimals): tool_in_drills = tool if tool_in_drills is False: if tools: new_tool = max([int(t) for t in tools]) + 1 - tool_in_drills = str(new_tool) + tool_in_drills = new_tool else: - tool_in_drills = "1" + tool_in_drills = 1 for geo_el in apid_value['geometry']: if 'follow' in geo_el and isinstance(geo_el['follow'], Point): if tool_in_drills not in tools: - tools[tool_in_drills] = {"C": dia} + tools[tool_in_drills] = { + "tooldia": dia, + "drills": [], + "slots": [] + } - drills.append({"point": geo_el['follow'], "tool": tool_in_drills}) + tools[tool_in_drills]['drills'].append(geo_el['follow']) if 'solid_geometry' not in tools[tool_in_drills]: tools[tool_in_drills]['solid_geometry'] = []