Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion pcbdraw/plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,22 @@ def get_board_polygon(svg_elements: etree.Element) -> etree.Element:
for group in svg_elements:
for svg_element in group:
if svg_element.tag == "path":
elements.append(SvgPathItem(svg_element.attrib["d"]))
p = svg_element.attrib["d"]
# Check if this is a closed polygon (KiCad 7.0.1+)
polygon = re.fullmatch(r"M ((\d+\.\d+),(\d+\.\d+) )+Z", p)
if polygon:
# Yes, decompose it in lines
polygon = re.findall(r"(\d+\.\d+),(\d+\.\d+) ", p)
start = polygon[0]
# Close it
polygon.append(polygon[0])
# Add the lines
for end in polygon[1:]:
path = 'M'+start[0]+' '+start[1]+' L'+end[0]+' '+end[1]
elements.append(SvgPathItem(path))
start = end
else:
elements.append(SvgPathItem(p))
elif svg_element.tag == "circle":
# Convert circle to path
att = svg_element.attrib
Expand Down