在WPF中显示2D示意图和图形可视化



我正在创建一个WPF应用程序,该应用程序将显示城市规模的水管理系统的2D矢量图形。我从数百页的阀门、泵、处理设施等以及连接它们的管道的示意图中获取了数据。将其与个人住宅和商业地产的映射信息相结合,数据集具有大约100000个节点实例以及互连管道信息。我有一个概念验证应用程序,它为每个管段或节点(节点非常简单;矩形、圆形等)创建DrawingVisual,创建DrawingContext,渲染管道的线段或节点的图形表示。DrawingVisuals将添加到画布中。每个视觉都是可测试的(我需要能够点击其中的任何一个来获得更详细的信息)。问题是,随着视觉效果的数量超过数千,性能(平移、缩放)会下降(不过,在那之前真的很酷!)。我试过摆弄抗锯齿&位图缓存,但没有多大帮助。

这种事情在WPF中可能发生吗?有更好的方法吗?我有MFC背景,6-8个月前才开始使用WPF,尽管我有相当多的C#经验。从阅读这里的帖子中,我看到Direct3D经常被提及,但它似乎真的不适合平面、2D、线条画,还是我错了?我看到的XNF教程只处理精灵,这似乎很不合适?我读过与商业图表相关的帖子;下采样数据在这些情况下似乎是合适的,但我不确定我能做到这一点,因为每个节点&互连管道是相关的。用户需要相当快的缩放&平移到示意图中的任何点。我认为OpenGL可能是一个值得探索的好东西,但我真的很喜欢WPF的所有功能(命中测试、伟大的几何类等)

有什么建议吗?

谢谢!

如果您还没有,您应该看看WPF性能工具:http://msdn.microsoft.com/en-us/library/aa969767.aspx.您应该能够了解真正的瓶颈在哪里,每次重新渲染的内容等等。

我不得不处理一些3D模型的WPF缩放问题。虽然我不太确定2D等效术语,但该建议可能仍然适用。

WPF有足够的优势,可以非常努力地为您的用例优化它,而不是考虑一些替代架构。我认为对我来说,理解和解决性能问题的工作要比处理其他框架少。

最后,对我来说,最大的诀窍是整合模型和视觉效果。我没有很多小模型,每个模型都可以测试,有自己的颜色等,而是把它们聚合成代表许多组件的大模型。然后,我处理大模型的命中测试,以进一步完善选择,并决定哪个小组件应该真正"命中"。从那里,我没有改变整个聚合模型的颜色,而是覆盖了一个较小的模型来表示选择。我想你明白了。。。

因此,你需要弄清楚绘图中哪个抽象部分的比例不好——可能是DrawingVisuals的数量,也可能是你使用的其他UIElement,然后尝试合并这些。

最新更新