void GUIEdge::drawGL(const GUIVisualizationSettings& s) const { if (s.hideConnectors && myFunction == MSEdge::EDGEFUNCTION_CONNECTOR) { return; } glPushName(getGlID()); // draw the lanes for (std::vector<MSLane*>::const_iterator i = myLanes->begin(); i != myLanes->end(); ++i) { if (MSGlobals::gUseMesoSim) { setColor(s); } GUILane* l = dynamic_cast<GUILane*>(*i); if (l != 0) { l->drawGL(s); } } if (MSGlobals::gUseMesoSim) { if (s.scale * s.vehicleSize.getExaggeration(s) > s.vehicleSize.minSize) { drawMesoVehicles(s); } } glPopName(); // (optionally) draw the name and/or the street name const bool drawEdgeName = s.edgeName.show && myFunction == EDGEFUNCTION_NORMAL; const bool drawInternalEdgeName = s.internalEdgeName.show && myFunction == EDGEFUNCTION_INTERNAL; const bool drawCwaEdgeName = s.cwaEdgeName.show && (myFunction == EDGEFUNCTION_CROSSING || myFunction == EDGEFUNCTION_WALKINGAREA); const bool drawStreetName = s.streetName.show && myStreetName != ""; if (drawEdgeName || drawInternalEdgeName || drawCwaEdgeName || drawStreetName) { GUILane* lane1 = dynamic_cast<GUILane*>((*myLanes)[0]); GUILane* lane2 = dynamic_cast<GUILane*>((*myLanes).back()); if (lane1 != 0 && lane2 != 0) { Position p = lane1->getShape().positionAtOffset(lane1->getShape().length() / (SUMOReal) 2.); p.add(lane2->getShape().positionAtOffset(lane2->getShape().length() / (SUMOReal) 2.)); p.mul(.5); SUMOReal angle = lane1->getShape().rotationDegreeAtOffset(lane1->getShape().length() / (SUMOReal) 2.); angle += 90; if (angle > 90 && angle < 270) { angle -= 180; } if (drawEdgeName) { drawName(p, s.scale, s.edgeName, angle); } else if (drawInternalEdgeName) { drawName(p, s.scale, s.internalEdgeName, angle); } else if (drawCwaEdgeName) { drawName(p, s.scale, s.cwaEdgeName, angle); } if (drawStreetName) { GLHelper::drawText(getStreetName(), p, GLO_MAX, s.streetName.size / s.scale, s.streetName.color, angle); } } } if (s.scale * s.personSize.getExaggeration(s) > s.personSize.minSize) { myLock.lock(); for (std::set<MSTransportable*>::const_iterator i = myPersons.begin(); i != myPersons.end(); ++i) { GUIPerson* person = dynamic_cast<GUIPerson*>(*i); assert(person != 0); person->drawGL(s); } myLock.unlock(); } if (s.scale * s.containerSize.getExaggeration(s) > s.containerSize.minSize) { myLock.lock(); for (std::set<MSTransportable*>::const_iterator i = myContainers.begin(); i != myContainers.end(); ++i) { GUIContainer* container = dynamic_cast<GUIContainer*>(*i); assert(container != 0); container->drawGL(s); } myLock.unlock(); } }