首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF的PathGeometry边界是错误的?

WPF的PathGeometry边界是错误的?
EN

Stack Overflow用户
提问于 2011-11-01 19:26:50
回答 2查看 1.5K关注 0票数 4

我有一个相当简单的PathGeometry:

代码语言:javascript
复制
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属性时,我得到了以下界限:

代码语言:javascript
复制
567764.5625,5956180  567950.875,5956400

预期的界限是:

代码语言:javascript
复制
567764.539,5956179.775 567950.858,5956399.843

我的主要问题是:边界比几何体小,所以几何体的某些部分可能超出边界。

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

代码语言:javascript
复制
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的正确界限?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-01 21:59:42

在某种程度上,我认为WPF必须转换为单点渲染,我想知道边界的值是否基于渲染结果。在这种情况下,您可能会看到基于您正在使用的大数字的精度限制。我注意到你的Y值是X的10倍,巧合的是误差也是X的10倍。

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-11-01 23:44:25

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

我不确定你是否能得到你需要的精度。

您可能需要使用可接受的公差来比较边界,例如:

代码语言:javascript
复制
bool isMatch = (Math.Abs(MyPath.Bounds.X - ExpectedBounds.X) < TOLERANCE);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7965735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档