4

我有一个相当简单的 PathGeometry:

M567764.539,5956314.087L567815.077,5956179.775L567821.625,5956182.314L567773.425,5956311.248L567858.513,5956349.923L567950.858,5956392.466L567949.039,5956399.843L567942.252,5956396.685L567873.018,5956364.467L567799.816,5956330.421L567771.226,5956317.186L567764.539,5956314.087

现在,当我查询此数据的 PathGeometry.Bounds 属性时,我得到以下界限:

567764.5625,5956180  567950.875,5956400

预期的界限是:

567764.539,5956179.775 567950.858,5956399.843

我的主要问题:边界小于几何,所以几何的一部分可能在边界之外。

我创建 PathGeometry 并显示如下边界:

PathGeometry geo = PathGeometry.CreateFromGeometry(Geometry.Parse("M567764.539,5956314.087L567815.077,5956179.775L567821.625,5956182.314L567773.425,5956311.248L567858.513,5956349.923L567950.858,5956392.466L567949.039,5956399.843L567942.252,5956396.685L567873.018,5956364.467L567799.816,5956330.421L567771.226,5956317.186L567764.539,5956314.087"));
System.Diagnostics.Trace.WriteLine(geo.Bounds);

我究竟做错了什么?
而且,更重要的是,我如何获得 PathGeometry 的正确边界?

4

2 回答 2

2

在某些时候,我认为 WPF 必须转换为单点进行渲染,我想知道 Bounds 的值是否基于渲染结果。在这种情况下,您可能会看到基于您使用的大量数字的精度限制。我注意到您的 Y 值比 X 大 10 倍,巧合的是,误差也比 X 中的误差大 10 倍。

如果可以在创建 PathGeometry 之前减去最小 X 和 Y,我认为你会得到更好的数字。假设您正在显示 PathGeometry,您可以将其放置在 Canvas 中并将 Canvas.Left/Top 应用于您的值以在屏幕上获得正确的偏移量。要获得正确的边界,您可以将顶部/左侧偏移添加到边界的结果中。

只是提醒一下,这个答案有一些猜测。我没有看过 Bounds 的内部工作原理,但相对错误似乎指向与浮点数之间的转换。

于 2011-11-01T13:59:41.617 回答
0

我认为您看到了不精确的事实,即数字 PathGeometry 由大浮点数组成。

我不确定您是否能够获得所需的精度。

您可能必须使用可接受的容差来比较界限,例如:

bool isMatch = (Math.Abs(MyPath.Bounds.X - ExpectedBounds.X) < TOLERANCE);

您可以在其中将其设置TOLERANCE为 0.25 或其他值。

于 2011-11-01T15:44:25.020 回答