55 #include <mesosim/MESegment.h>
56 #include <mesosim/MELoop.h>
57 #include <mesosim/MEVehicle.h>
61 #ifdef CHECK_MEMORY_LEAKS
63 #endif // CHECK_MEMORY_LEAKS
69 GUIEdge::GUIEdge(
const std::string&
id,
unsigned int numericalID,
const std::string& streetName)
70 :
MSEdge(id, numericalID, streetName),
89 for (
unsigned int i = 0; i <
myLanes->size(); i++) {
97 assert(laneNo < myLanes->size());
98 return *((*myLanes)[laneNo]);
104 assert(laneNo < myLanes->size());
111 LaneWrapperVector::const_iterator i =
120 std::vector<GUIGlID> ret;
126 ret.push_back(edge->
getGlID());
138 for (
unsigned int j = 0; j < g.
size(); j++) {
150 netsWrappers.reserve(size);
151 for (DictType::iterator i =
myDict.begin(); i !=
myDict.end(); ++i) {
153 netsWrappers.push_back(static_cast<GUIEdge*>((*i).second));
183 ret->
mkItem(
"allowed speed [m/s]",
false, getAllowedSpeed());
184 ret->
mkItem(
"occupancy [%]",
true,
186 ret->
mkItem(
"mean vehicle speed [m/s]",
true,
188 ret->
mkItem(
"flow [veh/h/lane]",
true,
190 ret->
mkItem(
"#vehicles",
true,
192 ret->
mkItem(
"vehicle ids",
false, getVehicleIDs());
231 const std::vector<SUMOReal>& shapeRotations = (*l)->getShapeRotations();
232 const std::vector<SUMOReal>& shapeLengths = (*l)->getShapeLengths();
237 glTranslated(laneBeg.
x(), laneBeg.
y(), 0);
238 glRotated(shapeRotations[0], 0, 0, 1);
243 for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*
this); segment != 0; segment = segment->getNextSegment()) {
244 const std::vector<size_t> numCars = segment->getQueSizes();
245 const SUMOReal length = segment->getLength();
246 if (idx < numCars.size()) {
247 const SUMOReal avgCarSize = segment->getOccupancy() / segment->getCarNumber();
248 for (
size_t i = 0; i < numCars[idx]; i++) {
249 SUMOReal vehiclePosition = position + length - i * avgCarSize;
251 while (vehiclePosition < position) {
252 vehiclePosition += length;
255 while (shapePos < (
int)shapeRotations.size() - 1 && vehiclePosition > positionOffset + shapeLengths[shapePos]) {
257 positionOffset += shapeLengths[shapePos];
260 glTranslated(shape[shapePos].x(), shape[shapePos].y(), 0);
261 glRotated(shapeRotations[shapePos], 0, 0, 1);
264 glTranslated(xOff, -(vehiclePosition - positionOffset),
GLO_VEHICLE);
266 glScaled(1, avgCarSize, 1);
267 glBegin(GL_TRIANGLES);
269 glVertex2d(0 - 1.25, 1);
270 glVertex2d(0 + 1.25, 1);
287 if (drawEdgeName || drawInternalEdgeName || drawStreetName) {
295 if (angle > 90 && angle < 270) {
300 }
else if (drawInternalEdgeName) {
303 if (drawStreetName) {
312 GUIEdge::getVehicleNo()
const {
314 for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*
this); segment != 0; segment = segment->getNextSegment()) {
315 vehNo += segment->getCarNumber();
317 return (
unsigned int)vehNo;
322 GUIEdge::getVehicleIDs()
const {
323 std::string result =
" ";
324 std::vector<const MEVehicle*> vehs;
325 for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*
this); segment != 0; segment = segment->getNextSegment()) {
326 std::vector<const MEVehicle*> segmentVehs = segment->getVehicles();
327 vehs.insert(vehs.end(), segmentVehs.begin(), segmentVehs.end());
329 for (std::vector<const MEVehicle*>::const_iterator it = vehs.begin(); it != vehs.end(); it++) {
330 result += (*it)->getID() +
" ";
337 GUIEdge::getFlow()
const {
339 for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*
this); segment != 0; segment = segment->getNextSegment()) {
340 flow += (
SUMOReal) segment->getCarNumber() * segment->getMeanSpeed();
347 GUIEdge::getFlowAlternative()
const {
349 return MSGlobals::gMesoNet->getSegmentForEdge(*this)->getFlow() /
myLanes->size();
354 GUIEdge::getOccupancy()
const {
356 for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*
this); segment != 0; segment = segment->getNextSegment()) {
357 occ += segment->getOccupancy();
364 GUIEdge::getMeanSpeed()
const {
367 for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*
this); segment != 0; segment = segment->getNextSegment()) {
369 v += vehNo * segment->getMeanSpeed();
380 GUIEdge::getAllowedSpeed()
const {
381 return (*
myLanes)[0]->getMaxSpeed();
386 GUIEdge::getRelativeSpeed()
const {
387 return getMeanSpeed() / getAllowedSpeed();
393 GLHelper::setColor(s.edgeColorer.getScheme().getColor(getColorValue(s.edgeColorer.getActive())));
398 GUIEdge::getColorValue(
size_t activeScheme)
const {
399 switch (activeScheme) {
405 return getAllowedSpeed();
407 return getOccupancy();
409 return getMeanSpeed();
413 return getRelativeSpeed();