LCOV - code coverage report
Current view: top level - src/utils/gui/div - GUIBaseVehicleHelper.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 229 476 48.1 %
Date: 2024-05-02 15:31:40 Functions: 5 6 83.3 %

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4             : // This program and the accompanying materials are made available under the
       5             : // terms of the Eclipse Public License 2.0 which is available at
       6             : // https://www.eclipse.org/legal/epl-2.0/
       7             : // This Source Code may also be made available under the following Secondary
       8             : // Licenses when the conditions for such availability set forth in the Eclipse
       9             : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10             : // or later which is available at
      11             : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12             : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13             : /****************************************************************************/
      14             : /// @file    GUIBaseVehicleHelper.cpp
      15             : /// @author  Pablo Alvarez Lopez
      16             : /// @author  Mirko Barthauer
      17             : /// @date    Feb 2018
      18             : ///
      19             : // Functions used in GUIBaseVehicleHelper and GNEVehicle
      20             : /****************************************************************************/
      21             : #include <config.h>
      22             : #include <utils/foxtools/fxheader.h>
      23             : 
      24             : #include <utils/geom/PositionVector.h>
      25             : #include <utils/gui/globjects/GLIncludes.h>
      26             : #include <utils/gui/images/GUITexturesHelper.h>
      27             : #include <utils/common/SUMOVehicleClass.h>
      28             : #include <utils/gui/settings/GUIVisualizationSettings.h>
      29             : #include "GLHelper.h"
      30             : #include "GUIBaseVehicleHelper.h"
      31             : 
      32             : 
      33             : // ===========================================================================
      34             : // data definitions
      35             : // ===========================================================================
      36             : /* -------------------------------------------------------------------------
      37             :  * drawed shapes
      38             :  * ----------------------------------------------------------------------- */
      39             : static const 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 };
      40             : static const 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 };
      41             : static const 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 };
      42             : static const double vehiclePoly_PassengerSedanRightGlass[] = { 0.36, -.43,  0.34, -.47,  0.77, -.47,  0.67, -.37,  0.45, -.37,  0.34, -.47,  -10000 };
      43             : static const double vehiclePoly_PassengerSedanLeftGlass[] = { 0.36, .43,  0.34, .47,  0.77, .47,  0.67, .37,  0.45, .37,  0.34, .47,  -10000 };
      44             : static const 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 };
      45             : static const double vehiclePoly_PassengerHatchbackRightGlass[] = { 0.36, -.43,  0.34, -.47,  0.94, -.47,  0.80, -.37,  0.45, -.37,  0.34, -.47,  -10000 };
      46             : static const double vehiclePoly_PassengerHatchbackLeftGlass[] = { 0.36, .43,  0.34, .47,  0.94, .47,  0.80, .37,  0.45, .37,  0.34, .47,  -10000 };
      47             : static const 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 };
      48             : static const double vehiclePoly_PassengerWagonRightGlass[] = { 0.36, -.43,  0.34, -.47,  0.94, -.47,  0.87, -.37,  0.45, -.37,  0.34, -.47,  -10000 };
      49             : static const double vehiclePoly_PassengerWagonLeftGlass[] = { 0.36, .43,  0.34, .47,  0.94, .47,  0.87, .37,  0.45, .37,  0.34, .47,  -10000 };
      50             : static const 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 };
      51             : 
      52             : static const 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 };
      53             : static const 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 };
      54             : static const 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 };
      55             : static const double vehiclePoly_PassengerVanRightGlass[] = { 0.36, -.43,  0.20, -.47,  0.98, -.47,  0.91, -.37,  0.31, -.37,  0.20, -.47,  -10000 };
      56             : static const double vehiclePoly_PassengerVanLeftGlass[] = { 0.36, .43,  0.20, .47,  0.98, .47,  0.91, .37,  0.31, .37,  0.20, .47,  -10000 };
      57             : static const 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 };
      58             : 
      59             : static const double vehiclePoly_TaxiSign[] = { .56, .241,  .56, -.241,  .49, -.241,  .49, .241,    -10000 };
      60             : 
      61             : static const double vehiclePoly_DeliveryMediumRightGlass[] = { 0.21, -.43,  0.20, -.47,  0.38, -.47,  0.38, -.37,  0.31, -.37,  0.20, -.47,  -10000 };
      62             : static const double vehiclePoly_DeliveryMediumLeftGlass[] = { 0.21, .43,  0.20, .47,  0.38, .47,  0.38, .37,  0.31, .37,  0.20, .47,  -10000 };
      63             : 
      64             : static const 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 };
      65             : static const 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 };
      66             : static const double vehiclePoly_TransportRightGlass[] = { 0.36, -.47,  0.10, -.48,  1.25, -.48,  1.25, -.4,  0.3, -.4,  0.10, -.48,  -10000 };
      67             : static const double vehiclePoly_TransportLeftGlass[] = { 0.36, .47,  0.10, .48,  1.25, .48,  1.25, .4,  0.3, .4,  0.10, .48,  -10000 };
      68             : 
      69             : static const 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 };
      70             : static const 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 };
      71             : //static const double vehiclePoly_EVehicleFrontGlass[] = { 0.35,0,  0.1,0,  0.1,0.4,  0.43,0.3,  0.43,-0.3,  0.1,-0.4,  0.1,0,  -10000 };
      72             : //static const 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 };
      73             : 
      74             : static const double vehiclePoly_Ship[] =  { 0.25, 0,  0, 0,  0.1, 0.25, 0.2, 0.45, 0.25, 0.5,  0.95, 0.5, 1.0, 0.45,   1.0, -0.45, 0.95, -0.5,  0.25, -0.5, 0.2, -0.45,  0.1, -0.25, 0, 0,   -10000 };
      75             : static const double vehiclePoly_ShipDeck[] =  { 0.5, 0,  0.25, 0.4,  0.95, 0.4, 0.95, -0.4, 0.25, -0.4, 0.25, 0.4, -10000 };
      76             : static const double vehiclePoly_ShipSuperStructure[] =  { 0.8, 0,  0.5, 0.3,  0.85, 0.3,  0.85, -0.3, 0.5, -0.3,  0.5, 0.3,  -10000 };
      77             : 
      78             : static const double vehiclePoly_Cyclist[] =  { 0.5, 0,  0.25, 0.45,  0.25, 0.5, 0.8, 0.15,     0.8, -0.15, 0.25, -0.5, 0.25, -0.45,     -10000 };
      79             : static const double vehiclePoly_BicycleSeat[] = { 0.565, 0,  0.570, 0.03,  0.575, 0.05,  0.585, 0.06,  0.645, 0.06,  0.665, 0.07,  0.685, 0.10,  0.695, 0.13,  0.715, 0.16,  0.735, 0.18,  0.742, 0.17,  0.745, 0.16,  0.755, 0.13,  0.76, 0.11,  0.765, 0,  0.76, -0.11,  0.755, -0.13,  0.745, -0.16,  0.742, -0.17,  0.735, -0.18,  0.715, -0.16,  0.695, -0.13,  0.685, -0.10,  0.665, -0.07,  0.645, -0.06,  0.585, -0.06,  0.575, -0.05,  0.57, -0.03,     -10000 };
      80             : static const double vehiclePoly_MotorcycleSeat[] = { 0.5, 0,  0.503, 0.072,  0.506, 0.097,  0.518, 0.135,  0.539, 0.162,  0.567, 0.183,  0.641, 0.194,  0.698, 0.202,  0.706, 0.194,  0.713, 0.189,  0.721, 0.162,  0.729, 0.132,  0.732, 0.097,  0.734, 0.051,  0.735, 0,  0.734, -0.051,  0.732, -0.097,  0.729, -0.132,  0.721, -0.162,  0.713, -0.189,  0.706, -0.194,  0.698, -0.202,  0.641, -0.194,  0.567, -0.183,  0.539, -0.162,  0.518, -0.135,  0.506, -0.097,  0.503, -0.072,     -10000 };
      81             : 
      82             : static const double vehiclePoly_EmergencySign[] =   { .2, .5,  -.2, .5,  -.2, -.5,  .2, -.5, -10000 };
      83             : static const double vehiclePoly_Emergency[] =   { .1, .1,  -.1, .1,  -.1, -.1,  .1, -.1, -10000 };
      84             : static const double vehiclePoly_Emergency2[] =   { .04, .3,  -.04, .3,  -.04, -.3,  .04, -.3, -10000 };
      85             : 
      86             : static const double vehiclePoly_EmergencyLadder[] =   { -.5, .3, .5, .3, .5, .2, -.5, .2, -10000 };
      87             : static const double vehiclePoly_EmergencyLadder2[] =   { -.5, -.3, .5, -.3, .5, -.2, -.5, -.2, -10000 };
      88             : static const double vehiclePoly_EmergencyLadder3[] =   { -.45, .3, -.4, .3, -.4, -.3, -.45, -.3, -10000 };
      89             : static const double vehiclePoly_EmergencyLadder4[] =   { .45, .3, .4, .3, .4, -.3, .45, -.3, -10000 };
      90             : static const double vehiclePoly_EmergencyLadder5[] =   { .05, .3, .0, .3, .0, -.3, .05, -.3, -10000 };
      91             : static const double vehiclePoly_EmergencyLadder6[] =   { -.25, .3, -.2, .3, -.2, -.3, -.25, -.3, -10000 };
      92             : static const double vehiclePoly_EmergencyLadder7[] =   { .25, .3, .2, .3, .2, -.3, .25, -.3, -10000 };
      93             : 
      94             : static const double vehiclePoly_scooterBase[] = { -.17, .5, -.2, .5, -.2, -.5, -.17, -.5, -10000 };
      95             : static const double vehiclePoly_scooterBase2[] = { .98, .05, 1., .05, 1., -.05, .98, -.05, -10000 };
      96             : static const double vehiclePoly_scooterBase3[] = { -.32, .6, .32, .6, .32, -.6, -.32, -.6, -10000 };
      97             : 
      98             : static const double vehiclePoly_aircraft[] = {0.633, -0.500, 0.609, -0.465, 0.563, -0.460, 0.517, -0.168, 0.413, -0.156, 0.509, -0.053, 0.509, 0.053, 0.413, -0.156, 0.413, 0.156, 0.385, -0.101, 0.385, 0.101, 0.354, -0.058, 0.354, 0.058, 0.109, -0.050, 0.109, 0.050, 0, -0.003, 0, 0.003, 0, 0.003, 0.633, 0.500, 0.633, 0.500, 0.609, 0.465, 0.563, 0.460, 0.517, 0.168, 0.413, 0.156, 0.509, 0.053, 0.385, 0.101, 0.326, 0.158, 0.326, 0.108, 0.413, 0.156, 0.385, 0.101, 0.509, 0.053, 0.509, -0.053, 0.761, 0.043, 0.761, -0.043, 0.830, 0.030, 0.830, -0.030, 0.952, -0.196, 0.933, -0.196, 0.907, -0.008, 0.830, 0.030, 0.933, 0.196, 0.952, 0.196, 0.907, 0.008, 0.830, 0.030, 0.907, -0.008, 1.000, 0.003, 0.907, 0.008, 0.354, -0.058, 0.509, -0.053, 0.413, -0.156, 0.385, -0.101, 0.326, -0.158, 0.326, -0.108, 0.385, -0.101, -10000};
      99             : static const double vehiclePoly_aircraftEngines[] = {0.326, -0.158, 0.413, -0.156, 0.326, -0.108, 0.385, -0.101, 0.385, -0.101, 0.385, 0.101, 0.385, 0.101, 0.326, 0.108, 0.413, 0.156, 0.326, 0.158, -10000};
     100             : //static const double vehiclePoly_Rickshaw[] = { 0.5, 0,  0.25, 0.45,  0.25, 0.5, 0.8, 0.15,     0.8, -0.15, 0.25, -0.5, 0.25, -0.45,     -10000 };
     101             : 
     102             : // ===========================================================================
     103             : // method definitions
     104             : // ===========================================================================
     105             : 
     106             : void
     107     1162111 : GUIBaseVehicleHelper::drawPoly(const double* poses, const double offset) {
     108     1162111 :     GLHelper::pushMatrix();
     109     1162111 :     glTranslated(0, 0, offset * .1);
     110     1162111 :     glPolygonOffset(0, (GLfloat) - offset);
     111     1162111 :     glBegin(GL_TRIANGLE_FAN);
     112             :     int i = 0;
     113    10068802 :     while (poses[i] > -999) {
     114     8906691 :         glVertex2d(poses[i], poses[i + 1]);
     115     8906691 :         i = i + 2;
     116             :     }
     117     1162111 :     glEnd();
     118     1162111 :     GLHelper::popMatrix();
     119     1162111 : }
     120             : 
     121             : void
     122       64266 : GUIBaseVehicleHelper::drawAction_drawVehicleAsBoxPlus(const double width, const double length, bool amReversed) {
     123       64266 :     GLHelper::pushMatrix();
     124       64266 :     glScaled(width, length, 1.);
     125       64266 :     glBegin(GL_TRIANGLE_STRIP);
     126       64266 :     if (amReversed) {
     127           0 :         glVertex2d(-.5, 0.);
     128           0 :         glVertex2d(.5, 0.);
     129           0 :         glVertex2d(-.5, .85);
     130           0 :         glVertex2d(.5, .85);
     131           0 :         glVertex2d(0., 1.);
     132             :     } else {
     133       64266 :         glVertex2d(0., 0.);
     134       64266 :         glVertex2d(-.5, .15);
     135       64266 :         glVertex2d(.5, .15);
     136       64266 :         glVertex2d(-.5, 1.);
     137       64266 :         glVertex2d(.5, 1.);
     138             :     }
     139       64266 :     glEnd();
     140       64266 :     GLHelper::popMatrix();
     141       64266 : }
     142             : 
     143             : 
     144             : void
     145     7829220 : GUIBaseVehicleHelper::drawAction_drawVehicleAsTrianglePlus(const double width, const double length, bool amReversed) {
     146     7829220 :     if (length >= 8.) {
     147       64266 :         drawAction_drawVehicleAsBoxPlus(width, length, amReversed);
     148       64266 :         return;
     149             :     }
     150     7764954 :     GLHelper::pushMatrix();
     151     7764954 :     glScaled(width, length, 1.);
     152     7764954 :     glBegin(GL_TRIANGLES);
     153     7764954 :     if (amReversed) {
     154           0 :         glVertex2d(0., 1.);
     155           0 :         glVertex2d(-.5, 0.);
     156           0 :         glVertex2d(.5, 0.);
     157             :     } else {
     158     7764954 :         glVertex2d(0., 0.);
     159     7764954 :         glVertex2d(-.5, 1.);
     160     7764954 :         glVertex2d(.5, 1.);
     161             :     }
     162     7764954 :     glEnd();
     163     7764954 :     GLHelper::popMatrix();
     164             : }
     165             : 
     166             : 
     167             : void
     168           0 : GUIBaseVehicleHelper::drawAction_drawVehicleAsCircle(const double width, double detail) {
     169           0 :     const int steps = MIN2(MAX2(16, int(detail / 5)), 64);
     170           0 :     GLHelper::drawFilledCircle(width / 2, steps);
     171           0 : }
     172             : 
     173             : void
     174      198807 : GUIBaseVehicleHelper::drawAction_drawVehicleAsPoly(const GUIVisualizationSettings& s, const SUMOVehicleShape shape, const double width, const double length,
     175             :         int carriageIndex, bool isStopped, bool amReversed) {
     176             :     UNUSED_PARAMETER(s);
     177      198807 :     RGBColor current = GLHelper::getColor();
     178      198807 :     RGBColor lighter = current.changedBrightness(51);
     179      198807 :     RGBColor darker = current.changedBrightness(-51);
     180      198807 :     GLHelper::pushMatrix();
     181      198807 :     glRotated(90, 0, 0, 1);
     182             : 
     183      198807 :     glScaled(length, width, 1.);
     184             : 
     185             :     // If the vehicle is 'logically' reversed then reverse the drawing box
     186             :     //  NB at the moment the only vehicles that will have amReversed set true are trains. Here this supports a train with guiShape="aircraft"
     187      198807 :     if (amReversed) {
     188         749 :         glRotatef(180, 0, 0, 1);
     189         749 :         glTranslated(-1, 0, 0);
     190             :     }
     191             : 
     192             :     // draw main body
     193      198807 :     switch (shape) {
     194           0 :         case SUMOVehicleShape::UNKNOWN:
     195           0 :             drawPoly(vehiclePoly_PassengerCarBody, 4);
     196           0 :             GLHelper::setColor(lighter);
     197           0 :             drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
     198           0 :             glColor3d(0, 0, 0);
     199           0 :             drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
     200             :             break;
     201           0 :         case SUMOVehicleShape::PEDESTRIAN:
     202           0 :             glTranslated(0, 0, .045);
     203           0 :             GLHelper::drawFilledCircle(0.25);
     204           0 :             glTranslated(0, 0, -.045);
     205           0 :             glScaled(.7, 2, 1);
     206           0 :             glTranslated(0, 0, .04);
     207           0 :             GLHelper::setColor(lighter);
     208           0 :             GLHelper::drawFilledCircle(0.25);
     209           0 :             glTranslated(0, 0, -.04);
     210             :             break;
     211         551 :         case SUMOVehicleShape::BICYCLE:
     212             :         case SUMOVehicleShape::MOPED:
     213             :         case SUMOVehicleShape::MOTORCYCLE: {
     214         551 :             darker = current.changedBrightness(-50);
     215         551 :             if (!isStopped) {
     216             :                 // body
     217         491 :                 drawPoly(vehiclePoly_Cyclist, 4);
     218             :                 // head
     219         491 :                 GLHelper::pushMatrix();
     220         491 :                 glTranslated(0.4, 0, .5);
     221         491 :                 glScaled(0.1, 0.2, 1);
     222         491 :                 GLHelper::setColor(darker);
     223         491 :                 GLHelper::drawFilledCircle(1);
     224         491 :                 GLHelper::popMatrix();
     225          60 :             } else if (shape == SUMOVehicleShape::BICYCLE) {
     226             :                 // seat
     227          20 :                 GLHelper::setColor(darker);
     228          20 :                 drawPoly(vehiclePoly_BicycleSeat, 4);
     229             :             } else {
     230             :                 // seat
     231          40 :                 GLHelper::setColor(darker);
     232          40 :                 drawPoly(vehiclePoly_MotorcycleSeat, 4);
     233             :             }
     234             :             // bike frame
     235         551 :             GLHelper::setColor(RGBColor::GREY);
     236         551 :             GLHelper::pushMatrix();
     237         551 :             glTranslated(0.5, 0, .3);
     238         551 :             glScaled(0.5, 0.05, 1);
     239         551 :             GLHelper::drawFilledCircle(1);
     240         551 :             GLHelper::popMatrix();
     241             :             // handle bar
     242         551 :             GLHelper::pushMatrix();
     243         551 :             glTranslated(0.25, 0, .3);
     244         551 :             glScaled(0.02, 0.5, 1);
     245         551 :             GLHelper::drawFilledCircle(1);
     246         551 :             GLHelper::popMatrix();
     247             :         }
     248             :         break;
     249      191639 :         case SUMOVehicleShape::PASSENGER:
     250             :         case SUMOVehicleShape::PASSENGER_SEDAN:
     251             :         case SUMOVehicleShape::PASSENGER_HATCHBACK:
     252             :         case SUMOVehicleShape::PASSENGER_WAGON:
     253             :         case SUMOVehicleShape::TAXI:
     254      191639 :             drawPoly(vehiclePoly_PassengerCarBody, 4);
     255      191639 :             GLHelper::setColor(lighter);
     256      191639 :             drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
     257      191639 :             glColor3d(0, 0, 0);
     258      191639 :             drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
     259             :             break;
     260           0 :         case SUMOVehicleShape::PASSENGER_VAN:
     261           0 :             drawPoly(vehiclePoly_PassengerVanBody, 4);
     262           0 :             GLHelper::setColor(lighter);
     263           0 :             drawPoly(vehiclePoly_PassengerVanBodyFront, 4.5);
     264           0 :             glColor3d(0, 0, 0);
     265           0 :             drawPoly(vehiclePoly_PassengerVanFrontGlass, 4.5);
     266           0 :             drawPoly(vehiclePoly_PassengerVanRightGlass, 4.5);
     267           0 :             drawPoly(vehiclePoly_PassengerVanLeftGlass, 4.5);
     268           0 :             drawPoly(vehiclePoly_PassengerVanBackGlass, 4.5);
     269             :             break;
     270         431 :         case SUMOVehicleShape::DELIVERY:
     271         431 :             drawPoly(vehiclePoly_PassengerVanBody, 4);
     272         431 :             GLHelper::setColor(lighter);
     273         431 :             drawPoly(vehiclePoly_PassengerVanBodyFront, 4.5);
     274         431 :             glColor3d(0, 0, 0);
     275         431 :             drawPoly(vehiclePoly_PassengerVanFrontGlass, 4.5);
     276         431 :             drawPoly(vehiclePoly_DeliveryMediumRightGlass, 4.5);
     277         431 :             drawPoly(vehiclePoly_DeliveryMediumLeftGlass, 4.5);
     278             :             break;
     279        1786 :         case SUMOVehicleShape::TRUCK:
     280             :         case SUMOVehicleShape::TRUCK_SEMITRAILER:
     281             :         case SUMOVehicleShape::TRUCK_1TRAILER:
     282        1786 :             if (carriageIndex < 1) {
     283        1786 :                 glScaled(1. / (length), 1, 1.);
     284        1786 :                 drawPoly(vehiclePoly_TransportBody, 4);
     285        1786 :                 glColor3d(0, 0, 0);
     286        1786 :                 drawPoly(vehiclePoly_TransportFrontGlass, 4.5);
     287        1786 :                 drawPoly(vehiclePoly_TransportRightGlass, 4.5);
     288        1786 :                 drawPoly(vehiclePoly_TransportLeftGlass, 4.5);
     289             :             }
     290             :             break;
     291        1870 :         case SUMOVehicleShape::BUS:
     292             :         case SUMOVehicleShape::BUS_COACH:
     293             :         case SUMOVehicleShape::BUS_TROLLEY: {
     294             :             double ml = length;
     295        1870 :             glScaled(1. / (length), 1, 1.);
     296        1870 :             glTranslated(0, 0, .04);
     297        1870 :             glBegin(GL_TRIANGLE_FAN);
     298        1870 :             glVertex2d(ml / 2., 0);
     299        1870 :             glVertex2d(0, 0);
     300        1870 :             glVertex2d(0, -.45);
     301        1870 :             glVertex2d(0 + .05, -.5);
     302        1870 :             glVertex2d(ml - .05, -.5);
     303        1870 :             glVertex2d(ml, -.45);
     304        1870 :             glVertex2d(ml, .45);
     305        1870 :             glVertex2d(ml - .05, .5);
     306        1870 :             glVertex2d(0 + .05, .5);
     307        1870 :             glVertex2d(0, .45);
     308        1870 :             glVertex2d(0, 0);
     309        1870 :             glEnd();
     310        1870 :             glTranslated(0, 0, -.04);
     311             : 
     312        1870 :             glTranslated(0, 0, .045);
     313        1870 :             glColor3d(0, 0, 0);
     314        1870 :             glBegin(GL_QUADS);
     315        1870 :             glVertex2d(0 + .05, .48);
     316        1870 :             glVertex2d(0 + .05, -.48);
     317        1870 :             glVertex2d(0 + .15, -.48);
     318        1870 :             glVertex2d(0 + .15, .48);
     319             : 
     320        1870 :             glVertex2d(ml - .1, .45);
     321        1870 :             glVertex2d(ml - .1, -.45);
     322        1870 :             glVertex2d(ml - .05, -.45);
     323        1870 :             glVertex2d(ml - .05, .45);
     324             : 
     325        1870 :             glVertex2d(0 + .20, .49);
     326        1870 :             glVertex2d(0 + .20, .45);
     327        1870 :             glVertex2d(ml - .20, .45);
     328        1870 :             glVertex2d(ml - .20, .49);
     329             : 
     330        1870 :             glVertex2d(0 + .20, -.49);
     331        1870 :             glVertex2d(0 + .20, -.45);
     332        1870 :             glVertex2d(ml - .20, -.45);
     333        1870 :             glVertex2d(ml - .20, -.49);
     334             : 
     335        1870 :             glEnd();
     336        1870 :             glTranslated(0, 0, -.045);
     337             :         }
     338             :         break;
     339           0 :         case SUMOVehicleShape::BUS_FLEXIBLE:
     340             :         case SUMOVehicleShape::RAIL:
     341             :         case SUMOVehicleShape::RAIL_CAR:
     342             :         case SUMOVehicleShape::RAIL_CARGO: {
     343             :             // generic rail carriage (see GUIVehicle::drawAction_drawCarriageClass)
     344           0 :             glRotated(-90, 0, 0, 1);
     345           0 :             const double xCornerCut = 0.3 / width;
     346           0 :             const double yCornerCut = 0.4 / length;
     347             :             const double drawnCarriageLength = 1;
     348             :             const double halfWidth = 0.5;
     349           0 :             glBegin(GL_TRIANGLE_FAN);
     350           0 :             glVertex2d(-halfWidth + xCornerCut, 0);
     351           0 :             glVertex2d(-halfWidth, yCornerCut);
     352           0 :             glVertex2d(-halfWidth, drawnCarriageLength - yCornerCut);
     353           0 :             glVertex2d(-halfWidth + xCornerCut, drawnCarriageLength);
     354           0 :             glVertex2d(halfWidth - xCornerCut, drawnCarriageLength);
     355           0 :             glVertex2d(halfWidth, drawnCarriageLength - yCornerCut);
     356           0 :             glVertex2d(halfWidth, yCornerCut);
     357           0 :             glVertex2d(halfWidth - xCornerCut, 0);
     358           0 :             glEnd();
     359             :             // assume we are only rendering the head of the train (carriage rendering was disabled via param)
     360           0 :             glTranslated(0, 0, 0.1);
     361           0 :             glColor3d(0, 0, 0);
     362           0 :             glBegin(GL_TRIANGLE_FAN);
     363           0 :             glVertex2d(-halfWidth + 2 * xCornerCut, yCornerCut);
     364           0 :             glVertex2d(-halfWidth + xCornerCut, 3 * yCornerCut);
     365           0 :             glVertex2d(halfWidth - xCornerCut, 3 * yCornerCut);
     366           0 :             glVertex2d(halfWidth - 2 * xCornerCut, yCornerCut);
     367           0 :             glEnd();
     368             :         }
     369             :         break;
     370             : 
     371           0 :         case SUMOVehicleShape::E_VEHICLE:
     372           0 :             drawPoly(vehiclePoly_EVehicleBody, 4);
     373           0 :             glColor3d(0, 0, 0);
     374           0 :             drawPoly(vehiclePoly_EVehicleFrontGlass, 4.5);
     375           0 :             glTranslated(0, 0, .048);
     376           0 :             GLHelper::setColor(current);
     377           0 :             glBegin(GL_QUADS);
     378           0 :             glVertex2d(.3, .5);
     379           0 :             glVertex2d(.35, .5);
     380           0 :             glVertex2d(.35, -.5);
     381           0 :             glVertex2d(.3, -.5);
     382             : 
     383           0 :             glVertex2d(.3, -.05);
     384           0 :             glVertex2d(.7, -.05);
     385           0 :             glVertex2d(.7, .05);
     386           0 :             glVertex2d(.3, .05);
     387             : 
     388           0 :             glVertex2d(.7, .5);
     389           0 :             glVertex2d(.65, .5);
     390           0 :             glVertex2d(.65, -.5);
     391           0 :             glVertex2d(.7, -.5);
     392           0 :             glEnd();
     393           0 :             glTranslated(0, 0, -.048);
     394             :             //drawPoly(vehiclePoly_EVehicleBackGlass, 4.5);
     395             :             break;
     396           0 :         case SUMOVehicleShape::ANT:
     397           0 :             GLHelper::pushMatrix();
     398             :             // ant is stretched via vehicle length
     399           0 :             GLHelper::setColor(darker);
     400             :             // draw left side
     401           0 :             GLHelper::drawBoxLine(Position(-0.2, -.10), 350, 0.5, .02);
     402           0 :             GLHelper::drawBoxLine(Position(-0.3, -.50), 240, 0.4, .03);
     403           0 :             GLHelper::drawBoxLine(Position(0.3, -.10), 340, 0.8, .03);
     404           0 :             GLHelper::drawBoxLine(Position(0.05, -.80), 290, 0.6, .04);
     405           0 :             GLHelper::drawBoxLine(Position(0.4, -.10),  20, 0.8, .03);
     406           0 :             GLHelper::drawBoxLine(Position(0.65, -.80),  75, 0.6, .04);
     407           0 :             GLHelper::drawBoxLine(Position(0.5, -.10),  55, 0.8, .04);
     408           0 :             GLHelper::drawBoxLine(Position(1.1, -.55),  90, 0.6, .04);
     409             :             // draw right side
     410           0 :             GLHelper::drawBoxLine(Position(-0.2,  .10), 190, 0.5, .02);
     411           0 :             GLHelper::drawBoxLine(Position(-0.3,  .50), 300, 0.4, .03);
     412           0 :             GLHelper::drawBoxLine(Position(0.3,  .10), 200, 0.8, .03);
     413           0 :             GLHelper::drawBoxLine(Position(0.05, .80), 250, 0.6, .04);
     414           0 :             GLHelper::drawBoxLine(Position(0.4,  .10), 160, 0.8, .03);
     415           0 :             GLHelper::drawBoxLine(Position(0.65, .80), 105, 0.6, .04);
     416           0 :             GLHelper::drawBoxLine(Position(0.5,  .10), 125, 0.8, .04);
     417           0 :             GLHelper::drawBoxLine(Position(1.1,  .55),  90, 0.6, .04);
     418             :             // draw body
     419           0 :             GLHelper::setColor(current);
     420           0 :             glTranslated(0, 0, 0.1);
     421           0 :             GLHelper::drawFilledCircle(.25, 16);
     422           0 :             glTranslated(.4, 0, 0);
     423           0 :             GLHelper::drawFilledCircle(.2, 16);
     424           0 :             glTranslated(.4, 0, 0);
     425           0 :             GLHelper::drawFilledCircle(.3, 16);
     426           0 :             GLHelper::popMatrix();
     427             :             break;
     428         809 :         case SUMOVehicleShape::SHIP: {
     429         809 :             drawPoly(vehiclePoly_Ship, 4);
     430         809 :             GLHelper::setColor(current.changedBrightness(-30));
     431         809 :             drawPoly(vehiclePoly_ShipDeck, 5);
     432         809 :             GLHelper::setColor(current.changedBrightness(-70));
     433         809 :             drawPoly(vehiclePoly_ShipSuperStructure, 6);
     434             :             break;
     435             :         }
     436           0 :         case SUMOVehicleShape::EMERGENCY: // similar to delivery
     437           0 :             drawPoly(vehiclePoly_PassengerVanBody, 4);
     438           0 :             GLHelper::setColor(darker);
     439           0 :             drawPoly(vehiclePoly_PassengerVanBodyFront, 4.5);
     440           0 :             glColor3d(0, 0, 0);
     441           0 :             drawPoly(vehiclePoly_PassengerVanFrontGlass, 4.5);
     442           0 :             drawPoly(vehiclePoly_DeliveryMediumRightGlass, 4.5);
     443           0 :             drawPoly(vehiclePoly_DeliveryMediumLeftGlass, 4.5);
     444             :             // first aid sign
     445           0 :             glTranslated(0.7, 0, 0);
     446           0 :             glColor3d(.18, .55, .34);
     447           0 :             drawPoly(vehiclePoly_EmergencySign, 4.5);
     448           0 :             glColor3d(1, 1, 1);
     449           0 :             drawPoly(vehiclePoly_Emergency, 5);
     450           0 :             drawPoly(vehiclePoly_Emergency2, 5);
     451             :             break;
     452           0 :         case SUMOVehicleShape::FIREBRIGADE: // similar to delivery in red orange
     453           0 :             drawPoly(vehiclePoly_PassengerVanBody, 4);
     454           0 :             GLHelper::setColor(lighter);
     455           0 :             drawPoly(vehiclePoly_PassengerVanBodyFront, 4.5);
     456           0 :             glColor3d(0, 0, 0);
     457           0 :             drawPoly(vehiclePoly_PassengerVanFrontGlass, 4.5);
     458           0 :             drawPoly(vehiclePoly_DeliveryMediumRightGlass, 4.5);
     459           0 :             drawPoly(vehiclePoly_DeliveryMediumLeftGlass, 4.5);
     460             :             // draw ladder
     461           0 :             glTranslated(0.7, 0, 0);
     462           0 :             glColor3d(1, .5, 0);
     463           0 :             drawPoly(vehiclePoly_EmergencySign, 4.5);
     464           0 :             glColor3d(.5, .5, .5);
     465           0 :             drawPoly(vehiclePoly_EmergencyLadder, 5);
     466           0 :             drawPoly(vehiclePoly_EmergencyLadder2, 5);
     467           0 :             drawPoly(vehiclePoly_EmergencyLadder3, 5);
     468           0 :             drawPoly(vehiclePoly_EmergencyLadder4, 5);
     469           0 :             drawPoly(vehiclePoly_EmergencyLadder5, 5);
     470           0 :             drawPoly(vehiclePoly_EmergencyLadder6, 5);
     471           0 :             drawPoly(vehiclePoly_EmergencyLadder7, 5);
     472             :             break;
     473           0 :         case SUMOVehicleShape::POLICE: // similar to passenger grey with blue
     474           0 :             drawPoly(vehiclePoly_PassengerCarBody, 4);
     475           0 :             GLHelper::setColor(lighter);
     476           0 :             drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
     477           0 :             glColor3d(0, 0, 0);
     478           0 :             drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
     479             :             // first aid sign
     480           0 :             glTranslated(0.7, 0, 0);
     481           0 :             glColor3d(.5, .5, .5);
     482           0 :             drawPoly(vehiclePoly_EmergencySign, 4.5);
     483           0 :             glColor3d(0, 0, 1);
     484           0 :             drawPoly(vehiclePoly_Emergency, 5);
     485           0 :             drawPoly(vehiclePoly_Emergency2, 5);
     486             :             break;
     487           0 :         case SUMOVehicleShape::RICKSHAW: // Rickshaw
     488           0 :             drawPoly(vehiclePoly_PassengerCarBody, 4);
     489             :             // wheels
     490           0 :             GLHelper::setColor(darker);
     491           0 :             GLHelper::pushMatrix();
     492           0 :             glTranslated(.5, .5, -0.1);
     493           0 :             GLHelper::drawFilledCircle(.3, 6);
     494           0 :             GLHelper::popMatrix();
     495             :             //other wheel
     496           0 :             GLHelper::pushMatrix();
     497           0 :             glTranslated(.5, -.5, -0.1);
     498           0 :             GLHelper::drawFilledCircle(.3, 6);
     499           0 :             GLHelper::popMatrix();
     500             :             break;
     501             : 
     502        1721 :         case SUMOVehicleShape::AIRCRAFT: // Aircraft polygon has many points but we do not expect to have high numbers of aircraft being visualised!
     503        1721 :             GLHelper::pushMatrix();
     504        1721 :             glBegin(GL_TRIANGLE_STRIP);
     505             :             {
     506             :                 int i = 0;
     507       94655 :                 while (vehiclePoly_aircraft[i] > -999) {
     508       92934 :                     glVertex2d(vehiclePoly_aircraft[i], vehiclePoly_aircraft[i + 1]);
     509       92934 :                     i = i + 2;
     510             :                 }
     511             :             }
     512        1721 :             glEnd();
     513        1721 :             GLHelper::setColor(current.changedBrightness(-30));
     514        1721 :             glTranslated(0, 0, 0.1);
     515        1721 :             glBegin(GL_TRIANGLE_STRIP);
     516             :             {
     517             :                 int i = 0;
     518       18931 :                 while (vehiclePoly_aircraftEngines[i] > -999) {
     519       17210 :                     glVertex2d(vehiclePoly_aircraftEngines[i], vehiclePoly_aircraftEngines[i + 1]);
     520       17210 :                     i = i + 2;
     521             :                 }
     522             :             }
     523        1721 :             glEnd();
     524        1721 :             GLHelper::popMatrix();
     525             :             // navigation lights
     526        1721 :             glColor3d(1.f, 0, 0);
     527        1721 :             GLHelper::pushMatrix();
     528        1721 :             glTranslated(0.62, -0.49, 0.1);
     529        1721 :             GLHelper::drawFilledCircle(-.01, 6);
     530        1721 :             GLHelper::popMatrix();
     531        1721 :             glColor3d(0, 1.f, 0);
     532        1721 :             GLHelper::pushMatrix();
     533        1721 :             glTranslated(0.62, 0.49, 0.1);
     534        1721 :             GLHelper::drawFilledCircle(-.01, 6);
     535        1721 :             GLHelper::popMatrix();
     536             :             break;
     537             : 
     538           0 :         case SUMOVehicleShape::SCOOTER: {
     539           0 :             RGBColor darker2 = current.changedBrightness(-25);
     540           0 :             GLHelper::pushMatrix();
     541             :             // front small oval
     542           0 :             GLHelper::setColor(darker);
     543           0 :             glTranslated(0.2, 0, 0.15); // glTranslated(0.3, 0, 0.15);
     544           0 :             glScaled(0.09, 0.13, 0.7); // was glScaled(0.04, 0.06, 0.7);
     545           0 :             GLHelper::drawFilledCircle(1, 20);
     546           0 :             GLHelper::popMatrix();
     547             :             // handlebar
     548           0 :             GLHelper::pushMatrix();
     549           0 :             glTranslated(0.42, 0, 0.1); // was glTranslated(0.5, 0, 0.1);
     550           0 :             glColor3d(0.3, 0.3, 0.3);
     551           0 :             drawPoly(vehiclePoly_scooterBase, 5);
     552           0 :             GLHelper::popMatrix();
     553             :             // front oval
     554           0 :             GLHelper::pushMatrix();
     555           0 :             GLHelper::setColor(darker2);
     556           0 :             glTranslated(0.17, 0, 0.1); // was glTranslated(0.29, 0, 0.1);
     557           0 :             glScaled(0.17, 0.19, 0.9); // was glScaled(0.07, 0.08, 0.9);
     558           0 :             GLHelper::drawFilledCircle(1, 20);
     559           0 :             GLHelper::popMatrix();
     560             :             // tail rectangle
     561           0 :             GLHelper::pushMatrix();
     562           0 :             glColor3d(0.3, 0.3, 0.3);
     563           0 :             drawPoly(vehiclePoly_scooterBase2, 5);
     564             :             // tail oval
     565           0 :             GLHelper::setColor(darker2);
     566           0 :             glTranslated(0.83, 0, 0.1); // was glTranslated(0.71, 0, 0.1);
     567           0 :             glScaled(0.17, 0.17, 0.9); // was glScaled(0.07, 0.08, 0.9);
     568           0 :             GLHelper::drawFilledCircle(1, 20);
     569           0 :             GLHelper::popMatrix();
     570             :             // base oval
     571           0 :             GLHelper::pushMatrix();
     572           0 :             GLHelper::setColor(lighter);
     573           0 :             glTranslated(0.5, 0, 0.1); // was glTranslated(0.5, 0, 0.1);
     574           0 :             glScaled(0.5, 0.28, 0.9); // was glScaled(0.28, 0.14, 0.9);
     575           0 :             GLHelper::drawFilledCircle(1, 30);
     576             :             // center rectangle
     577           0 :             GLHelper::setColor(current);
     578           0 :             drawPoly(vehiclePoly_scooterBase3, 5);
     579           0 :             GLHelper::popMatrix();
     580             :             break;
     581             :         }
     582           0 :         default: // same as passenger
     583           0 :             drawPoly(vehiclePoly_PassengerCarBody, 4);
     584           0 :             glColor3d(1, 1, 1);
     585           0 :             drawPoly(vehiclePoly_PassengerCarBodyFront, 4.5);
     586           0 :             glColor3d(0, 0, 0);
     587           0 :             drawPoly(vehiclePoly_PassengerFrontGlass, 4.5);
     588             :             break;
     589             :     }
     590             : 
     591             :     // draw decorations
     592      198807 :     switch (shape) {
     593             :         case SUMOVehicleShape::PEDESTRIAN:
     594             :             break;
     595         180 :         case SUMOVehicleShape::BICYCLE:
     596             :             //glScaled(length, 1, 1.);
     597         180 :             glBegin(GL_TRIANGLE_FAN);
     598         180 :             glVertex2d(1 / 2., 0);
     599         180 :             glVertex2d(0, 0);
     600         180 :             glVertex2d(0, -.03);
     601         180 :             glVertex2d(0 + .05, -.05);
     602         180 :             glVertex2d(1 - .05, -.05);
     603         180 :             glVertex2d(1, -.03);
     604         180 :             glVertex2d(1, .03);
     605         180 :             glVertex2d(1 - .05, .05);
     606         180 :             glVertex2d(0 + .05, .05);
     607         180 :             glVertex2d(0, .03);
     608         180 :             glVertex2d(0, 0);
     609         180 :             glEnd();
     610             :             break;
     611         371 :         case SUMOVehicleShape::MOPED:
     612             :         case SUMOVehicleShape::MOTORCYCLE:
     613             :             //glScaled(length, 1, 1.);
     614         371 :             glBegin(GL_TRIANGLE_FAN);
     615         371 :             glVertex2d(1 / 2., 0);
     616         371 :             glVertex2d(0, 0);
     617         371 :             glVertex2d(0, -.03);
     618         371 :             glVertex2d(0 + .05, -.2);
     619         371 :             glVertex2d(1 - .05, -.2);
     620         371 :             glVertex2d(1, -.03);
     621         371 :             glVertex2d(1, .03);
     622         371 :             glVertex2d(1 - .05, .2);
     623         371 :             glVertex2d(0 + .05, .2);
     624         371 :             glVertex2d(0, .03);
     625         371 :             glVertex2d(0, 0);
     626         371 :             glEnd();
     627             :             break;
     628      191639 :         case SUMOVehicleShape::PASSENGER:
     629             :         case SUMOVehicleShape::PASSENGER_SEDAN:
     630      191639 :             drawPoly(vehiclePoly_PassengerSedanRightGlass, 4.5);
     631      191639 :             drawPoly(vehiclePoly_PassengerSedanLeftGlass, 4.5);
     632      191639 :             drawPoly(vehiclePoly_PassengerSedanBackGlass, 4.5);
     633             :             break;
     634           0 :         case SUMOVehicleShape::PASSENGER_HATCHBACK:
     635           0 :             drawPoly(vehiclePoly_PassengerHatchbackRightGlass, 4.5);
     636           0 :             drawPoly(vehiclePoly_PassengerHatchbackLeftGlass, 4.5);
     637           0 :             drawPoly(vehiclePoly_PassengerHatchbackBackGlass, 4.5);
     638             :             break;
     639           0 :         case SUMOVehicleShape::PASSENGER_WAGON:
     640           0 :             drawPoly(vehiclePoly_PassengerWagonRightGlass, 4.5);
     641           0 :             drawPoly(vehiclePoly_PassengerWagonLeftGlass, 4.5);
     642           0 :             drawPoly(vehiclePoly_PassengerWagonBackGlass, 4.5);
     643             :             break;
     644             :         case SUMOVehicleShape::PASSENGER_VAN:
     645             :         case SUMOVehicleShape::DELIVERY:
     646             :             break;
     647           0 :         case SUMOVehicleShape::TAXI:
     648           0 :             drawPoly(vehiclePoly_PassengerSedanRightGlass, 4.5);
     649           0 :             drawPoly(vehiclePoly_PassengerSedanLeftGlass, 4.5);
     650           0 :             drawPoly(vehiclePoly_PassengerSedanBackGlass, 4.5);
     651             : 
     652           0 :             glTranslated(0, 0, 6);
     653           0 :             glColor3d(0, 0, 0);
     654             :             // square-pattern in front
     655           0 :             glRectd(0.146, 0.24675, 0.171, 0.176);
     656           0 :             glRectd(0.121, 0.176, 0.146, 0.1055);
     657           0 :             glRectd(0.146, 0.1055, 0.171, 0.035);
     658           0 :             glRectd(0.121, 0.035, 0.146, -0.035);
     659           0 :             glRectd(0.146, -0.1055, 0.171, -0.035);
     660           0 :             glRectd(0.121, -0.176, 0.146, -0.1055);
     661           0 :             glRectd(0.146, -0.24675, 0.171, -0.176);
     662             :             // square-pattern at the back
     663           0 :             glRectd(0.913, 0.24675, 0.938, 0.176);
     664           0 :             glRectd(0.888, 0.176, 0.913, 0.1055);
     665           0 :             glRectd(0.888, 0.176, 0.913, 0.1055);
     666           0 :             glRectd(0.913, 0.1055, 0.938, 0.035);
     667           0 :             glRectd(0.888, 0.035, 0.913, -0.035);
     668           0 :             glRectd(0.913, -0.1055, 0.938, -0.035);
     669           0 :             glRectd(0.888, -0.176, 0.913, -0.1055);
     670           0 :             glRectd(0.888, -0.176, 0.913, -0.1055);
     671           0 :             glRectd(0.913, -0.24675, 0.938, -0.176);
     672             : 
     673           0 :             GLHelper::setColor(darker);
     674           0 :             drawPoly(vehiclePoly_TaxiSign, 5);
     675           0 :             glScaled(0.2, 0.5, 1);
     676           0 :             GLHelper::drawText("TAXI", Position(2.58, 0), 5, 0.3, RGBColor::BLACK, 90);
     677           0 :             break;
     678         892 :         case SUMOVehicleShape::TRUCK:
     679         892 :             GLHelper::setColor(current);
     680         892 :             GLHelper::drawBoxLine(Position(2.3, 0), 90., length - 2.3, .5);
     681         892 :             break;
     682         425 :         case SUMOVehicleShape::TRUCK_SEMITRAILER:
     683         425 :             if (carriageIndex < 0) {
     684           0 :                 GLHelper::setColor(current);
     685           0 :                 GLHelper::drawBoxLine(Position(2.8, 0), 90., length - 2.8, .5);
     686             :             }
     687             :             break;
     688         469 :         case SUMOVehicleShape::TRUCK_1TRAILER: {
     689         469 :             GLHelper::setColor(current);
     690         469 :             double l = length - 2.3;
     691         469 :             if (carriageIndex != 0) {
     692           0 :                 l = l / 2.;
     693           0 :                 GLHelper::drawBoxLine(Position(2.3, 0), 90., l, .5);
     694           0 :                 GLHelper::drawBoxLine(Position(2.3 + l + .5, 0), 90., l - .5, .5);
     695             :             } else {
     696         469 :                 GLHelper::drawBoxLine(Position(2.3, 0), 90., l, .5);
     697             :             }
     698             :             break;
     699             :         }
     700         482 :         case SUMOVehicleShape::BUS_TROLLEY:
     701         482 :             GLHelper::pushMatrix();
     702         482 :             glTranslated(0, 0, .1);
     703         482 :             GLHelper::setColor(darker);
     704         482 :             GLHelper::drawBoxLine(Position(3.8, 0), 90., 1, .3);
     705         482 :             glTranslated(0, 0, .1);
     706         482 :             glColor3d(0, 0, 0);
     707         482 :             GLHelper::drawBoxLine(Position(4.3, .2), 90., 1, .06);
     708         482 :             GLHelper::drawBoxLine(Position(4.3, -.2), 90., 1, .06);
     709         482 :             GLHelper::drawBoxLine(Position(5.3, .2), 90., 3, .03);
     710         482 :             GLHelper::drawBoxLine(Position(5.3, -.2), 90., 3, .03);
     711         482 :             GLHelper::popMatrix();
     712             :             break;
     713             :         case SUMOVehicleShape::BUS:
     714             :         case SUMOVehicleShape::BUS_COACH:
     715             :         case SUMOVehicleShape::BUS_FLEXIBLE:
     716             :         case SUMOVehicleShape::RAIL:
     717             :         case SUMOVehicleShape::RAIL_CAR:
     718             :         case SUMOVehicleShape::RAIL_CARGO:
     719             :         case SUMOVehicleShape::E_VEHICLE:
     720             :         case SUMOVehicleShape::ANT:
     721             :         case SUMOVehicleShape::SHIP:
     722             :         case SUMOVehicleShape::EMERGENCY:
     723             :         case SUMOVehicleShape::FIREBRIGADE:
     724             :         case SUMOVehicleShape::POLICE:
     725             :         case SUMOVehicleShape::RICKSHAW:
     726             :         case SUMOVehicleShape::AIRCRAFT:
     727             :         case SUMOVehicleShape::SCOOTER:
     728             :             break;
     729           0 :         default: // same as passenger/sedan
     730           0 :             drawPoly(vehiclePoly_PassengerSedanRightGlass, 4.5);
     731           0 :             drawPoly(vehiclePoly_PassengerSedanLeftGlass, 4.5);
     732           0 :             drawPoly(vehiclePoly_PassengerSedanBackGlass, 4.5);
     733             :             break;
     734             :     }
     735             :     /*
     736             :     glBegin(GL_TRIANGLE_FAN);
     737             :     glVertex2d(.5,.5); // center - strip begin
     738             :     glVertex2d(0,    .5); // center, front
     739             :     glVertex2d(0,    .8); // ... clockwise ... (vehicle right side)
     740             :     glVertex2d(0.08, .94);
     741             :     glVertex2d(0.25, 1.);
     742             :     glVertex2d(0.95, 1.);
     743             :     glVertex2d(1.,   .9);
     744             :     glVertex2d(1.,   .1); // (vehicle left side)
     745             :     glVertex2d(0.95, 0.);
     746             :     glVertex2d(0.25, 0.);
     747             :     glVertex2d(0.08, .06);
     748             :     glVertex2d(0,    .2); //
     749             :     glVertex2d(0,    .5); // center, front (close)
     750             :     glEnd();
     751             : 
     752             :     glPolygonOffset(0, -4.5);
     753             :     glColor3d(1, 1, 1); // front
     754             :     glBegin(GL_TRIANGLE_FAN);
     755             :     glVertex2d(0.1,0.5);
     756             :     glVertex2d(0.025,0.5);
     757             :     glVertex2d(0.025,0.75);
     758             :     glVertex2d(0.27,0.9);
     759             :     glVertex2d(0.27,0.1);
     760             :     glVertex2d(0.025,0.25);
     761             :     glVertex2d(0.025,0.5);
     762             :     glEnd();
     763             : 
     764             :     glColor3d(0, 0, 0); // front glass
     765             :     glBegin(GL_TRIANGLE_FAN);
     766             :     glVertex2d(0.35,0.5);
     767             :     glVertex2d(0.3,0.5);
     768             :     glVertex2d(0.3,0.9);
     769             :     glVertex2d(0.43,0.8);
     770             :     glVertex2d(0.43,0.2);
     771             :     glVertex2d(0.3,0.1);
     772             :     glVertex2d(0.3,0.5);
     773             :     glEnd();
     774             : 
     775             :     glBegin(GL_TRIANGLE_FAN); // back glass
     776             :     glVertex2d(0.92,0.5);
     777             :     glVertex2d(0.90,0.5);
     778             :     glVertex2d(0.90,0.8);
     779             :     glVertex2d(0.95,0.9);
     780             :     glVertex2d(0.95,0.1);
     781             :     glVertex2d(0.90,0.2);
     782             :     glVertex2d(0.90,0.5);
     783             :     glEnd();
     784             : 
     785             :     glBegin(GL_TRIANGLE_FAN); // right glass
     786             :     glVertex2d(0.36,0.07);
     787             :     glVertex2d(0.34,0.03);
     788             :     glVertex2d(0.94,0.03);
     789             :     glVertex2d(0.87,0.13);
     790             :     glVertex2d(0.45,0.13);
     791             :     glVertex2d(0.34,0.03);
     792             :     glEnd();
     793             : 
     794             :     glBegin(GL_TRIANGLE_FAN); // left glass
     795             :     glVertex2d(0.36,1.-0.07);
     796             :     glVertex2d(0.34,1.-0.03);
     797             :     glVertex2d(0.94,1.-0.03);
     798             :     glVertex2d(0.87,1.-0.13);
     799             :     glVertex2d(0.45,1.-0.13);
     800             :     glVertex2d(0.34,1.-0.03);
     801             :     glEnd();
     802             :     */
     803             : 
     804      198807 :     GLHelper::popMatrix();
     805      198807 : }
     806             : 
     807             : 
     808             : bool
     809        8344 : GUIBaseVehicleHelper::drawAction_drawVehicleAsImage(const GUIVisualizationSettings& /* s */, const std::string& file, const GUIGlObject* /* o */, const double width, double length) {
     810        8344 :     if (file != "") {
     811        8344 :         int textureID = GUITexturesHelper::getTextureID(file);
     812        8344 :         if (textureID > 0) {
     813        8344 :             GUITexturesHelper::drawTexturedBox(textureID, -width * 0.5, 0, width * 0.5, length);
     814        8344 :             return true;
     815             :         }
     816             :     }
     817             :     return false;
     818             : }
     819             : 
     820             : 
     821             : /****************************************************************************/

Generated by: LCOV version 1.14