Skip to content

Commit 77eb20b

Browse files
Funkenjaegerqu1ck
authored andcommitted
Fix handling of complex polygonpours, don't process polygons to zones
Only use polygonpours w/ polygonfilldetails for zones, as this geometry reflects isolation, thermals, etc., unlike plain polygons which do not. Handle non-trivial polygonpours which include multiple shapes as well as polygonholelists (cutouts)
1 parent 07a3d20 commit 77eb20b

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

InteractiveHtmlBom/ecad/fusion_eagle.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -688,16 +688,27 @@ def _add_zone(self, poly, net):
688688
return
689689

690690
if poly.tag == 'polygonpour':
691-
segs = poly.find('polygonfilldetails').find('polygonshape') \
692-
.find('polygonoutlinesegments')
691+
shapes = poly.find('polygonfilldetails').findall('polygonshape')
692+
if shapes:
693+
zone = {'polygons': [],
694+
'fillrule': 'evenodd'}
695+
for shape in shapes:
696+
segs = shape.find('polygonoutlinesegments')
697+
zone['polygons'].append(self._segments_to_polygon(segs))
698+
holelist = shape.find('polygonholelist')
699+
if holelist:
700+
holes = holelist.findall('polygonholesegments')
701+
for hole in holes:
702+
zone['polygons'].append(self._segments_to_polygon(hole))
703+
if self.config.include_nets:
704+
zone['net'] = net
705+
dest.append(zone)
693706
else:
694-
segs = poly
695-
696-
zone = {'polygons': []}
697-
zone['polygons'].append(self._segments_to_polygon(segs))
698-
if self.config.include_nets:
699-
zone['net'] = net
700-
dest.append(zone)
707+
zone = {'polygons': []}
708+
zone['polygons'].append(self._segments_to_polygon(poly))
709+
if self.config.include_nets:
710+
zone['net'] = net
711+
dest.append(zone)
701712

702713
def _add_parsed_font_data(self):
703714
for (c, wl) in self.font_parser.get_parsed_font().items():
@@ -781,8 +792,6 @@ def _parse(self, brdfile):
781792
self._add_track(via, signal.attrib['name'])
782793
for poly in signal.iter('polygonpour'):
783794
self._add_zone(poly, signal.attrib['name'])
784-
for poly in signal.iter('polygon'):
785-
self._add_zone(poly, signal.attrib['name'])
786795

787796
# Elements --> components, footprints, silkscreen, edges
788797
for el in elements.iter('element'):

0 commit comments

Comments
 (0)