2

我想创建一个类似于简单的 CAD 程序的东西,我可以在其中绘制圆、线、正方形等。没什么太花哨的东西,只是基本的绘图东西。

我对如何制作程序有一些想法,但我需要建议。在 CAD 程序中,可以绘制任意数量的矩形和形状,并删除他们想要的任何内容。

我在想每个绘制的图形(线、矩形、多边形)应该是一个类的实例,并且该实例应该存储在一个列表中,因为我希望绘制的每个形状都有自己的属性,如颜色、(x,y)坐标,线型等。例如,“rect_list”是一个容器,用于存储“矩形”类的实例。

对于这种制作程序的方法,什么是更好的容器?vector,listdeque?

4

3 回答 3

3

你的顶点列表应该在一个向量中(一旦你知道点的数量,调整向量的大小以容纳那么多并填充它),那么你需要一个所有这些向量的列表,这样你就可以插入中间并以其他方式操作有效地列出。

但是...您真正想要的是场景图。这是一个“树视图”模型,用于存储对象的 3D 视图,因此您可以轻松查看哪些对象与其他对象相关。它们还可以显示哪些对象在显示时隐藏了其他对象(因此您不需要同时绘制它们),或者哪些对象在屏幕外(同上)。

最好的之一是OpenSceneGraph,它非常像 STL。

于 2012-06-27T22:16:26.740 回答
3

我建议您使用 Qt 并使用他们的QGraphicsScene系统。场景包含QGraphicsItem孩子,那些可以包含更多他们自己的孩子。内存和父子关系为您处理。它们还具有空间索引功能,因此例如重绘可以快速访问所需的对象。该索引还允许快速确定哪些对象的边界框与鼠标位置相交。

我最近发布了两个非常简单 的使用 Qt 中图形场景/视图系统的特定方面的示例。它们都是独立的代码,可以在 Qt Creator 的空 Qt 项目中编译。

于 2012-06-28T02:06:11.830 回答
2

我会考虑一个用于快速添加和删除实体的链接列表。对于庞大的列表,当您在这里和那里删除实体时,会发生大量内存操作并减慢整个过程......

对于选择,在链表的情况下,您需要在实体级别保留一个自增整数值。

于 2012-06-28T13:25:34.757 回答