【问题标题】:Displaying 2D Schematics in WPF with Drawing Visuals使用绘图视觉效果在 WPF 中显示 2D 原理图
【发布时间】: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


    【解决方案1】:

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

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

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

    最后,对我来说最大的技巧是整合模型和视觉效果。我没有使用很多小模型,每个模型都是可命中测试的,有自己的颜色等,我将它们聚合成代表许多组件的大模型。然后我处理大模型的命中测试,以进一步细化选择并决定哪个小组件实际上应该被“命中”。从那里开始,我没有更改整个聚合模型的颜色,而是覆盖了一个较小的模型来表示选择。我想你明白了……

    所以你需要弄清楚你的绘图中哪个抽象部分没有很好地缩放 - 可能是 DrawingVisuals 的数量,或者你使用的其他一些 UIElement,然后尝试合并这些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多