【发布时间】:2011-11-14 01:25:35
【问题描述】:
我正在创建一个严重依赖图节点树的工具。当前的实现是用 Java 完成的,我将它移植到 C# 上的通用代码库,因此它可以被各种渲染实现使用,也因为我想使用 WPF 的强大功能来实现用户友好的界面。
浏览了一天,发现了各种通过 WPF 绘制矢量图形的方法。
This guy 谈到 WPF 开发人员可以选择的不同层。由于我想首先使用 WPF PURELY 进行渲染,所以我想在“视觉层”上工作。
然后我遇到了类似的事情: DrawingVisual, GeometryDrawing, FrameworkElement / UIElement / 形状
所以,所有不同的实现最终以完全不同的方式实现相同的效果,这让我有点不知所措。
Graph-Node 库已经移植到了 C# 中,并带有它的所有逻辑(包括碰撞检测和鼠标拖动)。由于它是在考虑图形渲染器(如 XNA、SlimDX、OpenTK 等)的情况下制作的,因此在性能方面实现 WPF 渲染器的最佳方式是什么(例如,它将绘制图形库告诉它的任何内容画画?
基本上,生成的 WPF 控件充当画布,但它必须是超级轻量级的,除了为我提供一种绘制圆圈、线条和其他形状的方法之外,它必须没有任何整洁的 WPF 功能:)
编辑:
我基本上想知道:要走的路是什么?我是否将 Canvas 扩展为我的图形的“主机”,然后添加我的 UIElement 的自定义实现?或者我可以有一个可以绘制所有东西的课程(例如,一个超级超级图形)。很像在 GDI 中重写 OnPaint 或在 Java 中重写 Paint-method(它提供了一个 Graphics 对象来做所有事情)。
【问题讨论】:
-
您希望在正常图中绘制多少个节点?
-
至少有数百个。图形在迭代中动态生成。每次迭代可以使节点数翻倍。我开始认为我最好使用某种 DirectX 实现(也许就剔除而言?)。
-
@Lennard:请记住,WPF 在后台使用 DirectX - 您可以免费获得大部分内容。 Canvas+Drawing 可以轻松扩展到数千个节点(至少在 Vista+ 中),尽管它使用的是 DirectX,所以它有点依赖显卡。
标签: c# wpf graphics graph vector-graphics