将几何转换为wpf中的路径(使用混合?)

Dav*_*vid 3 wpf geometry xaml blend path

我的问题很简单.

我该如何转换这段代码:

<Path>
    <Path.Data>
        <EllipseGeometry Center="5,4" RadiusX="4" RadiusY="4"/>
    </Path.Data>
</Path>
Run Code Online (Sandbox Code Playgroud)

变成类似的东西

<Path Data="M 0 5 L 3 10 10 0"/>
Run Code Online (Sandbox Code Playgroud)

(请注意,第二个产生一个复选标记,而不是椭圆形.它仅用于说明目的,我的目标只是:找到一个椭圆的序列)

编辑:我还阅读了关于xaml中Bezier曲线的文档,并且我完全意识到我可以通过计算Bezier曲线的精确点来生成正确的代码以获得椭圆,但我不想去做麻烦这个计算我自己,所以我想知道是否有一个简单的方法来做到这一点(在Blend中)

Ian*_*ths 8

这显示了如何从代码中完成它.我不确定这是否会解决你的问题 - 你说"混合?" 在标题中,我不知道在Blend中这样做的方法.但我希望这可能有所帮助.

第一步是将其EllipseGeometry转换为PathGeometry:

var geom = new EllipseGeometry(new Point(5, 4), 4, 4);
var pathGeometry = PathGeometry.CreateFromGeometry(geom);
Run Code Online (Sandbox Code Playgroud)

一旦你有了一个,PathGeometry你可以简单地打电话ToString,它会给你字符串表示:

string pathText = pathGeometry.ToString();
Run Code Online (Sandbox Code Playgroud)

在我的系统上,这会产生以下相当冗长的文本:

"M9,4C9,6.20913899932317 7.20913899932317,8 5,8 2.79086100067683,8 1,6.20913899932317 1,4 1,1709086100067683 2.79086100067683,0 5,0 7.20913899932317,0 9,1.79086100067683 9,4z"

现在,如果您希望最终得到您将该字符串输入Xaml时的确切结果,那么您还需要一个步骤,因为您提供的表单的Xaml:

<Path Data="M 0 5 L 3 10 10 0"/>
Run Code Online (Sandbox Code Playgroud)

没有产生PathGeometry.它产生一个StreamGeometry,这是一个稍微有效但固定的路径表示.(主要区别在于你不能掌握代表a中各种图形和部分的单个对象StreamGeometry,而你可以使用PathGeometry.StreamGeometry更便宜,因此.)

您可以StreamGeometry从路径文本中获取:

var streamGeometry = StreamGeometry.Parse(pathText);
Run Code Online (Sandbox Code Playgroud)

然后,如果你想在Path刚建立它:

var p = new Path { Data = streamGeometry };
Run Code Online (Sandbox Code Playgroud)

根据您的确切目标,可能会有更有效的方法来执行此操作.(StreamGeometry是一种更有效的表示,因为它最终会创建更少的对象.但是我的代码到达该表示的路径效率不高,所以最好只停留PathGeometry第一个代码片段产生的代码.或者,如果您的目标只是获取路径文本,那么这PathGeometry也足以满足您的需求.)