基础#
每个路网对象都有一个在 GUIGlObjectTypes.h 中定义的类型(即 GLO_EDGE, GLO_JUNCTION, GL_VEHICLE, ...)。对象维护在三个地方:
- SUMORTree:基于位置查找对象的结构(用于高效绘图)
- GUIGlObjectStorage:基于数值 ID 检索对象并锁定对象以防止并发访问的结构
-
特定于类型的容器(例如,GUIEdges 维护在 MSEdge::dictionary 中)
Note
这也适用于 netedit
图层#
由于所有对象都是按照它们在 R 树中的存储顺序绘制的,因此之前没有进行 Z 轴排序。因此,对象必须分“图层”绘制。这是通过使用 glTranslated 实现的。每个对象类型也是一个整数值(枚举类型),用作绘制该类型对象的图层。由于 GLO_VEHICLE 的整数值为 256,因此它绘制在值较低的 GLO_LANE(值为 2)之上。有些对象本身由多个图层组成(例如 Busstops)。在这种情况下,使用 0.1 的增量,这不会干扰不同类型的对象。
作为一般规则,每个绘图例程应在开始时使用 glPushMatrix,使用 glTranslated(0,0,getType()) 设置图层,并在完成时使用 glPopMatrix。顶层标题(路口名称、道路名称等)在图层 GLO_MAX 处绘制。所有预定义图层的列表位于 <SUMO_HOME>/src/utils/gui/globjects/GUIGlObjectTypes.h 中。
多边形和 POI 中存储的图层信息以与 GUIGlObjectType 相同的方式使用(glTranslate(0,0,getLayer()))。这使得可以将多边形放置在绘图堆栈中的任何位置,从而允许视觉模拟隧道和其他遮挡道路的特征。
