Example #1
0
        public static void CubicToLine(IPathRender output, PointF cur, PointF c1, PointF c2, PointF pt,
                                       double resolution)
        {
            int k          = 0;
            int l          = 0;
            var tempSet    = new ControlSet[64];
            var controlSet = new ControlSet[64];

            tempSet[l++] = new ControlSet(cur, c1, c2, pt);
            while (l > 0)
            {
                var    control1 = tempSet[--l];
                double b        = control1.CalcBreadth(resolution);
                if (b > resolution)
                {
                    var control3 = control1.Bisect();
                    tempSet[l++] = control1;
                    tempSet[l++] = control3;
                }
                else
                {
                    controlSet[k++] = control1;
                }
            }
            while (k > 0)
            {
                var control2 = controlSet[--k];
                var p        = control2.getPoint();
                output.Line(cur, p);
                cur = p;
            }
        }
Example #2
0
 static void Close(IPathRender output, PathRenderFeatures features, PointF cur, PointF start)
 {
     if ((features & PathRenderFeatures.Close) != 0)
     {
         output.Close(cur);
     }
     else
     {
         output.Line(cur, start);
     }
 }
Example #3
0
        public static void Render(GraphicsPath path, IPathRender render, PathRenderFeatures features, float resolution)
        {
            int n = path.PointCount;

            if (n > 0)
            {
                var bezier    = new PointF[3];
                int bezierIdx = 0;
                var points    = path.PathPoints;
                var types     = path.PathTypes;
                var start     = PointF.Empty;
                var cur       = PointF.Empty;
                for (int i = 0; i < n; ++i)
                {
                    var type      = (PathPointType)types[i];
                    var pointType = (PathPointType)((int)type & (int)PathPointType.PathTypeMask);
                    var pt        = points[i];
                    if (type == PathPointType.Start)
                    {
                        render.Move(cur, pt);
                        start = cur = pt;
                    }
                    else if (type == PathPointType.CloseSubpath)
                    {
                        Close(render, features, cur, start);
                        cur = start;
                    }
                    else if (type == PathPointType.PathMarker)
                    {
                    }
                    else if (pointType == PathPointType.Line)
                    {
                        if (i == 0)
                        {
                            render.Move(cur, pt);
                            start = pt;
                        }
                        else
                        {
                            render.Line(cur, pt);
                        }
                        cur = pt;
                        if (((int)type & (int)PathPointType.CloseSubpath) != 0)
                        {
                            Close(render, features, cur, start);
                            cur = start;
                        }
                    }
                    else if (pointType == PathPointType.Bezier ||
                             pointType == PathPointType.Bezier3)
                    {
                        bezier[bezierIdx++] = pt;
                        if (bezierIdx == 3)
                        {
                            Cubic(render, features, cur, bezier[0], bezier[1], pt, resolution);
                            cur       = pt;
                            bezierIdx = 0;
                            if (((int)type & (int)PathPointType.CloseSubpath) != 0)
                            {
                                Close(render, features, cur, start);
                                cur = start;
                            }
                        }
                    }
                }
            }
        }