从System.Windows.Media.Geometry获取坐标列表

时间:2010-09-20 13:01:38

标签: c# wpf

给定一个System.Windows.Media.Geometry类实例,是否有一种简单的方法可以将其转换为轮廓和点列表?例如,我怎么能简单地将其分解为LineSegments的自定义渲染列表。

FormattedText formattedText = new FormattedText( "Hello", ...);
Geometry textGeometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0));

如何列出每个轮廓(其中O将是内/外圈)和每个轮廓上的每个点?

根据以下答案;

    var flatten = textGeometry.GetFlattenedPathGeometry();
    PathFigureCollection pfc = flatten.Figures;

    foreach (PathFigure pf in pfc)
     {
        foreach (PathSegment ps in pf.Segments)
         {
            if (ps is LineSegment)

1 个答案:

答案 0 :(得分:2)

Geometry课程中,您可以使用GetFlattenedPathGeometry()GetOutlinedPathGeometry()(或相关 - 决定您真正想要的内容)来获取PathGeometry,然后查询{{ 1}}获取数字列表。这些Figures个对象中的每一个都有段(可以是线段,贝塞尔等)。

请注意,在执行此操作时,如果您天真地执行此操作,可能会丢失一些信息 - 如果可以给出任何任意几何,您可能需要做的不仅仅是调用FlattenedPathGeometry而不会丢失填充信息等内容。