我有一个相当简单的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的正确界限?
发布于 2011-11-01 21:59:42
在某种程度上,我认为WPF必须转换为单点渲染,我想知道边界的值是否基于渲染结果。在这种情况下,您可能会看到基于您正在使用的大数字的精度限制。我注意到你的Y值是X的10倍,巧合的是误差也是X的10倍。
如果可以在创建PathGeometry之前减去最小X和Y,我想你会得到更好的数字。假设您正在显示PathGeometry,您可以将其放在一个画布中,并将Canvas.Left/Top应用于您的值,以在屏幕上获得正确的偏移量。要获得正确的边界,您可以将Top/Left偏移添加到边界的结果中。
只是提醒一下,在这个答案中有一些猜测。我没有查看边界的内部工作原理,但相对错误似乎指向与浮点数之间的转换。
发布于 2011-11-01 23:44:25
我认为你看到了不精确的事实,数字PathGeometry是由大的浮点数组成的。
我不确定你是否能得到你需要的精度。
您可能需要使用可接受的公差来比较边界,例如:
bool isMatch = (Math.Abs(MyPath.Bounds.X - ExpectedBounds.X) < TOLERANCE);您可以将TOLERANCE设置为0.25或其他值。
https://stackoverflow.com/questions/7965735
复制相似问题