6

我有一个相当大的 PathGeometry(超过 100,000 个点,并且被描边但未填充)要显示给用户,但任何时候只有一小部分路径可见。澄清一下,路径本身不是预先确定的,而是由数据创建的。

问题:我想提供非常平滑的平移,以便用户可以探索更大路径的区域。

我有一个可能的解决方案,但我不确定如何解决。我想使用平铺技术——将几何体拆分为平铺并仅加载可见的平铺。

那么,如何将仅描边的路径几何体拆分为图块。更具体地说,如何确定给定矩形图块中存在的路径部分?

我知道我可以使用 CombinedGeometry 来确定路径几何与矩形之间的相交,但这将包括矩形的“墙”(将被描边)。有没有更好的方法来平铺仅描边的 PathGeometry?

谢谢!

4

3 回答 3

3

也许不是平铺只有一个 pathgeometry 并使用数据绑定或其他任何方式以编程方式更改 pathdata 来表示您放大的路径段。有点像 DeepZoom,但有路径。这将意味着您不必搞乱合并路径。

我正在做与您类似的事情,但我在路径中使用的数字略少,所以我没有考虑使用任何虚拟化方法。但是,我没有注意到大量的性能问题。我在滚动查看器中有一条路径,代表大约 1000 - 10000 点,只有当我放大时,只有当这些点相距很远时,它才会变得迟钝。如果路径中的点相对靠近它们的邻居(例如,一个很好的扫描正弦波),那么 WPF 会对它们执行某种优化以防止任何可感知的滞后。

例如:这条路...

多个正弦波

...将需要比这条路径更长的时间来绘制:

简单正弦

即使它们包含相同数量的描述它的点。尽管实际上在您注意到性能差异之前,路径需要开始看起来像下图。

麻烦制造者

因为路径代表一个音频波,所以我打算通过执行某种检查以查看这些点是否正在创建一个巨大的深蓝色块并用耗电较少的东西替换它来摆脱任何未来的问题,但这可能不是为您提供足够的解决方案。

(抱歉图像中的大小差异,计算正弦波的位目前不起作用,所以我不得不使用旧的 jpeg)

于 2010-08-24T18:48:33.890 回答
2

我最近自己也在考虑这个问题,所以也许我的经验可以帮助你。首先,如果您能够使用 StreamGeometry 而不是 PathGeometry,您可以获得更好的性能。我建议创建一个 StreamGeometry 作为 Path 的 Data 属性,将其放置在画布上,然后应用 Scale 和 Translate 变换来导航形状。我在 5 或 6 个 SeriesGeometries 中获得了不错的性能,每个都有 1000 点(显然比你提到的数字少得多),但我相信只要你没有屏幕上的所有点,WPF 图形引擎就会很好地扩展同时。如果您需要支持“完全缩小”,即所有点都可见,那么我建议创建几何的低分辨率版本(即

那有意义吗?

祝你好运!

于 2010-09-16T04:42:49.167 回答
1

一种方法是,您将整个几何图形加载到画布中。然后对画布应用缩放。您可以使用第三方控件,例如 ab2d。

我已经在 Photoshop 中创建了这样的画布,其中包含大量图形(由用户创建),其中包含几何图形。我用 ab2d 用它的 menucontrol 来放大它,它工作得很好。您还可以为其中的一部分设置预定义的缩放。

谢谢 / subho100

于 2010-09-11T05:27:06.310 回答