哪个更好:CAD类型程序的列表,向量或deques?

时间:2012-06-27 22:11:42

标签: c++ list stl vector cad

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

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

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

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

3 个答案:

答案 0 :(得分:3)

你的顶点列表应该在一个向量中(一旦你知道了点的数量,调整向量的大小以容纳那么多并填充它),那么你需要一个所有这些向量的列表,这样你就可以插入到中间了否则有效地操纵清单。

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

最好的一个是OpenSceneGraph,它的STL很像。

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

对于选择,对于链表,您需要在实体级别保留自动增量整数值。