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); }