使用C#为基于节点的接口绘制交互元素

时间:2012-12-16 01:32:12

标签: c# wpf user-interface opengl xna

注意:这个问题不是关于使用一些预制的libarys,所以它可能不是Implementing a node-based graphical interface?

的共同点

我正在尝试在材质编辑器中使用类似Autodesk 3DS MAX的基于节点的界面:

enter image description here

到目前为止,我有一些简单的图形(.png)用于某些节点,我刚刚完成了曲线线算法(Cubic Bezier曲线)

到目前为止,所有的逻辑,类和其他代码都是70%,但我想知道在C#WinForm中实现基于节点的接口的“正确”方法到底是什么。

我曾考虑使用OpenGL或XNA(Direct3D),但后来我认为这对于此目的来说太过分了。

下一个WPF出现在我的脑海中,但我还是没有和WPF一起工作过这样的事情,所以我不知道这是否可行,而且性能也不错。

这样的猜测,我能够在每个节点周围拖动吗?我可以用绘制的图形注册点击和拖动事件吗?

我希望能够让用户创建节点,为它们提供属性和值,连接节点并将它们拖动到WinForm的滚动区域(就像在容器中一样)

嗯,你的建议是什么?从哪里开始?该怎么办 ?也许有任何例子或参考?


修改

这是我想要制作的节点的结构的简单(图形)示例: enter image description here

正如您所看到的,我希望节点内部有按钮,或者其他用户控制的元素,如开关或调光器等。请注意,此图像仅用于显示我想如何构建节点和每个“矩形”。

所以每个矩形应该有它自己的属性 (signal = true / false,connectedNode =“node_id”) 还有它自己的鼠标事件,我想将所有矩形分组到一个代表节点的对象。

所以我的问题是:我如何在“控制元素”中绘制矩形,如“面板”? (我最好的情况是我想使用.png的主矩形和连接器矩形而不是绘制普通的颜色重新组合)


更新 system.drawing类是什么?我可以简单地绘制成“面板”元素吗?什么是可拖动性?

2 个答案:

答案 0 :(得分:1)

首先,你需要不支持mani tec能够做你需要的。

关于表现是:

按优先级排序的列表

-xna或open gl - (Direct 3d或Direct X)
-windows表单(System.Windows.Forms)
-wpf

如果您对从最简单的开始顺序开发感兴趣:

-wpf
-winforms
-xna(...)


为了帮助你,我会说:

在Win Forms中,您可以执行自定义用户控件,在用户控件中,您可以覆盖受保护的方法调用onPaint,在此方法中,您可以执行与鼠标的移动和单击交互的实时设计。

如果您需要更多关于它的信息,请询问。

答案 1 :(得分:1)

您应该能够找到自定义Winforms用户控件可以响应的鼠标按下和鼠标按下事件。从那里你应该能够实现点击和拖动(鼠标点击的控件相对位置通常在事件结构中传递)并从那里开始。

我首先编写一个小型原型,可以拖动单个物体并从那里开始 - 尝试几种不同的方式,看看什么是可以理解和干净的。

完成后你可以开始设计课程设置;您可能希望将大量常见的拖放代码放在实现边界框等的基类中,然后创建要绘制的对象/节点/行列表及其关联。慢慢建立自己的方式;不打算一次性建造整个东西。