【发布时间】:2012-03-20 16:59:12
【问题描述】:
我正在创建一个 WPF 应用程序,它将显示城市规模水管理系统的 2D 矢量图形。我从数百页的阀门、泵、处理设施等以及将它们相互连接的管道的示意图中捕获了数据。结合个人住宅和商业物业的映射信息,数据集有大约 100,000 个节点实例以及互连管道信息。我有一个概念验证应用程序,它为每个管段或节点(节点非常简单;矩形、圆形等)创建一个 DrawingVisual,创建一个 DrawingContext,为管道或节点的图形表示呈现线段。 DrawingVisuals 被添加到画布中。每个视觉效果都是可命中测试的(我需要能够单击其中任何一个来获取更多详细信息)。问题在于,随着视觉效果的数量超过数千,性能(平移、缩放)会下降(但在那之前真的很酷!)。我试过摆弄抗锯齿和位图缓存,但没有多大帮助。
这种事情在 WPF 中可能吗?有更好的方法吗?我来自 MFC 背景,6-8 个月前才开始使用 WPF,尽管我有相当多的 C# 经验。通过阅读这里的帖子,我看到 Direct3D 经常被提及,但它似乎真的不适合平面、2D、线条图的要求,还是我错了?我见过的 XNF 教程只处理精灵,这似乎不太合适?我已阅读与业务图表相关的帖子;在这些情况下,下采样数据似乎是合适的,但我不确定我能做到这一点,因为每个节点和互连管道都是相关的。用户需要快速缩放和平移到原理图中的任何点。我在想 OpenGL 可能是一个值得探索的好东西,但我真的很喜欢 WPF 的所有功能(命中测试、出色的几何类等)
有什么建议吗?
谢谢!
【问题讨论】:
标签: c# wpf 2d zooming vector-graphics