فهرست منبع

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

Marius Stanciu 6 سال پیش
والد
کامیت
8679cbbcda
2فایلهای تغییر یافته به همراه42 افزوده شده و 6 حذف شده
  1. 1 0
      README.md
  2. 41 6
      flatcamEditors/FlatCAMGrbEditor.py

+ 1 - 0
README.md

@@ -13,6 +13,7 @@ CAD program, and create G-Code for Isolation routing.
 
 
 - rewrited the Gerber Parser in camlib - success
 - rewrited the Gerber Parser in camlib - success
 - moved the self.apertures[aperture]['geometry'] processing for clear_geometry (geometry made with Gerber LPC command) in Gerber Editor
 - moved the self.apertures[aperture]['geometry'] processing for clear_geometry (geometry made with Gerber LPC command) in Gerber Editor
+- Gerber Editor: fixed the Poligonize Tool to work with new geometric structure and took care of a special case
 
 
 12.05.2019
 12.05.2019
 
 

+ 41 - 6
flatcamEditors/FlatCAMGrbEditor.py

@@ -737,23 +737,58 @@ class FCPoligonize(FCShapeTool):
             self.draw_app.select_tool("select")
             self.draw_app.select_tool("select")
             return
             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 = MultiPolygon(exterior_geo)
         fused_geo = fused_geo.buffer(0.0000001)
         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):
         if isinstance(fused_geo, MultiPolygon):
             for geo in fused_geo:
             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:
         else:
             if len(fused_geo.interiors) == 0 and len(exterior_geo) == 1:
             if len(fused_geo.interiors) == 0 and len(exterior_geo) == 1:
                 try:
                 try:
-                    current_storage = self.draw_app.storage_dict['0']['solid_geometry']
+                    current_storage = self.draw_app.storage_dict['0']['geometry']
                 except KeyError:
                 except KeyError:
                     self.draw_app.on_aperture_add(apid='0')
                     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.delete_selected()
         self.draw_app.plot_all()
         self.draw_app.plot_all()