【发布时间】:2012-02-13 11:49:03
【问题描述】:
我正在编写一个 Python 模块,它应该为低级 GUI 平台提供一个简单的 OOP 接口。为此,需要创建一个包装类,供模块中的类使用。
这是基本实现的 (yet) 类图。
这个问题实际上与包装的设计无关,但如果您对此有疑问或知道什么可能更好,我不会介意任何 cmets/critics。 p>
DrawArea 类是底层平台和包中的类之间的粘合剂。事件通常从这里开始,因为包装器应该识别鼠标/键盘事件并通知它的孩子。
现在,如您所见,DrawArea 类需要实现一些函数来将基本元素渲染到 GUI 上。现在,我想了解渲染圆、圆角矩形、线条(有粗细)和抗锯齿背后的魔力。一个原因是我只是对那个主题感兴趣,另一个是我想用这个包提供一个实现。 (将用 C/C++ 编写,我很确定 Python 对于此类渲染操作会很慢,不是吗?)
现在我的问题:
- 有没有关于如何渲染圆形、椭圆、圆角矩形或线条的好的参考资料(有粗细,单像素线条很容易..)?
- 关于如何实现抗锯齿有什么好的参考资料吗?
- 例如,抗锯齿是在渲染元素时完成还是在完成所有渲染操作后应用?
- 使用类似
Path类的东西会更好吗? IE。应呈现的表单的矢量化表示。这将有利于呈现任何类型的二维形式,但我不知道如何实现它。有没有很好的矢量图形渲染参考资料?
【问题讨论】:
-
这是题外话,但我可以问一下你用什么来制作那个漂亮的类图吗?
-
@SigTerm Diggin 通过源代码不是黄色的,而是一个起点。在考虑抗锯齿时,我实际上并没有考虑过 Qt。我的目标不是创建一个糟糕的 Qt 克隆。我的目标是启用不受操作系统风格约束的高度动态和可定制的用户界面。仍然“有点”低级,但面向对象而不是线性渲染。我已经完成了这个模块的原型,但我不相信这个设计。此外,应该添加更多期货(如 AA)。 (参见上一个版本的this video。
-
@Niklas R:“高度动态和可定制的用户界面,不受操作系统风格的约束。”这与 Qt 提供的有什么不同(你见过“qtdemo”吗?)?另外,请记住,此类系统的开发/维护会占用您大量时间 - 可能需要数年时间。
-
@NiklasR 当您要求提供参考时,我又添加了一些。我希望你喜欢它们,这将帮助你“助推”/“起点”:)。在 2D 中绘图可以是一个非常有趣的。我已经在 386 486 次上编写了游戏,然后进行了 C/汇编优化,这是必须的和具有挑战性的乐趣:)。花时间为你自己画线、圆写一些“玩具例子”。小心角落案例。填的比较流利的会全部2D渲染技术,开始搭建app吧。
-
记得手动奖励最佳答案,因为自动积分会飞走,或者只会给出一半的积分:stackoverflow.com/faq#bounty ;)。
标签: c++ python user-interface rendering 2d