64 #ifdef CHECK_MEMORY_LEAKS
66 #endif // CHECK_MEMORY_LEAKS
96 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 };
97 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 };
98 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 };
99 double vehiclePoly_PassengerSedanRightGlass[] = { 0.36, -.43, 0.34, -.47, 0.77, -.47, 0.67, -.37, 0.45, -.37, 0.34, -.47, -10000 };
100 double vehiclePoly_PassengerSedanLeftGlass[] = { 0.36, .43, 0.34, .47, 0.77, .47, 0.67, .37, 0.45, .37, 0.34, .47, -10000 };
101 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 };
102 double vehiclePoly_PassengerHatchbackRightGlass[] = { 0.36, -.43, 0.34, -.47, 0.94, -.47, 0.80, -.37, 0.45, -.37, 0.34, -.47, -10000 };
103 double vehiclePoly_PassengerHatchbackLeftGlass[] = { 0.36, .43, 0.34, .47, 0.94, .47, 0.80, .37, 0.45, .37, 0.34, .47, -10000 };
104 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 };
105 double vehiclePoly_PassengerWagonRightGlass[] = { 0.36, -.43, 0.34, -.47, 0.94, -.47, 0.87, -.37, 0.45, -.37, 0.34, -.47, -10000 };
106 double vehiclePoly_PassengerWagonLeftGlass[] = { 0.36, .43, 0.34, .47, 0.94, .47, 0.87, .37, 0.45, .37, 0.34, .47, -10000 };
107 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 };
109 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 };
110 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 };
111 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 };
112 double vehiclePoly_PassengerVanRightGlass[] = { 0.36, -.43, 0.20, -.47, 0.98, -.47, 0.91, -.37, 0.31, -.37, 0.20, -.47, -10000 };
113 double vehiclePoly_PassengerVanLeftGlass[] = { 0.36, .43, 0.20, .47, 0.98, .47, 0.91, .37, 0.31, .37, 0.20, .47, -10000 };
114 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 };
116 double vehiclePoly_DeliveryMediumRightGlass[] = { 0.21, -.43, 0.20, -.47, 0.38, -.47, 0.38, -.37, 0.31, -.37, 0.20, -.47, -10000 };
117 double vehiclePoly_DeliveryMediumLeftGlass[] = { 0.21, .43, 0.20, .47, 0.38, .47, 0.38, .37, 0.31, .37, 0.20, .47, -10000 };
119 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 };
120 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 };
121 double vehiclePoly_TransportRightGlass[] = { 0.36, -.47, 0.10, -.48, 1.25, -.48, 1.25, -.4, 0.3, -.4, 0.10, -.48, -10000 };
122 double vehiclePoly_TransportLeftGlass[] = { 0.36, .47, 0.10, .48, 1.25, .48, 1.25, .4, 0.3, .4, 0.10, .48, -10000 };
124 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 };
125 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 };
127 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 };
138 GUIGlObject& o, std::map<GUISUMOAbstractView*, int> &additionalVisualizations)
139 :
GUIGLObjectPopupMenu(app, parent, o), myVehiclesAdditionalVisualizations(additionalVisualizations) {
149 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_SHOW_ALL_ROUTES)) {
166 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_SHOW_ROUTE)) {
183 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_SHOW_BEST_LANES)) {
200 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_TRACKED)) {
201 myParent->startTrack(static_cast<GUIVehicle*>(myObject)->
getGlID());
211 myParent->stopTrack();
219 if (!static_cast<GUIVehicle*>(myObject)->hasActiveAddVisualisation(myParent,
VO_SHOW_LFLINKITEMS)) {
239 :
MSVehicle(pars, route, type, vehicleIndex),
250 while (i->first->removeAdditionalGLVisualisation(
this));
287 new FXMenuSeparator(ret);
289 if (trackedID < 0 || (
size_t)trackedID !=
getGlID()) {
294 new FXMenuSeparator(ret);
310 ret->
mkItem(
"left same route [#]",
false, (
unsigned int)
getParameter().repetitionNumber);
315 ret->
mkItem(
"waiting time [s]",
true,
317 ret->
mkItem(
"last lane change [s]",
true,
320 ret->
mkItem(
"position [m]",
true,
322 ret->
mkItem(
"speed [m/s]",
true,
324 ret->
mkItem(
"angle",
true,
326 ret->
mkItem(
"CO2 (HBEFA) [g/s]",
true,
328 ret->
mkItem(
"CO (HBEFA) [g/s]",
true,
330 ret->
mkItem(
"HC (HBEFA) [g/s]",
true,
332 ret->
mkItem(
"NOx (HBEFA) [g/s]",
true,
334 ret->
mkItem(
"PMx (HBEFA) [g/s]",
true,
336 ret->
mkItem(
"fuel (HBEFA) [l/s]",
true,
338 ret->
mkItem(
"noise (Harmonoise) [dB]",
true,
359 glBegin(GL_TRIANGLE_STRIP);
361 glVertex2d(-.5, .15);
362 glVertex2d( .5, .15);
379 glBegin(GL_TRIANGLES);
391 glTranslated(0, 0, offset * .1);
392 glPolygonOffset(0, offset * -1);
393 glBegin(GL_TRIANGLE_FAN);
395 while (poses[i] > -999) {
396 glVertex2d(poses[i], poses[i + 1]);
412 glRotated(90, 0, 0, 1);
421 drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
423 drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
427 glTranslated(0, 0, .045);
429 glTranslated(0, 0, -.045);
431 glTranslated(0, 0, .04);
434 glTranslated(0, 0, -.04);
439 glTranslated(.5, 0, 0);
440 glScaled(.25 / (length), 1, 1.);
441 glTranslated(0, 0, .045);
444 glTranslated(0, 0, -.045);
445 glTranslated(0, 0, .04);
448 glTranslated(0, 0, -.04);
458 drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
460 drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
463 drawPoly(vehiclePoly_PassengerVanBody, 4);
465 drawPoly(vehiclePoly_PassengerVanBodyFront, 4.5);
467 drawPoly(vehiclePoly_PassengerVanFrontGlass, 4.5);
468 drawPoly(vehiclePoly_PassengerVanRightGlass, 4.5);
469 drawPoly(vehiclePoly_PassengerVanLeftGlass, 4.5);
470 drawPoly(vehiclePoly_PassengerVanBackGlass, 4.5);
473 drawPoly(vehiclePoly_PassengerVanBody, 4);
475 drawPoly(vehiclePoly_PassengerVanBodyFront, 4.5);
477 drawPoly(vehiclePoly_PassengerVanFrontGlass, 4.5);
478 drawPoly(vehiclePoly_DeliveryMediumRightGlass, 4.5);
479 drawPoly(vehiclePoly_DeliveryMediumLeftGlass, 4.5);
484 glScaled(1. / (length), 1, 1.);
485 drawPoly(vehiclePoly_TransportBody, 4);
487 drawPoly(vehiclePoly_TransportFrontGlass, 4.5);
488 drawPoly(vehiclePoly_TransportRightGlass, 4.5);
489 drawPoly(vehiclePoly_TransportLeftGlass, 4.5);
496 glScaled(1. / (length), 1, 1.);
497 glTranslated(0, 0, .04);
498 glBegin(GL_TRIANGLE_FAN);
499 glVertex2d(ml / 2., 0);
502 glVertex2d(0 + .05, -.5);
503 glVertex2d(ml - .05, -.5);
504 glVertex2d(ml, -.45);
506 glVertex2d(ml - .05, .5);
507 glVertex2d(0 + .05, .5);
511 glTranslated(0, 0, -.04);
513 glTranslated(0, 0, .045);
516 glVertex2d(0 + .05, .48);
517 glVertex2d(0 + .05, -.48);
518 glVertex2d(0 + .15, -.48);
519 glVertex2d(0 + .15, .48);
521 glVertex2d(ml - .1, .45);
522 glVertex2d(ml - .1, -.45);
523 glVertex2d(ml - .05, -.45);
524 glVertex2d(ml - .05, .45);
526 glVertex2d(0 + .20, .49);
527 glVertex2d(0 + .20, .45);
528 glVertex2d(ml - .20, .45);
529 glVertex2d(ml - .20, .49);
531 glVertex2d(0 + .20, -.49);
532 glVertex2d(0 + .20, -.45);
533 glVertex2d(ml - .20, -.45);
534 glVertex2d(ml - .20, -.49);
537 glTranslated(0, 0, -.045);
547 glScaled(1. / (length), 1, 1.);
548 glTranslated(0, 0, .04);
549 glBegin(GL_TRIANGLE_FAN);
550 glVertex2d(length/ 2., 0);
553 glVertex2d(.05, -.5);
554 glVertex2d(length - .05, -.5);
555 glVertex2d(length, -.45);
556 glVertex2d(length, .45);
557 glVertex2d(length - .05, .5);
562 glTranslated(0, 0, -.04);
565 drawPoly(vehiclePoly_EVehicleBody, 4);
567 drawPoly(vehiclePoly_EVehicleFrontGlass, 4.5);
568 glTranslated(0, 0, .048);
573 glVertex2d(.35, -.5);
576 glVertex2d(.3, -.05);
577 glVertex2d(.7, -.05);
583 glVertex2d(.65, -.5);
586 glTranslated(0, 0, -.048);
613 glTranslated(0, 0, 0.1);
615 glTranslated(.4, 0, 0);
617 glTranslated(.4, 0, 0);
624 drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
626 drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
636 glBegin(GL_TRIANGLE_FAN);
637 glVertex2d(1 / 2., 0);
640 glVertex2d(0 + .05, -.05);
641 glVertex2d(1 - .05, -.05);
644 glVertex2d(1 - .05, .05);
645 glVertex2d(0 + .05, .05);
652 glBegin(GL_TRIANGLE_FAN);
653 glVertex2d(1 / 2., 0);
656 glVertex2d(0 + .05, -.2);
657 glVertex2d(1 - .05, -.2);
660 glVertex2d(1 - .05, .2);
661 glVertex2d(0 + .05, .2);
668 drawPoly(vehiclePoly_PassengerSedanRightGlass, 4.5);
669 drawPoly(vehiclePoly_PassengerSedanLeftGlass, 4.5);
670 drawPoly(vehiclePoly_PassengerSedanBackGlass, 4.5);
673 drawPoly(vehiclePoly_PassengerHatchbackRightGlass, 4.5);
674 drawPoly(vehiclePoly_PassengerHatchbackLeftGlass, 4.5);
675 drawPoly(vehiclePoly_PassengerHatchbackBackGlass, 4.5);
678 drawPoly(vehiclePoly_PassengerWagonRightGlass, 4.5);
679 drawPoly(vehiclePoly_PassengerWagonLeftGlass, 4.5);
680 drawPoly(vehiclePoly_PassengerWagonBackGlass, 4.5);
703 glTranslated(0, 0, .1);
706 glTranslated(0, 0, .1);
728 drawPoly(vehiclePoly_PassengerSedanRightGlass, 4.5);
729 drawPoly(vehiclePoly_PassengerSedanLeftGlass, 4.5);
730 drawPoly(vehiclePoly_PassengerSedanBackGlass, 4.5);
806 #define BLINKER_POS_FRONT .5
807 #define BLINKER_POS_BACK .5
811 glColor3d(1.f, .8f, 0);
847 glColor3f(1.f, .2f, 0);
870 glScaled(upscale, upscale, 1);
896 glColor3d(0., 1., 0.);
899 glVertex2d(0., minGap);
900 glVertex2d(-.5, minGap);
901 glVertex2d(.5, minGap);
906 glTranslated(0, 0, .1);
982 glTranslated(0, 0,
getType() - .1);
992 for (
int i = noReroutePlus1 - 1; i >= 0; i--) {
1002 if((*i).myLink==0) {
1005 MSLink* link = (*i).myLink;
1006 #ifdef HAVE_INTERNAL_LANES
1007 MSLane *via = link->getViaLane();
1016 if((*i).mySetRequest) {
1021 glTranslated(p.
x(), p.
y(), -.1);
1023 glTranslated(-p.
x(), -p.
y(), .1);
1032 const std::vector<MSVehicle::LaneQ> &
1052 switch (activeScheme) {
1069 SUMOReal hue = 180. + atan2(center.
x() - p.
x(), center.
y() - p.
y()) * 180. /
PI;
1078 SUMOReal hue = 180. + atan2(center.
x() - p.
x(), center.
y() - p.
y()) * 180. /
PI;
1087 SUMOReal hue = 180. + atan2(pb.
x() - pe.
x(), pb.
y() - pe.
y()) * 180. /
PI;
1101 switch (activeScheme) {
1162 glGetDoublev(GL_CURRENT_COLOR, colors);
1163 colors[0] -= darken;
1164 if (colors[0] < 0) {
1167 colors[1] -= darken;
1168 if (colors[1] < 0) {
1171 colors[2] -= darken;
1172 if (colors[2] < 0) {
1175 colors[3] -= darken;
1176 if (colors[3] < 0) {
1192 std::vector<std::vector<MSVehicle::LaneQ> > bestLanes =
myBestLanes;
1195 for (std::vector<std::vector<MSVehicle::LaneQ> >::iterator j = bestLanes.begin(); j != bestLanes.end(); ++j) {
1196 std::vector<MSVehicle::LaneQ> &lanes = *j;
1199 for (std::vector<MSVehicle::LaneQ>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
1200 gmax =
MAX2((*i).length, gmax);
1201 rmax =
MAX2((*i).occupation, rmax);
1203 for (std::vector<MSVehicle::LaneQ>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
1206 SUMOReal r = (*i).occupation / rmax;
1229 for (; i != r.
end(); ++i) {