Only try to connect discontiguous corners at the end of edges

This commit is contained in:
Andrew Murray 2022-05-16 22:31:49 +10:00
parent 638ba163f4
commit 62c7ee0f00
2 changed files with 9 additions and 1 deletions

View File

@ -1452,3 +1452,9 @@ def test_discontiguous_corners_polygon():
) )
expected = os.path.join(IMAGES_PATH, "discontiguous_corners_polygon.png") expected = os.path.join(IMAGES_PATH, "discontiguous_corners_polygon.png")
assert_image_similar_tofile(img, expected, 1) assert_image_similar_tofile(img, expected, 1)
im = Image.new("RGB", (W, H))
draw = ImageDraw.Draw(im)
draw.polygon([(18, 30), (19, 31), (18, 30), (85, 30), (60, 72)], "red")
expected = "Tests/images/imagedraw_outline_polygon_RGB.png"
assert_image_similar_tofile(im, expected, 1)

View File

@ -513,7 +513,9 @@ polygon_generic(Imaging im, int n, Edge *e, int ink, int eofill, hline_handler h
continue; continue;
} }
// Check if the two edges join to make a corner // Check if the two edges join to make a corner
if (xx[j-1] == (ymin - other_edge->y0) * other_edge->dx + other_edge->x0) { if (((ymin == current->ymin && ymin == other_edge->ymin) ||
(ymin == current->ymax && ymin == other_edge->ymax)) &&
xx[j-1] == (ymin - other_edge->y0) * other_edge->dx + other_edge->x0) {
// Determine points from the edges on the next row // Determine points from the edges on the next row
// Or if this is the last row, check the previous row // Or if this is the last row, check the previous row
int offset = ymin == ymax ? -1 : 1; int offset = ymin == ymax ? -1 : 1;