给定一个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)
答案 0 :(得分:2)
在Geometry
课程中,您可以使用GetFlattenedPathGeometry()
,GetOutlinedPathGeometry()
(或相关 - 决定您真正想要的内容)来获取PathGeometry
,然后查询{{ 1}}获取数字列表。这些Figures
个对象中的每一个都有段(可以是线段,贝塞尔等)。
请注意,在执行此操作时,如果您天真地执行此操作,可能会丢失一些信息 - 如果可以给出任何任意几何,您可能需要做的不仅仅是调用FlattenedPathGeometry而不会丢失填充信息等内容。