【问题标题】:which would be better: lists, vectors or deques for CAD type program?哪个更好:CAD 类型程序的列表、向量或双端队列?
【发布时间】:2012-06-29 10:26:25
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c++ list stl vector cad


【解决方案1】:

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

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

最好的之一是OpenSceneGraph,它非常类似于 STL。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-11-21
        • 2015-05-01
        • 2013-03-14
        • 2013-03-17
        • 1970-01-01
        • 2016-06-04
        • 2018-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多