You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have verified that I am running the latest version of ImageSharp.Drawing
I have verified if the problem exist in both DEBUG and RELEASE mode
I have searched open and closed issues to ensure it has not already been reported
Description
I had a bug in my code that set some (admittedly unreasonable) paths but when running it appears to get stuck and run forever in FixupIntersectionOrder.
Steps to Reproduce
I made a small project that reproduces it https://github.com/Fenyx4/SixLaborsHang
Probably could be made even smaller but I recreated the exact instance I ran into.
As I trimmed it down I did discover a few things. It does not appear to run forever just a long, long time. Trimmed down versions run around an hour. When I remove some of the lines it drops down to around a minute. So I have been removing lines that don't cause it to drop below 50 minutes.
Oddly some lines I remove have caused the time to increase.
I'll keep working on getting a simpler version that still takes a long time but wanted to let you know the above in case it helps.
The issue here is in the .GenerateOutline() extension/clipper library.
A much reduced case can be found with
varpathBuilder=newPathBuilder();vartransform=Matrix3x2.CreateRotation(-0.04433158f,newVector2(948,640));pathBuilder.SetTransform(transform);pathBuilder.AddQuadraticBezier(newPointF(-2147483648,677),newPointF(-2147483648,675),newPointF(-2147483648,675));IPathpath=pathBuilder.Build();// this line hangs/takes ages inside the 'clipper'varoutline=path.GenerateOutline(2);
this is the entry line that ends up hanging/taking a long time.
Activity
brianpopow commentedon Sep 1, 2022
This reproduction you provided is very big, it will be really hard to debug this in this form. Can you try to make it simpler?
Fenyx4 commentedon Sep 6, 2022
FYI I have been working on trimming this down.
As I trimmed it down I did discover a few things. It does not appear to run forever just a long, long time. Trimmed down versions run around an hour. When I remove some of the lines it drops down to around a minute. So I have been removing lines that don't cause it to drop below 50 minutes.
Oddly some lines I remove have caused the time to increase.
I'll keep working on getting a simpler version that still takes a long time but wanted to let you know the above in case it helps.
Fenyx4 commentedon Sep 13, 2022
Allrighty! Trimmed it down as much as I could and still have it above 50 minutes.
Hope that helps.
JimBobSquarePants commentedon Sep 13, 2022
Does the hang occur during the PathBuilder.ClosePath operation or during the actual drawing operation?
Fenyx4 commentedon Sep 19, 2022
Actual drawing operation
tocsoft commentedon Sep 19, 2022
The issue here is in the
.GenerateOutline()extension/clipper library.A much reduced case can be found with
this is the entry line that ends up hanging/taking a long time.
ImageSharp.Drawing/src/ImageSharp.Drawing/Shapes/Clipper/clipper.cs
Line 4828 in dc838dc
JimBobSquarePants commentedon Sep 20, 2022
Looks like Clipper2 is out! Maybe we could try dropping it in as a replacement?
https://github.com/AngusJohnson/Clipper2/releases/tag/Clipper2_1.0.4
JimBobSquarePants commentedon Oct 24, 2022
Clipper2 seems to have the same problem. Will need to create an example and submit an issue/PR upstream.
We also cannot use them as a NuGet dependency as the library is not strong named.
Fix #244
JimBobSquarePants commentedon Mar 12, 2026
Will be fixed with #377