Skip to content

X or Y negative-positive-negative causes ArgumentOutOfRangeException in Draw(). #170

Description

@ControlDesign

Negative, then positive, then negative X or Y causes DrawPathExtensions.Draw to throw ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter 'edgeIdx').

To recreate use my 3 points and invoke Draw() as follows:

                    points = new List<PointF>(new PointF[] {
                        new PointF(170.92926f, 0f),
                        new PointF(166.381f, 4.548294f),
                        new PointF(180.50574f, 4.548294f),
                        new PointF(175.7349f, 9.319138f),
                        new PointF(147.33237f, 0f),
                        new PointF(137.5681f, -9.764252f),
                        new PointF(118.26215f, 0f),
                        new PointF(113.71387f, 4.548294f),
                        new PointF(175.76965f, 0f),
                        new PointF(132.60944f, -43.160202f)});

                    //Distill it down a little bit.
                    //Negative Y, then positive, then negative throws exception
                    points = new List<PointF>(new PointF[] {
                        //new PointF(170.92926f, 0f),
                        //new PointF(166.381f, 4.548294f),
                        //new PointF(180.50574f, 4.548294f),
                        //new PointF(175.7349f, 9.319138f),
                        //new PointF(147.33237f, 0f),
                        new PointF(110f, -10f),
                        new PointF(120f, 20f),
                        //new PointF(113.71387f, 4.548294f),
                        //new PointF(175.76965f, 45.01f),
                        new PointF(130f, -30f)
                        });

                    IPath open_simple_path = new PathBuilder().AddLines(points.ToArray()).Build();

                    //SixLabors.ImageSharp.Drawing.Processing.DrawPathExtensions.Draw(
                    //imageContext, Color.AliceBlue, grbx.pathc_global_skeleton[bone].Item2 * f_scale_fac, pathc_local2);
                    try
                    {
                        if (points.Count() >= 2 && bool_non_negative)
                            SixLabors.ImageSharp.Drawing.Processing.DrawPathExtensions.Draw(
                        imageContext, Color.AliceBlue, 3, open_simple_path);
                    } catch (Exception e2)
                    {
                        rtb1.Clear();
                        rtb1.Font = new System.Drawing.Font("Consolas", 10f);
                        rtb1.AppendText(e2.Message + "\n");
                        
                        //autocode the point array that caused the exception
                        rtb1.AppendText($"points = new List<PointF>(new PointF[] {{\n");                                
                        for (int i = 0; i < points.Count(); i++)
                        {
                            rtb1.AppendText($"new PointF({points[i].X}f, {points[i].Y}f)");
                            if (i < points.Count() - 1)
                                rtb1.AppendText(",\n");
                        }
                        rtb1.AppendText($"\n}});\n");
                    }
  • ImageSharp.Drawing version: beta13
  • Other ImageSharp packages and versions:
  • Environment (Operating system, version and so on): win10 19043.1288
  • .NET Framework version: .NET 6.0
  • Additional information:
    My application is a gerber language parser and writer for circuit board design tools. I have mouse centered zooming on circuit board layers. Initially, I render circuit traces as a skeleton with pen width, and the traces go all over the place. There's a similar bug in Fill(), but I work around it by doing a null clip before and after clipping to an image rectangle to ensure no negative values in the path before invoking Fill(). Now I'm in a dark alley using these open paths rather than closed paths that can be clipped.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions