Convert Silverlight Text to Path

Is it possible to convert Silverlight text to path or graphic at runtime ? I know it can be done with design tools, but I want to be able to do it on the fly.

I saw an example of what calls a web service that uses WPF constructors to convert a WPF FormattedText object to a PathGeometry , but these objects are not available in Silverlight.

I'm sure this is simply not supported in Silverlight, but thought it might be worth asking.

0


source to share


2 answers


As you might expect, you will have to do this on the server side to convert the text to PathGeometry, which is Silverlight supported. What are you trying to achieve?



+1


source


Here is the dynamic geometry code for the SilverLight path. or creating a SilverLight path from a string. Just paste the below method into a new class or an existing class and it will be ready to use. you can find sample code for using these functions at the bottom of the method.

/// Method tested with SilverLight 2.0


// this method will generates path with the data string

public PathGeometry getPathGeometry(string data)
{
    PathGeometry pg = new PathGeometry();
    PathSegmentCollection psc = new PathSegmentCollection();
    PathFigure pf = new PathFigure();
    PathFigureCollection pfc = new PathFigureCollection();
    data= data.Replace("M "," M").Replace("C "," C").Replace("L "," L");
    string[] str = data.Split(' ');
    for (int i = 0; i < str.Length; i++)
    {
        if (str[i].StartsWith("C") || str[i].StartsWith("c"))
        {
            string[] item = str[i].Split(',');
            string[] item1 = str[i + 1].Split(',');
            string[] item2 = str[i + 2].Split(',');
            BezierSegment bs = new BezierSegment();
            bs.Point1 = new Point(double.Parse(item[0].Substring(1)), double.Parse(item[1]));
            bs.Point2 = new Point(double.Parse(item1[0]), double.Parse(item1[1]));
            bs.Point3 = new Point(double.Parse(item2[0]), double.Parse(item2[1]));
            i += 2;
            psc.Add(bs);
        }
        else if (str[i].StartsWith("L") || str[i].StartsWith("l"))
        {
            string[] item = str[i].Split(',');
            LineSegment ls = new LineSegment();
            ls.Point = new Point(double.Parse(item[0].Substring(1)), double.Parse(item[1]));
            psc.Add(ls);
        }
        else if (str[i].StartsWith("M") || str[i].StartsWith("m"))
        {
            string[] item = str[i].Split(',');
            pf.StartPoint = new Point(double.Parse(item[0].Substring(1)), double.Parse(item[1]));
        }
        else if (str[i].StartsWith("z") || str[i].StartsWith("Z"))
        {
            pf.IsClosed = true;
        }
    }
    pf.Segments = psc;
    pfc.Add(pf);
    pg.Figures = pfc;
    return pg;
}

///// End of Method

      



Sample code for calling a method

Path path = new Path();
string str = " F1 M 933.291,430.505C 924.367,415.673 923.007,387.822 922.503,370.604C 921.343,331.31 944.994,317.76 975.999,296.994L 949.334,299.957C 938.729,302.545 930.572,309.925 920.255,313.368C 901.85,319.521 886.504,313.062 870.896,303.53C 850.12,290.842 831.457,270.65 815.107,251.462C 806.279,241.101 798.257,221.598 781.986,226.017C 767.327,229.99 760.199,246.869 743.058,244.012C 737.559,227.262 741.368,204.78 739.591,187.029C 738.108,172.136 733.986,158.933 733.996,143.736C 734.003,128.417 734.091,113.088 733.996,97.7689C 733.909,83.5475 730.302,82.6582 716.114,86.0475C 687.558,92.8796 663.68,115.232 634.418,119.337C 622.391,121.028 598.323,121.184 603.745,103.642C 603.745,103.642 547.667,116.478 522.623,101.969L 397.73,43.1915C 374.54,33.5875 352.799,21.5236 330.186,10.7568C 315.067,3.55951 298.84,3.50623 282.684,6.54358C 268.628,9.18353 252.14,8.36884 238.73,13.0222C 227.932,16.7648 225.711,27.0569 220.839,35.6369C 204.622,64.1582 184.474,89.9609 163.49,115.642C 143.3,140.356 124.747,161.949 100.268,182.977C 76.4618,203.437 58.0045,230.722 39.6698,256.062C 27.9845,272.228 10.5298,295.73 5.62447,315.546C 1.21381,333.368 7.65381,345.95 16.7778,360.225C 30.9738,382.42 52.4365,394.917 74.4578,408.658C 108.356,429.826 144.964,432.43 182.619,439.202C 194.226,441.284 201.93,444.466 212.456,450.234C 228.9,459.261 246.18,466.181 262.031,476.002C 277.378,485.518 288.175,498.328 306.771,498.502C 331.423,498.729 342.159,498.364 359.554,517.221C 368.632,527.06 372.859,537.585 380.38,548.114C 395.159,568.82 409.076,590.689 426.295,609.442C 440.326,624.728 467.967,633.601 487.652,636.902C 505.622,639.908 521.979,632.736 535.859,620.806C 545.402,612.606 552.478,602.246 557.978,591.161C 561.915,583.213 564.966,568.085 572.399,564.296C 578.046,561.41 595.117,563.91 601.338,564.312C 612.171,565.009 621.722,568.994 632.552,569.976C 651.071,571.65 654.679,567.992 668.187,558.989C 681.275,550.254 697.746,547.268 711.451,538.109C 733.726,523.208 751.861,501.273 773.035,484.254C 795.099,466.53 815.65,437.337 845.207,434.924C 871.813,432.754 933.291,430.505 933.291,430.505 Z";
path.Data = getPathGeometry(str);

      

0


source







All Articles