AngusJohnson / Clipper2

Polygon Clipping and Offsetting - C++, C# and Delphi
Boost Software License 1.0
1.34k stars 248 forks source link

About "RectClipLines", May be this is a bug??? #808

Closed jim-jiang-github closed 3 months ago

jim-jiang-github commented 3 months ago

C# project, Use nuget Clipper2, net6.0

S1: Code:

 static void Main(string[] args)
 {
     List<PointD> ps = new List<PointD>();
     ps.Add(new PointD(200, 1000));
     ps.Add(new PointD(3300, 1000));
     ps.Add(new PointD(3300, 600));
     ps.Add(new PointD(200, 600));
     ps.Add(new PointD(200, 1000));
     PathsD psd = new PathsD();
     psd.Add(new PathD(ps));
     double width = 15000;
     double height = 1520;
     int split = 500;
     SvgWriter svg = new(FillRule.NonZero);

     for (int i = 0; i < (int)(width / split); i++)
     {
         var startX = i * split;
         var endX = split * i + split;
         RectD clipRect = new RectD(Math.Max(0, startX - 2), 0, endX, height);
         PathsD paths = Clipper.RectClipLines(clipRect, psd, 0);
         SvgUtils.AddOpenSubject(svg, paths);
     }
     svg.SaveToFile("rectclip.svg");
 }

result: rectclip

S2: Code:

static void Main(string[] args)
{
    List<PointD> ps = new List<PointD>();
    ps.Add(new PointD(200, 1000));
    for (int i = 1; i < 32; i++)
    {
        ps.Add(new PointD(i * 100 + 200, 1000));
    }
    ps.Add(new PointD(3300, 1000));
    ps.Add(new PointD(3300, 600));
    for (int i = 1; i < 32; i++)
    {
        ps.Add(new PointD(3300 - i * 100, 600));
    }
    ps.Add(new PointD(200, 600));
    ps.Add(new PointD(200, 1000));
    PathsD psd = new PathsD();
    psd.Add(new PathD(ps));
    double width = 15000;
    double height = 1520;
    int split = 500;
    SvgWriter svg = new(FillRule.NonZero);

    for (int i = 0; i < (int)(width / split); i++)
    {
        var startX = i * split;
        var endX = split * i + split;
        RectD clipRect = new RectD(Math.Max(0, startX - 2), 0, endX, height);
        PathsD paths = Clipper.RectClipLines(clipRect, psd, 0);
        SvgUtils.AddOpenSubject(svg, paths);
    }
    svg.SaveToFile("rectclip.svg");
}

result: rectclip1

Demo: [Uploading Clipper2Lib.Test.zip…]()