获取CombinedGeometry的点坐标

时间:2014-04-13 09:56:04

标签: c# wpf xaml

我正在使用以下代码从CombinedGeometry

中排除一个几何体

enter image description here

并获得如下的最终几何图形:

enter image description here

我想知道有没有办法获得最终结果的几何定义?像点集合之类的东西可以帮助我以后用不同的属性重绘它,甚至可以将点坐标写到文件中?

<Window x:Class="Combine.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Canvas Width="300" Height="300">
        <Path Stroke="Black" StrokeThickness="1" Fill="Transparent">
            <Path.Data>

                <CombinedGeometry GeometryCombineMode="Exclude">
                    <CombinedGeometry.Geometry1>
                        <RectangleGeometry Rect="40,40, 200, 50" />
                    </CombinedGeometry.Geometry1>
                    <CombinedGeometry.Geometry2>
                        <RectangleGeometry Rect="100,0, 50, 200" />
                    </CombinedGeometry.Geometry2>
                </CombinedGeometry>
            </Path.Data>
        </Path>
    </Canvas>
</Window>

2 个答案:

答案 0 :(得分:2)

您可以尝试使用combinedGeometry.GetFlattenedPathGeometry();方法。这将返回PathGeometry对象。然后,您可以将其转换为字符串并写入文件,或者通过PathGeometry中包含的figur运行并使用坐标。

PathGeometry geometry = combinedGeometry.GetFlattenedPathGeometry();

Console.WriteLine(geometry.ToString());


foreach (PathFigure figure in geometry.Figures)
{
     Console.WriteLine(figure.StartPoint);
     foreach (PathSegment segment in figure.Segments)
     {
         foreach (Point point in ((PolyLineSegment)segment).Points)
         {
             Console.WriteLine(point);
         }
     }
 }

答案 1 :(得分:1)

您也可以使用PathGeometry.Combine()代替CombinedGeometry。生成的PathGeometry具有图形和段。 PS:您还可以从任何其他几何体创建PathGeometry。看一下静态构造函数PathGeometry.CreateFromGeometry()。     PathGeometry result = PathGeometry.Combine(g1,g2,GeometryCombineMode.Exclude,null);