Beispiel #1
0
        public static List <PolyLine> MiniFontShapes(string v1, double _x, double _y, double size, double rotation = 0)
        {
            List <PolyLine> Res    = new List <PolyLine>();
            double          wunit  = size * 0.55f;
            double          hunit  = -size;
            double          stroke = size * 0.15;
            double          w      = 0;
            double          x      = 0;
            double          y      = 0;

            y -= hunit / 2;

            for (int i = 0; i < v1.Length; i++)
            {
                var c = v1[i];
                switch (c)
                {
                case '1': w += 0.5 * wunit; break;

                default: w += 1.5 * wunit; break;
                }
            }
            w -= 0.5 * wunit;
            x -= w / 2;

            for (int i = 0; i < v1.Length; i++)
            {
                var c = v1[i];
                switch (c)
                {
                case '0':
                    Res.Add(PolyLine.Stroke(x, y, x, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x + wunit, y, x + wunit, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x, y, x + wunit, y, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit, x + wunit, y + hunit, stroke));
                    x += 1.5 * wunit;
                    break;

                case '1':
                    Res.Add(PolyLine.Stroke(x, y, x, y + hunit, stroke));
                    x += 0.5 * wunit;
                    break;

                case '2':
                    Res.Add(PolyLine.Stroke(x, y, x + wunit, y, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit / 2, x + wunit, y + hunit / 2, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit, x + wunit, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x + wunit, y, x + wunit, y + hunit / 2, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit / 2, x, y + hunit, stroke));


                    x += 1.5 * wunit;
                    break;

                case '3':
                    Res.Add(PolyLine.Stroke(x, y, x + wunit, y, stroke));
                    Res.Add(PolyLine.Stroke(x + wunit / 2, y + hunit / 2, x + wunit, y + hunit / 2, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit, x + wunit, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x + wunit, y, x + wunit, y + hunit, stroke));
                    x += 1.5 * wunit;
                    break;

                case '4':
                    Res.Add(PolyLine.Stroke(x, y, x, y + hunit / 2, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit / 2, x + wunit, y + hunit / 2, stroke));
                    Res.Add(PolyLine.Stroke(x + wunit, y, x + wunit, y + hunit, stroke));

                    x += 1.5 * wunit;
                    break;

                case '5':
                    Res.Add(PolyLine.Stroke(x, y, x + wunit, y, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit / 2, x + wunit, y + hunit / 2, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit, x + wunit, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x, y, x, y + hunit / 2, stroke));
                    Res.Add(PolyLine.Stroke(x + wunit, y + hunit / 2, x + wunit, y + hunit, stroke));

                    x += 1.5 * wunit;
                    break;

                case '6':
                    Res.Add(PolyLine.Stroke(x, y, x, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x + wunit, y + hunit / 2, x + wunit, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x, y, x + wunit, y, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit / 2, x + wunit, y + hunit / 2, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit, x + wunit, y + hunit, stroke));
                    x += 1.5 * wunit;
                    break;

                case '7':
                    Res.Add(PolyLine.Stroke(x, y, x + wunit, y, stroke));
                    Res.Add(PolyLine.Stroke(x + wunit, y, x + wunit, y + hunit, stroke));
                    x += 1.5 * wunit;
                    break;

                case '8':
                    Res.Add(PolyLine.Stroke(x, y, x, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x + wunit, y, x + wunit, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x, y, x + wunit, y, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit, x + wunit, y + hunit, stroke));
                    Res.Add(PolyLine.Stroke(x, y + hunit / 2, x + wunit, y + hunit / 2, stroke));

                    x += 1.5 * wunit;
                    break;

                case '9':
                    Res.Add(PolyLine.Stroke(x, y + hunit / 2, x + wunit, y + hunit / 2, stroke));
                    Res.Add(PolyLine.Stroke(x, y, x, y + hunit / 2, stroke));

                    Res.Add(PolyLine.Stroke(x, y, x + wunit, y, stroke));

                    Res.Add(PolyLine.Stroke(x + wunit, y, x + wunit, y + hunit, stroke));
                    x += 1.5 * wunit;
                    break;
                }
            }

            Res.Add(PolyLine.Stroke(-w / 2, hunit * 0.5 - stroke * 2, w / 2, hunit * 0.5 - stroke * 2, stroke));
            foreach (var r in Res)
            {
                r.RotateDegrees(rotation);
                r.Translate(_x, _y);
            }

            return(Res);
        }