65 #ifdef CHECK_MEMORY_LEAKS
67 #endif // CHECK_MEMORY_LEAKS
98 double
vehiclePoly_PassengerCarBody[] = { .5, 0, 0, 0, 0, .3, 0.08, .44, 0.25, .5, 0.95, .5, 1., .4, 1., -.4, 0.95, -.5, 0.25, -.5, 0.08, -.44, 0, -.3, 0, 0, -10000 };
99 double vehiclePoly_PassengerCarBodyFront[] = { 0.1, 0, 0.025, 0, 0.025, 0.25, 0.27, 0.4, 0.27, -.4, 0.025, -0.25, 0.025, 0, -10000 };
100 double vehiclePoly_PassengerFrontGlass[] = { 0.35, 0, 0.3, 0, 0.3, 0.4, 0.43, 0.3, 0.43, -0.3, 0.3, -0.4, 0.3, 0, -10000 };
101 double vehiclePoly_PassengerSedanRightGlass[] = { 0.36, -.43, 0.34, -.47, 0.77, -.47, 0.67, -.37, 0.45, -.37, 0.34, -.47, -10000 };
102 double vehiclePoly_PassengerSedanLeftGlass[] = { 0.36, .43, 0.34, .47, 0.77, .47, 0.67, .37, 0.45, .37, 0.34, .47, -10000 };
103 double vehiclePoly_PassengerSedanBackGlass[] = { 0.80, 0, 0.70, 0, 0.70, 0.3, 0.83, 0.4, 0.83, -.4, 0.70, -.3, 0.70, 0, -10000 };
104 double vehiclePoly_PassengerHatchbackRightGlass[] = { 0.36, -.43, 0.34, -.47, 0.94, -.47, 0.80, -.37, 0.45, -.37, 0.34, -.47, -10000 };
105 double vehiclePoly_PassengerHatchbackLeftGlass[] = { 0.36, .43, 0.34, .47, 0.94, .47, 0.80, .37, 0.45, .37, 0.34, .47, -10000 };
106 double vehiclePoly_PassengerHatchbackBackGlass[] = { 0.92, 0, 0.80, 0, 0.80, 0.3, 0.95, 0.4, 0.95, -.4, 0.80, -.3, 0.80, 0, -10000 };
107 double vehiclePoly_PassengerWagonRightGlass[] = { 0.36, -.43, 0.34, -.47, 0.94, -.47, 0.87, -.37, 0.45, -.37, 0.34, -.47, -10000 };
108 double vehiclePoly_PassengerWagonLeftGlass[] = { 0.36, .43, 0.34, .47, 0.94, .47, 0.87, .37, 0.45, .37, 0.34, .47, -10000 };
109 double vehiclePoly_PassengerWagonBackGlass[] = { 0.92, 0, 0.90, 0, 0.90, 0.3, 0.95, 0.4, 0.95, -.4, 0.90, -.3, 0.90, 0, -10000 };
111 double vehiclePoly_PassengerVanBody[] = { .5, 0, 0, 0, 0, .4, 0.1, .5, 0.97, .5, 1., .47, 1., -.47, 0.97, -.5, 0.1, -.5, 0, -.4, 0, 0, -10000 };
112 double vehiclePoly_PassengerVanBodyFront[] = { 0.1, 0, 0.025, 0, 0.025, 0.25, 0.13, 0.4, 0.13, -.4, 0.025, -0.25, 0.025, 0, -10000 };
113 double vehiclePoly_PassengerVanFrontGlass[] = { 0.21, 0, 0.16, 0, 0.16, 0.4, 0.29, 0.3, 0.29, -0.3, 0.16, -0.4, 0.16, 0, -10000 };
114 double vehiclePoly_PassengerVanRightGlass[] = { 0.36, -.43, 0.20, -.47, 0.98, -.47, 0.91, -.37, 0.31, -.37, 0.20, -.47, -10000 };
115 double vehiclePoly_PassengerVanLeftGlass[] = { 0.36, .43, 0.20, .47, 0.98, .47, 0.91, .37, 0.31, .37, 0.20, .47, -10000 };
116 double vehiclePoly_PassengerVanBackGlass[] = { 0.95, 0, 0.94, 0, 0.94, 0.3, 0.98, 0.4, 0.98, -.4, 0.94, -.3, 0.94, 0, -10000 };
118 double vehiclePoly_DeliveryMediumRightGlass[] = { 0.21, -.43, 0.20, -.47, 0.38, -.47, 0.38, -.37, 0.31, -.37, 0.20, -.47, -10000 };
119 double vehiclePoly_DeliveryMediumLeftGlass[] = { 0.21, .43, 0.20, .47, 0.38, .47, 0.38, .37, 0.31, .37, 0.20, .47, -10000 };
121 double vehiclePoly_TransportBody[] = { .5, 0, 0, 0, 0, .45, 0.05, .5, 2.25, .5, 2.25, -.5, 0.05, -.5, 0, -.45, 0, 0, -10000 };
122 double vehiclePoly_TransportFrontGlass[] = { 0.1, 0, 0.05, 0, 0.05, 0.45, 0.25, 0.4, 0.25, -.4, 0.05, -0.45, 0.05, 0, -10000 };
123 double vehiclePoly_TransportRightGlass[] = { 0.36, -.47, 0.10, -.48, 1.25, -.48, 1.25, -.4, 0.3, -.4, 0.10, -.48, -10000 };
124 double vehiclePoly_TransportLeftGlass[] = { 0.36, .47, 0.10, .48, 1.25, .48, 1.25, .4, 0.3, .4, 0.10, .48, -10000 };
126 double vehiclePoly_EVehicleBody[] = { .5, 0, 0, 0, 0, .3, 0.08, .44, 0.25, .5, 0.75, .5, .92, .44, 1, .3, 1, -.3, .92, -.44, .75, -.5, .25, -.5, 0.08, -.44, 0, -.3, 0, 0, -1000 };
127 double vehiclePoly_EVehicleFrontGlass[] = { .5, 0, 0.05, .05, 0.05, .25, 0.13, .39, 0.3, .45, 0.70, .45, .87, .39, .95, .25, .95, -.25, .87, -.39, .70, -.45, .3, -.45, 0.13, -.39, 0.05, -.25, 0.05, 0.05, -1000 };
129 double vehiclePoly_EVehicleBackGlass[] = { 0.65, 0, 0.9, 0, 0.9, 0.4, 0.57, 0.3, 0.57, -0.3, 0.9, -0.4, 0.9, 0, -10000 };
140 GUIGlObject& o, std::map<GUISUMOAbstractView*, int>& additionalVisualizations)
141 :
GUIGLObjectPopupMenu(app, parent, o), myVehiclesAdditionalVisualizations(additionalVisualizations) {
151 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_SHOW_ALL_ROUTES)) {
168 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_SHOW_ROUTE)) {
185 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_SHOW_BEST_LANES)) {
202 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_TRACKED)) {
203 myParent->startTrack(static_cast<GUIVehicle*>(myObject)->
getGlID());
213 myParent->stopTrack();
221 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_SHOW_LFLINKITEMS)) {
248 MSVehicle(pars, route, type, speedFactor),
260 while (i->first->removeAdditionalGLVisualisation(
this));
297 new FXMenuSeparator(ret);
299 if (trackedID < 0 || (
size_t)trackedID !=
getGlID()) {
306 new FXMenuSeparator(ret);
321 ret->
mkItem(
"position [m]",
true,
323 ret->
mkItem(
"speed [m/s]",
true,
325 ret->
mkItem(
"angle [degree]",
true,
330 ret->
mkItem(
"time gap [s]",
true,
332 ret->
mkItem(
"waiting time [s]",
true,
334 ret->
mkItem(
"impatience",
true,
336 ret->
mkItem(
"last lane change [s]",
true,
349 ret->
mkItem(
"CO2 [mg/s]",
true,
351 ret->
mkItem(
"CO [mg/s]",
true,
353 ret->
mkItem(
"HC [mg/s]",
true,
355 ret->
mkItem(
"NOx [mg/s]",
true,
357 ret->
mkItem(
"PMx [mg/s]",
true,
359 ret->
mkItem(
"fuel [ml/s]",
true,
361 ret->
mkItem(
"noise (Harmonoise) [dB]",
true,
364 ret->
mkItem(
"",
false,
"");
365 ret->
mkItem(
"Type Information:",
false,
"");
396 glBegin(GL_TRIANGLE_STRIP);
398 glVertex2d(-.5, .15);
416 glBegin(GL_TRIANGLES);
428 glTranslated(0, 0, offset * .1);
429 glPolygonOffset(0, offset * -1);
430 glBegin(GL_TRIANGLE_FAN);
432 while (poses[i] > -999) {
433 glVertex2d(poses[i], poses[i + 1]);
450 glRotated(90, 0, 0, 1);
451 glScaled(length, width, 1.);
459 drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
461 drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
464 glTranslated(0, 0, .045);
466 glTranslated(0, 0, -.045);
468 glTranslated(0, 0, .04);
471 glTranslated(0, 0, -.04);
477 glTranslated(.5, 0, 0);
478 glScaled(.25 / (length), 1, 1.);
479 glTranslated(0, 0, .045);
482 glTranslated(0, 0, -.045);
483 glTranslated(0, 0, .04);
486 glTranslated(0, 0, -.04);
496 drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
498 drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
501 drawPoly(vehiclePoly_PassengerVanBody, 4);
503 drawPoly(vehiclePoly_PassengerVanBodyFront, 4.5);
505 drawPoly(vehiclePoly_PassengerVanFrontGlass, 4.5);
506 drawPoly(vehiclePoly_PassengerVanRightGlass, 4.5);
507 drawPoly(vehiclePoly_PassengerVanLeftGlass, 4.5);
508 drawPoly(vehiclePoly_PassengerVanBackGlass, 4.5);
511 drawPoly(vehiclePoly_PassengerVanBody, 4);
513 drawPoly(vehiclePoly_PassengerVanBodyFront, 4.5);
515 drawPoly(vehiclePoly_PassengerVanFrontGlass, 4.5);
516 drawPoly(vehiclePoly_DeliveryMediumRightGlass, 4.5);
517 drawPoly(vehiclePoly_DeliveryMediumLeftGlass, 4.5);
522 glScaled(1. / (length), 1, 1.);
523 drawPoly(vehiclePoly_TransportBody, 4);
525 drawPoly(vehiclePoly_TransportFrontGlass, 4.5);
526 drawPoly(vehiclePoly_TransportRightGlass, 4.5);
527 drawPoly(vehiclePoly_TransportLeftGlass, 4.5);
533 glScaled(1. / (length), 1, 1.);
534 glTranslated(0, 0, .04);
535 glBegin(GL_TRIANGLE_FAN);
536 glVertex2d(ml / 2., 0);
539 glVertex2d(0 + .05, -.5);
540 glVertex2d(ml - .05, -.5);
541 glVertex2d(ml, -.45);
543 glVertex2d(ml - .05, .5);
544 glVertex2d(0 + .05, .5);
548 glTranslated(0, 0, -.04);
550 glTranslated(0, 0, .045);
553 glVertex2d(0 + .05, .48);
554 glVertex2d(0 + .05, -.48);
555 glVertex2d(0 + .15, -.48);
556 glVertex2d(0 + .15, .48);
558 glVertex2d(ml - .1, .45);
559 glVertex2d(ml - .1, -.45);
560 glVertex2d(ml - .05, -.45);
561 glVertex2d(ml - .05, .45);
563 glVertex2d(0 + .20, .49);
564 glVertex2d(0 + .20, .45);
565 glVertex2d(ml - .20, .45);
566 glVertex2d(ml - .20, .49);
568 glVertex2d(0 + .20, -.49);
569 glVertex2d(0 + .20, -.45);
570 glVertex2d(ml - .20, -.45);
571 glVertex2d(ml - .20, -.49);
574 glTranslated(0, 0, -.045);
584 drawPoly(vehiclePoly_EVehicleBody, 4);
586 drawPoly(vehiclePoly_EVehicleFrontGlass, 4.5);
587 glTranslated(0, 0, .048);
592 glVertex2d(.35, -.5);
595 glVertex2d(.3, -.05);
596 glVertex2d(.7, -.05);
602 glVertex2d(.65, -.5);
605 glTranslated(0, 0, -.048);
632 glTranslated(0, 0, 0.1);
634 glTranslated(.4, 0, 0);
636 glTranslated(.4, 0, 0);
643 drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
645 drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
655 glBegin(GL_TRIANGLE_FAN);
656 glVertex2d(1 / 2., 0);
659 glVertex2d(0 + .05, -.05);
660 glVertex2d(1 - .05, -.05);
663 glVertex2d(1 - .05, .05);
664 glVertex2d(0 + .05, .05);
672 glBegin(GL_TRIANGLE_FAN);
673 glVertex2d(1 / 2., 0);
676 glVertex2d(0 + .05, -.2);
677 glVertex2d(1 - .05, -.2);
680 glVertex2d(1 - .05, .2);
681 glVertex2d(0 + .05, .2);
688 drawPoly(vehiclePoly_PassengerSedanRightGlass, 4.5);
689 drawPoly(vehiclePoly_PassengerSedanLeftGlass, 4.5);
690 drawPoly(vehiclePoly_PassengerSedanBackGlass, 4.5);
693 drawPoly(vehiclePoly_PassengerHatchbackRightGlass, 4.5);
694 drawPoly(vehiclePoly_PassengerHatchbackLeftGlass, 4.5);
695 drawPoly(vehiclePoly_PassengerHatchbackBackGlass, 4.5);
698 drawPoly(vehiclePoly_PassengerWagonRightGlass, 4.5);
699 drawPoly(vehiclePoly_PassengerWagonLeftGlass, 4.5);
700 drawPoly(vehiclePoly_PassengerWagonBackGlass, 4.5);
723 glTranslated(0, 0, .1);
726 glTranslated(0, 0, .1);
744 drawPoly(vehiclePoly_PassengerSedanRightGlass, 4.5);
745 drawPoly(vehiclePoly_PassengerSedanLeftGlass, 4.5);
746 drawPoly(vehiclePoly_PassengerSedanBackGlass, 4.5);
864 #define BLINKER_POS_FRONT .5
865 #define BLINKER_POS_BACK .5
869 glColor3d(1.f, .8f, 0);
905 glColor3f(1.f, .2f, 0);
930 glScaled(upscale, upscale, 1);
966 glColor3d(0., 1., 0.);
969 glVertex2d(0., minGap);
970 glVertex2d(-.5, minGap);
971 glVertex2d(.5, minGap);
976 glTranslated(0, 0, .1);
1045 size_t personIndex = 0;
1046 for (std::vector<MSPerson*>::const_iterator i = ps.begin(); i != ps.end(); ++i) {
1048 assert(person != 0);
1060 glTranslated(0, 0,
getType() - .1);
1070 for (
int i = noReroutePlus1 - 1; i >= 0; i--) {
1080 if ((*i).myLink == 0) {
1083 MSLink* link = (*i).myLink;
1087 if ((*i).mySetRequest) {
1088 glColor3d(0, .8, 0);
1090 glColor3d(.8, 0, 0);
1092 const SUMOTime leaveTime = (*i).myLink->getLeaveTime(
1110 glTranslated(pos.
x(), pos.
y(), -.1);
1114 glTranslated(-pos.
x(), -pos.
y(), .1);
1129 switch (activeScheme) {
1170 SUMOReal hue = 180. + atan2(center.
x() - p.
x(), center.
y() - p.
y()) * 180. /
PI;
1179 SUMOReal hue = 180. + atan2(center.
x() - p.
x(), center.
y() - p.
y()) * 180. /
PI;
1188 SUMOReal hue = 180. + atan2(pb.
x() - pe.
x(), pb.
y() - pe.
y()) * 180. /
PI;
1202 switch (activeScheme) {
1271 glGetDoublev(GL_CURRENT_COLOR, colors);
1272 colors[0] -= darken;
1273 if (colors[0] < 0) {
1276 colors[1] -= darken;
1277 if (colors[1] < 0) {
1280 colors[2] -= darken;
1281 if (colors[2] < 0) {
1284 colors[3] -= darken;
1285 if (colors[3] < 0) {
1301 std::vector<std::vector<MSVehicle::LaneQ> > bestLanes =
myBestLanes;
1304 for (std::vector<std::vector<MSVehicle::LaneQ> >::iterator j = bestLanes.begin(); j != bestLanes.end(); ++j) {
1305 std::vector<MSVehicle::LaneQ>& lanes = *j;
1308 for (std::vector<MSVehicle::LaneQ>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
1309 gmax =
MAX2((*i).length, gmax);
1310 rmax =
MAX2((*i).occupation, rmax);
1312 for (std::vector<MSVehicle::LaneQ>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
1315 SUMOReal r = (*i).occupation / rmax;
1340 size_t bestLaneIndex = (&r ==
myRoute ? 0 : bestLaneConts.
size());
1341 for (; i != r.
end(); ++i) {
1343 if (bestLaneIndex < bestLaneConts.size() && bestLaneConts[bestLaneIndex] != 0 && (*i) == &(bestLaneConts[bestLaneIndex]->getEdge())) {
1344 lane =
static_cast<GUILane*
>(bestLaneConts[bestLaneIndex]);
1347 lane =
static_cast<GUILane*
>((*i)->getLanes()[0]);
1376 const int numCarriages = floor(length / (defaultLength + carriageGap) + 0.5);
1377 assert(numCarriages > 0);
1378 const SUMOReal carriageLengthWithGap = length / numCarriages;
1379 const SUMOReal carriageLength = carriageLengthWithGap - carriageGap;
1382 int furtherIndex = 0;
1385 int backFurtherIndex = furtherIndex;
1391 if (requiredSeats > 0) {
1397 for (
int i = 0; i < numCarriages; ++i) {
1398 while (carriageOffset < 0) {
1408 while (carriageBackOffset < 0) {
1410 carriageBackOffset += backLane->
getLength();
1415 if (i >= firstPassengerCarriage) {
1419 glTranslated(front.
x(), front.
y(),
getType());
1420 glRotated(angle, 0, 0, 1);
1422 glBegin(GL_TRIANGLE_FAN);
1423 glVertex2d(-halfWidth + xCornerCut, 0);
1424 glVertex2d(-halfWidth, yCornerCut);
1425 glVertex2d(-halfWidth, carriageLength - yCornerCut);
1426 glVertex2d(-halfWidth + xCornerCut, carriageLength);
1427 glVertex2d(halfWidth - xCornerCut, carriageLength);
1428 glVertex2d(halfWidth, carriageLength - yCornerCut);
1429 glVertex2d(halfWidth, yCornerCut);
1430 glVertex2d(halfWidth - xCornerCut, 0);
1434 carriageOffset -= carriageLengthWithGap;
1435 carriageBackOffset -= carriageLengthWithGap;
1441 glTranslated(front.
x(), front.
y(),
getType());
1442 glRotated(angle, 0, 0, 1);
1465 if (requiredSeats <= 0) {
1468 const Line l(front, back);
1475 for (
SUMOReal p = 2; p <= length - 1; p += 1) {
1491 std::string result =
"";
1493 result +=
"parking";
1495 result +=
"stopped";
1499 if (
myStops.front().triggered) {
1500 result +=
", triggered";
1516 std::vector<const SUMOVehicle*> blockingFoes;
1517 std::vector<const MSPerson*> blockingPersons;
1520 for (std::vector<const SUMOVehicle*>::const_iterator it = blockingFoes.begin(); it != blockingFoes.end(); ++it) {
1523 #ifdef HAVE_INTERNAL_LANES
1525 for (MSLink::LinkLeaders::const_iterator it = linkLeaders.begin(); it != linkLeaders.end(); ++it) {
1529 if (leader->myLinkLeaders.count(
getID()) == 0) {
1534 for (std::vector<const MSPerson*>::iterator it_p = blockingPersons.begin(); it_p != blockingPersons.end(); ++it_p) {