将几何图形转换为 wpf 中的路径(使用混合?)
Posted
技术标签:
【中文标题】将几何图形转换为 wpf 中的路径(使用混合?)【英文标题】:Convert a geometry to a path in wpf (with blend ?) 【发布时间】:2010-12-14 08:24:48 【问题描述】:我的问题很简单。
如何转换此代码:
<Path>
<Path.Data>
<EllipseGeometry Center="5,4" RadiusX="4" RadiusY="4"/>
</Path.Data>
</Path>
变成类似的东西
<Path Data="M 0 5 L 3 10 10 0"/>
(请注意,第二个生成一个复选标记,而不是一个椭圆。这只是为了说明目的,我的目标就是:找出哪个序列给出一个椭圆)
编辑:我还阅读了有关 xaml 中贝塞尔曲线的文档,并且完全意识到我可以通过计算贝塞尔曲线的精确点来获得椭圆来简单地生成正确的代码,但我不想去自己做这个计算很麻烦,所以我想知道是否有一种简单的方法可以做到这一点(也许在 Blend 中)
【问题讨论】:
***.com/questions/5227830/… 的副本 【参考方案1】:这显示了如何从代码中做到这一点。我不确定这是否能解决你的问题 - 你说“混合?”在标题中,我不知道在 Blend 中执行此操作的方法。但我希望这会有所帮助。
第一步是将EllipseGeometry
转换为PathGeometry
:
var geom = new EllipseGeometry(new Point(5, 4), 4, 4);
var pathGeometry = PathGeometry.CreateFromGeometry(geom);
获得PathGeometry
后,您只需调用ToString
,它就会为您提供字符串表示形式:
string pathText = pathGeometry.ToString();
在我的系统上,这会产生以下相当冗长的文本:
“M9,4C9,6.20913899932317 7.2091389932317
现在,如果您想得到与将该字符串输入 Xaml 时完全相同的结果,则需要多一步,因为 Xaml 是您提供的表单:
<Path Data="M 0 5 L 3 10 10 0"/>
不会产生PathGeometry
。它产生一个StreamGeometry
,它是一种更有效但固定的路径表示。 (主要区别在于您无法在 StreamGeometry
中获取代表各种图形和分段的单个对象,而您可以使用 PathGeometry
。因此,StreamGeometry
更便宜。)
您可以从路径文本中获取StreamGeometry
:
var streamGeometry = StreamGeometry.Parse(pathText);
然后,如果您想在 Path
中创建它:
var p = new Path Data = streamGeometry ;
根据您的确切目标,可能会有更有效的方法来做到这一点。 (StreamGeometry
是一种更有效的表示,因为它最终创建的对象要少得多。但是我的代码到达该表示的路径不是很有效,所以你最好停止使用 PathGeometry
sn-p 生成的第一个代码。或者,如果您的目标只是获取路径文本,那么PathGeometry
也足以满足您的需求。)
【讨论】:
这确实比我想要的多。前两步和结果:“M9,4C9,6.20913899932317 7.2091389938993,05,8.2099993,08,07068993983889993,05,8,8.2093889993,05,07.20938938938896889999383768999398,876899939867689999398,8768999398689899993,87689993986768999398,0783899388768999989678999398067689993,05,878389939896889993,8783899389868389868 ,>>>>>>>>>>>>我想要什么。完美的!剩下的就是一个很好的奖励:)(我不知道 StreamGeometry 会更好......我会看看它 我不一定会说 StreamGeometry 总是“更好”。它更节省内存,但因此会失去一些灵活性。以上是关于将几何图形转换为 wpf 中的路径(使用混合?)的主要内容,如果未能解决你的问题,请参考以下文章
将具有混合(固定和百分比)值的 CSS 剪辑路径转换为 SVG 剪辑路径