Eclipse SUMO - Simulation of Urban MObility
GUIBaseVehicleHelper.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
14 // Functions used in GUIBaseVehicleHelper and GNEVehicle
15 /****************************************************************************/
16 
17 
18 // ===========================================================================
19 // included modules
20 // ===========================================================================
21 #include <config.h>
22 #include <fx.h>
23 
28 #include "GLHelper.h"
29 #include "GUIBaseVehicleHelper.h"
30 
31 
32 // ===========================================================================
33 // data definitions
34 // ===========================================================================
35 /* -------------------------------------------------------------------------
36  * drawed shapes
37  * ----------------------------------------------------------------------- */
38 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 };
39 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 };
40 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 };
41 double vehiclePoly_PassengerSedanRightGlass[] = { 0.36, -.43, 0.34, -.47, 0.77, -.47, 0.67, -.37, 0.45, -.37, 0.34, -.47, -10000 };
42 double vehiclePoly_PassengerSedanLeftGlass[] = { 0.36, .43, 0.34, .47, 0.77, .47, 0.67, .37, 0.45, .37, 0.34, .47, -10000 };
43 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 };
44 double vehiclePoly_PassengerHatchbackRightGlass[] = { 0.36, -.43, 0.34, -.47, 0.94, -.47, 0.80, -.37, 0.45, -.37, 0.34, -.47, -10000 };
45 double vehiclePoly_PassengerHatchbackLeftGlass[] = { 0.36, .43, 0.34, .47, 0.94, .47, 0.80, .37, 0.45, .37, 0.34, .47, -10000 };
46 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 };
47 double vehiclePoly_PassengerWagonRightGlass[] = { 0.36, -.43, 0.34, -.47, 0.94, -.47, 0.87, -.37, 0.45, -.37, 0.34, -.47, -10000 };
48 double vehiclePoly_PassengerWagonLeftGlass[] = { 0.36, .43, 0.34, .47, 0.94, .47, 0.87, .37, 0.45, .37, 0.34, .47, -10000 };
49 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 };
50 
51 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 };
52 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 };
53 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 };
54 double vehiclePoly_PassengerVanRightGlass[] = { 0.36, -.43, 0.20, -.47, 0.98, -.47, 0.91, -.37, 0.31, -.37, 0.20, -.47, -10000 };
55 double vehiclePoly_PassengerVanLeftGlass[] = { 0.36, .43, 0.20, .47, 0.98, .47, 0.91, .37, 0.31, .37, 0.20, .47, -10000 };
56 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 };
57 
58 double vehiclePoly_DeliveryMediumRightGlass[] = { 0.21, -.43, 0.20, -.47, 0.38, -.47, 0.38, -.37, 0.31, -.37, 0.20, -.47, -10000 };
59 double vehiclePoly_DeliveryMediumLeftGlass[] = { 0.21, .43, 0.20, .47, 0.38, .47, 0.38, .37, 0.31, .37, 0.20, .47, -10000 };
60 
61 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 };
62 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 };
63 double vehiclePoly_TransportRightGlass[] = { 0.36, -.47, 0.10, -.48, 1.25, -.48, 1.25, -.4, 0.3, -.4, 0.10, -.48, -10000 };
64 double vehiclePoly_TransportLeftGlass[] = { 0.36, .47, 0.10, .48, 1.25, .48, 1.25, .4, 0.3, .4, 0.10, .48, -10000 };
65 
66 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 };
67 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 };
68 //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 };
69 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 };
70 
71 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 };
72 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 };
73 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 };
74 
75 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 };
76 
77 double vehiclePoly_EmergencySign[] = { .2, .5, -.2, .5, -.2, -.5, .2, -.5, -10000 };
78 double vehiclePoly_Emergency[] = { .1, .1, -.1, .1, -.1, -.1, .1, -.1, -10000 };
79 double vehiclePoly_Emergency2[] = { .04, .3, -.04, .3, -.04, -.3, .04, -.3, -10000 };
80 
81 double vehiclePoly_EmergencyLadder[] = { -.5, .3, .5, .3, .5, .2, -.5, .2, -10000 };
82 double vehiclePoly_EmergencyLadder2[] = { -.5, -.3, .5, -.3, .5, -.2, -.5, -.2, -10000 };
83 double vehiclePoly_EmergencyLadder3[] = { -.45, .3, -.4, .3, -.4, -.3, -.45, -.3, -10000 };
84 double vehiclePoly_EmergencyLadder4[] = { .45, .3, .4, .3, .4, -.3, .45, -.3, -10000 };
85 double vehiclePoly_EmergencyLadder5[] = { .05, .3, .0, .3, .0, -.3, .05, -.3, -10000 };
86 double vehiclePoly_EmergencyLadder6[] = { -.25, .3, -.2, .3, -.2, -.3, -.25, -.3, -10000 };
87 double vehiclePoly_EmergencyLadder7[] = { .25, .3, .2, .3, .2, -.3, .25, -.3, -10000 };
88 
89 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 };
90 
91 // ===========================================================================
92 // method definitions
93 // ===========================================================================
94 
95 void
96 GUIBaseVehicleHelper::drawPoly(const double* poses, const double offset) {
97  glPushMatrix();
98  glTranslated(0, 0, offset * .1);
99  glPolygonOffset(0, (GLfloat) - offset);
100  glBegin(GL_TRIANGLE_FAN);
101  int i = 0;
102  while (poses[i] > -999) {
103  glVertex2d(poses[i], poses[i + 1]);
104  i = i + 2;
105  }
106  glEnd();
107  glPopMatrix();
108 }
109 
110 void
111 GUIBaseVehicleHelper::drawAction_drawVehicleAsBoxPlus(const double width, const double length) {
112  glPushMatrix();
113  glScaled(width, length, 1.);
114  glBegin(GL_TRIANGLE_STRIP);
115  glVertex2d(0., 0.);
116  glVertex2d(-.5, .15);
117  glVertex2d(.5, .15);
118  glVertex2d(-.5, 1.);
119  glVertex2d(.5, 1.);
120  glEnd();
121  glPopMatrix();
122 }
123 
124 
125 void
126 GUIBaseVehicleHelper::drawAction_drawVehicleAsTrianglePlus(const double width, const double length) {
127  if (length >= 8.) {
128  drawAction_drawVehicleAsBoxPlus(width, length);
129  return;
130  }
131  glPushMatrix();
132  glScaled(width, length, 1.);
133  glBegin(GL_TRIANGLES);
134  glVertex2d(0., 0.);
135  glVertex2d(-.5, 1.);
136  glVertex2d(.5, 1.);
137  glEnd();
138  glPopMatrix();
139 }
140 
141 
142 void
143 GUIBaseVehicleHelper::drawAction_drawVehicleAsPoly(const GUIVisualizationSettings& s, const SUMOVehicleShape shape, const double width, const double length,
144  int carriageIndex) {
145  UNUSED_PARAMETER(s);
146  RGBColor current = GLHelper::getColor();
147  RGBColor lighter = current.changedBrightness(51);
148  RGBColor darker = current.changedBrightness(-51);
149  glPushMatrix();
150  glRotated(90, 0, 0, 1);
151  glScaled(length, width, 1.);
152 
153  // draw main body
154  switch (shape) {
155  case SVS_UNKNOWN:
157  GLHelper::setColor(lighter);
159  glColor3d(0, 0, 0);
161  break;
162  case SVS_PEDESTRIAN:
163  glTranslated(0, 0, .045);
165  glTranslated(0, 0, -.045);
166  glScaled(.7, 2, 1);
167  glTranslated(0, 0, .04);
168  GLHelper::setColor(lighter);
170  glTranslated(0, 0, -.04);
171  break;
172  case SVS_BICYCLE:
173  case SVS_MOPED:
174  case SVS_MOTORCYCLE: {
175  RGBColor darker = current.changedBrightness(-50);
176  // body
178  // head
179  glPushMatrix();
180  glTranslated(0.4, 0, .5);
181  glScaled(0.1, 0.2, 1);
182  GLHelper::setColor(darker);
184  glPopMatrix();
185  // bike frame
187  glPushMatrix();
188  glTranslated(0.5, 0, .3);
189  glScaled(0.5, 0.05, 1);
191  glPopMatrix();
192  // handle bar
193  glPushMatrix();
194  glTranslated(0.25, 0, .3);
195  glScaled(0.02, 0.5, 1);
197  glPopMatrix();
198  }
199  break;
200  case SVS_PASSENGER:
201  case SVS_PASSENGER_SEDAN:
203  case SVS_PASSENGER_WAGON:
205  GLHelper::setColor(lighter);
207  glColor3d(0, 0, 0);
209  break;
210  case SVS_PASSENGER_VAN:
212  GLHelper::setColor(lighter);
214  glColor3d(0, 0, 0);
219  break;
220  case SVS_DELIVERY:
222  GLHelper::setColor(lighter);
224  glColor3d(0, 0, 0);
228  break;
229  case SVS_TRUCK:
231  case SVS_TRUCK_1TRAILER:
232  if (carriageIndex < 1) {
233  glScaled(1. / (length), 1, 1.);
235  glColor3d(0, 0, 0);
239  }
240  break;
241  case SVS_BUS:
242  case SVS_BUS_COACH:
243  case SVS_BUS_TROLLEY: {
244  double ml = length;
245  glScaled(1. / (length), 1, 1.);
246  glTranslated(0, 0, .04);
247  glBegin(GL_TRIANGLE_FAN);
248  glVertex2d(ml / 2., 0);
249  glVertex2d(0, 0);
250  glVertex2d(0, -.45);
251  glVertex2d(0 + .05, -.5);
252  glVertex2d(ml - .05, -.5);
253  glVertex2d(ml, -.45);
254  glVertex2d(ml, .45);
255  glVertex2d(ml - .05, .5);
256  glVertex2d(0 + .05, .5);
257  glVertex2d(0, .45);
258  glVertex2d(0, 0);
259  glEnd();
260  glTranslated(0, 0, -.04);
261 
262  glTranslated(0, 0, .045);
263  glColor3d(0, 0, 0);
264  glBegin(GL_QUADS);
265  glVertex2d(0 + .05, .48);
266  glVertex2d(0 + .05, -.48);
267  glVertex2d(0 + .15, -.48);
268  glVertex2d(0 + .15, .48);
269 
270  glVertex2d(ml - .1, .45);
271  glVertex2d(ml - .1, -.45);
272  glVertex2d(ml - .05, -.45);
273  glVertex2d(ml - .05, .45);
274 
275  glVertex2d(0 + .20, .49);
276  glVertex2d(0 + .20, .45);
277  glVertex2d(ml - .20, .45);
278  glVertex2d(ml - .20, .49);
279 
280  glVertex2d(0 + .20, -.49);
281  glVertex2d(0 + .20, -.45);
282  glVertex2d(ml - .20, -.45);
283  glVertex2d(ml - .20, -.49);
284 
285  glEnd();
286  glTranslated(0, 0, -.045);
287  }
288  break;
289  case SVS_BUS_FLEXIBLE:
290  case SVS_RAIL:
291  case SVS_RAIL_CAR:
292  case SVS_RAIL_CARGO:
293  case SVS_E_VEHICLE:
295  glColor3d(0, 0, 0);
297  glTranslated(0, 0, .048);
298  GLHelper::setColor(current);
299  glBegin(GL_QUADS);
300  glVertex2d(.3, .5);
301  glVertex2d(.35, .5);
302  glVertex2d(.35, -.5);
303  glVertex2d(.3, -.5);
304 
305  glVertex2d(.3, -.05);
306  glVertex2d(.7, -.05);
307  glVertex2d(.7, .05);
308  glVertex2d(.3, .05);
309 
310  glVertex2d(.7, .5);
311  glVertex2d(.65, .5);
312  glVertex2d(.65, -.5);
313  glVertex2d(.7, -.5);
314  glEnd();
315  glTranslated(0, 0, -.048);
316  //drawPoly(vehiclePoly_EVehicleBackGlass, 4.5);
317  break;
318  case SVS_ANT:
319  glPushMatrix();
320  // ant is stretched via vehicle length
321  GLHelper::setColor(darker);
322  // draw left side
323  GLHelper::drawBoxLine(Position(-0.2, -.10), 350, 0.5, .02);
324  GLHelper::drawBoxLine(Position(-0.3, -.50), 240, 0.4, .03);
325  GLHelper::drawBoxLine(Position(0.3, -.10), 340, 0.8, .03);
326  GLHelper::drawBoxLine(Position(0.05, -.80), 290, 0.6, .04);
327  GLHelper::drawBoxLine(Position(0.4, -.10), 20, 0.8, .03);
328  GLHelper::drawBoxLine(Position(0.65, -.80), 75, 0.6, .04);
329  GLHelper::drawBoxLine(Position(0.5, -.10), 55, 0.8, .04);
330  GLHelper::drawBoxLine(Position(1.1, -.55), 90, 0.6, .04);
331  // draw right side
332  GLHelper::drawBoxLine(Position(-0.2, .10), 190, 0.5, .02);
333  GLHelper::drawBoxLine(Position(-0.3, .50), 300, 0.4, .03);
334  GLHelper::drawBoxLine(Position(0.3, .10), 200, 0.8, .03);
335  GLHelper::drawBoxLine(Position(0.05, .80), 250, 0.6, .04);
336  GLHelper::drawBoxLine(Position(0.4, .10), 160, 0.8, .03);
337  GLHelper::drawBoxLine(Position(0.65, .80), 105, 0.6, .04);
338  GLHelper::drawBoxLine(Position(0.5, .10), 125, 0.8, .04);
339  GLHelper::drawBoxLine(Position(1.1, .55), 90, 0.6, .04);
340  // draw body
341  GLHelper::setColor(current);
342  glTranslated(0, 0, 0.1);
344  glTranslated(.4, 0, 0);
346  glTranslated(.4, 0, 0);
348  glPopMatrix();
349  break;
350  case SVS_SHIP: {
351  RGBColor darker = current.changedBrightness(-30);
352  RGBColor darker2 = current.changedBrightness(-70);
354  GLHelper::setColor(darker);
356  GLHelper::setColor(darker2);
358  break;
359  }
360  case SVS_EMERGENCY: // similar to delivery
362  GLHelper::setColor(darker);
364  glColor3d(0, 0, 0);
368  // first aid sign
369  glTranslated(0.7, 0, 0);
370  glColor3d(.18, .55, .34);
372  glColor3d(1, 1, 1);
375  break;
376  case SVS_FIREBRIGADE: // similar to delivery in red orange
378  GLHelper::setColor(lighter);
380  glColor3d(0, 0, 0);
384  // draw ladder
385  glTranslated(0.7, 0, 0);
386  glColor3d(1, .5, 0);
388  glColor3d(.5, .5, .5);
396  break;
397  case SVS_POLICE: // similar to passenger grey with blue
399  GLHelper::setColor(lighter);
401  glColor3d(0, 0, 0);
403  // first aid sign
404  glTranslated(0.7, 0, 0);
405  glColor3d(.5, .5, .5);
407  glColor3d(0, 0, 1);
410  break;
411  case SVS_RICKSHAW: // Rickshaw
413  // wheels
414  GLHelper::setColor(darker);
415  glPushMatrix();
416  glTranslated(.5, .5, -0.1);
418  glPopMatrix();
419  //other wheel
420  glPushMatrix();
421  glTranslated(.5, -.5, -0.1);
423  glPopMatrix();
424  break;
425  default: // same as passenger
427  glColor3d(1, 1, 1);
429  glColor3d(0, 0, 0);
431  break;
432  }
433 
434  // draw decorations
435  switch (shape) {
436  case SVS_PEDESTRIAN:
437  break;
438  case SVS_BICYCLE:
439  //glScaled(length, 1, 1.);
440  glBegin(GL_TRIANGLE_FAN);
441  glVertex2d(1 / 2., 0);
442  glVertex2d(0, 0);
443  glVertex2d(0, -.03);
444  glVertex2d(0 + .05, -.05);
445  glVertex2d(1 - .05, -.05);
446  glVertex2d(1, -.03);
447  glVertex2d(1, .03);
448  glVertex2d(1 - .05, .05);
449  glVertex2d(0 + .05, .05);
450  glVertex2d(0, .03);
451  glVertex2d(0, 0);
452  glEnd();
453  break;
454  case SVS_MOPED:
455  case SVS_MOTORCYCLE:
456  //glScaled(length, 1, 1.);
457  glBegin(GL_TRIANGLE_FAN);
458  glVertex2d(1 / 2., 0);
459  glVertex2d(0, 0);
460  glVertex2d(0, -.03);
461  glVertex2d(0 + .05, -.2);
462  glVertex2d(1 - .05, -.2);
463  glVertex2d(1, -.03);
464  glVertex2d(1, .03);
465  glVertex2d(1 - .05, .2);
466  glVertex2d(0 + .05, .2);
467  glVertex2d(0, .03);
468  glVertex2d(0, 0);
469  glEnd();
470  break;
471  case SVS_PASSENGER:
472  case SVS_PASSENGER_SEDAN:
476  break;
481  break;
482  case SVS_PASSENGER_WAGON:
486  break;
487  case SVS_PASSENGER_VAN:
488  case SVS_DELIVERY:
489  break;
490  case SVS_TRUCK:
491  GLHelper::setColor(current);
492  GLHelper::drawBoxLine(Position(2.3, 0), 90., length - 2.3, .5);
493  break;
495  if (carriageIndex < 0) {
496  GLHelper::setColor(current);
497  GLHelper::drawBoxLine(Position(2.8, 0), 90., length - 2.8, .5);
498  }
499  break;
500  case SVS_TRUCK_1TRAILER: {
501  GLHelper::setColor(current);
502  double l = length - 2.3;
503  if (carriageIndex != 0) {
504  l = l / 2.;
505  GLHelper::drawBoxLine(Position(2.3, 0), 90., l, .5);
506  GLHelper::drawBoxLine(Position(2.3 + l + .5, 0), 90., l - .5, .5);
507  } else {
508  GLHelper::drawBoxLine(Position(2.3, 0), 90., l, .5);
509  }
510  break;
511  }
512  case SVS_BUS_TROLLEY:
513  glPushMatrix();
514  glTranslated(0, 0, .1);
515  GLHelper::setColor(darker);
516  GLHelper::drawBoxLine(Position(3.8, 0), 90., 1, .3);
517  glTranslated(0, 0, .1);
518  glColor3d(0, 0, 0);
519  GLHelper::drawBoxLine(Position(4.3, .2), 90., 1, .06);
520  GLHelper::drawBoxLine(Position(4.3, -.2), 90., 1, .06);
521  GLHelper::drawBoxLine(Position(5.3, .2), 90., 3, .03);
522  GLHelper::drawBoxLine(Position(5.3, -.2), 90., 3, .03);
523  glPopMatrix();
524  break;
525  case SVS_BUS:
526  case SVS_BUS_COACH:
527  case SVS_BUS_FLEXIBLE:
528  case SVS_RAIL:
529  case SVS_RAIL_CAR:
530  case SVS_RAIL_CARGO:
531  case SVS_E_VEHICLE:
532  case SVS_ANT:
533  case SVS_SHIP:
534  case SVS_EMERGENCY:
535  case SVS_FIREBRIGADE:
536  case SVS_POLICE:
537  case SVS_RICKSHAW:
538  break;
539  default: // same as passenger/sedan
543  break;
544  }
545  /*
546  glBegin(GL_TRIANGLE_FAN);
547  glVertex2d(.5,.5); // center - strip begin
548  glVertex2d(0, .5); // center, front
549  glVertex2d(0, .8); // ... clockwise ... (vehicle right side)
550  glVertex2d(0.08, .94);
551  glVertex2d(0.25, 1.);
552  glVertex2d(0.95, 1.);
553  glVertex2d(1., .9);
554  glVertex2d(1., .1); // (vehicle left side)
555  glVertex2d(0.95, 0.);
556  glVertex2d(0.25, 0.);
557  glVertex2d(0.08, .06);
558  glVertex2d(0, .2); //
559  glVertex2d(0, .5); // center, front (close)
560  glEnd();
561 
562  glPolygonOffset(0, -4.5);
563  glColor3d(1, 1, 1); // front
564  glBegin(GL_TRIANGLE_FAN);
565  glVertex2d(0.1,0.5);
566  glVertex2d(0.025,0.5);
567  glVertex2d(0.025,0.75);
568  glVertex2d(0.27,0.9);
569  glVertex2d(0.27,0.1);
570  glVertex2d(0.025,0.25);
571  glVertex2d(0.025,0.5);
572  glEnd();
573 
574  glColor3d(0, 0, 0); // front glass
575  glBegin(GL_TRIANGLE_FAN);
576  glVertex2d(0.35,0.5);
577  glVertex2d(0.3,0.5);
578  glVertex2d(0.3,0.9);
579  glVertex2d(0.43,0.8);
580  glVertex2d(0.43,0.2);
581  glVertex2d(0.3,0.1);
582  glVertex2d(0.3,0.5);
583  glEnd();
584 
585  glBegin(GL_TRIANGLE_FAN); // back glass
586  glVertex2d(0.92,0.5);
587  glVertex2d(0.90,0.5);
588  glVertex2d(0.90,0.8);
589  glVertex2d(0.95,0.9);
590  glVertex2d(0.95,0.1);
591  glVertex2d(0.90,0.2);
592  glVertex2d(0.90,0.5);
593  glEnd();
594 
595  glBegin(GL_TRIANGLE_FAN); // right glass
596  glVertex2d(0.36,0.07);
597  glVertex2d(0.34,0.03);
598  glVertex2d(0.94,0.03);
599  glVertex2d(0.87,0.13);
600  glVertex2d(0.45,0.13);
601  glVertex2d(0.34,0.03);
602  glEnd();
603 
604  glBegin(GL_TRIANGLE_FAN); // left glass
605  glVertex2d(0.36,1.-0.07);
606  glVertex2d(0.34,1.-0.03);
607  glVertex2d(0.94,1.-0.03);
608  glVertex2d(0.87,1.-0.13);
609  glVertex2d(0.45,1.-0.13);
610  glVertex2d(0.34,1.-0.03);
611  glEnd();
612  */
613 
614  glPopMatrix();
615 }
616 
617 
618 bool
619 GUIBaseVehicleHelper::drawAction_drawVehicleAsImage(const GUIVisualizationSettings& s, const std::string& file, const GUIGlObject* o, const double width, double length) {
620  if (file != "") {
621  int textureID = GUITexturesHelper::getTextureID(file);
622  if (textureID > 0) {
623  const double exaggeration = s.vehicleSize.getExaggeration(s, o);
624  const double halfWidth = width / 2.0 * exaggeration;
625  GUITexturesHelper::drawTexturedBox(textureID, -halfWidth, 0, halfWidth, length * exaggeration);
626  return true;
627  }
628  }
629  return false;
630 }
631 
632 
633 /****************************************************************************/
RGBColor::GREY
static const RGBColor GREY
Definition: RGBColor.h:198
vehiclePoly_EVehicleFrontGlass
double vehiclePoly_EVehicleFrontGlass[]
Definition: GUIBaseVehicleHelper.cpp:67
vehiclePoly_EmergencySign
double vehiclePoly_EmergencySign[]
Definition: GUIBaseVehicleHelper.cpp:77
UNUSED_PARAMETER
#define UNUSED_PARAMETER(x)
Definition: StdDefs.h:31
vehiclePoly_PassengerHatchbackBackGlass
double vehiclePoly_PassengerHatchbackBackGlass[]
Definition: GUIBaseVehicleHelper.cpp:46
GUIBaseVehicleHelper::drawPoly
static void drawPoly(const double *poses, const double offset)
draw poly
Definition: GUIBaseVehicleHelper.cpp:96
vehiclePoly_PassengerWagonBackGlass
double vehiclePoly_PassengerWagonBackGlass[]
Definition: GUIBaseVehicleHelper.cpp:49
GLHelper::getColor
static RGBColor getColor()
gets the gl-color
Definition: GLHelper.cpp:627
vehiclePoly_Ship
double vehiclePoly_Ship[]
Definition: GUIBaseVehicleHelper.cpp:71
vehiclePoly_PassengerHatchbackRightGlass
double vehiclePoly_PassengerHatchbackRightGlass[]
Definition: GUIBaseVehicleHelper.cpp:44
vehiclePoly_EmergencyLadder3
double vehiclePoly_EmergencyLadder3[]
Definition: GUIBaseVehicleHelper.cpp:83
SVS_MOTORCYCLE
render as a motorcycle
Definition: SUMOVehicleClass.h:60
GUIBaseVehicleHelper::drawAction_drawVehicleAsImage
static bool drawAction_drawVehicleAsImage(const GUIVisualizationSettings &s, const std::string &file, const GUIGlObject *o, const double width, double length)
try to draw vehicle as raster image and return true if sucessful
Definition: GUIBaseVehicleHelper.cpp:619
vehiclePoly_TransportFrontGlass
double vehiclePoly_TransportFrontGlass[]
Definition: GUIBaseVehicleHelper.cpp:62
SVS_BUS_TROLLEY
render as a trolley bus
Definition: SUMOVehicleClass.h:88
GUIBaseVehicleHelper::drawAction_drawVehicleAsPoly
static void drawAction_drawVehicleAsPoly(const GUIVisualizationSettings &s, const SUMOVehicleShape shape, const double width, const double length, int carriageIndex=-1)
draw vehicle as a polygon
Definition: GUIBaseVehicleHelper.cpp:143
vehiclePoly_PassengerFrontGlass
double vehiclePoly_PassengerFrontGlass[]
Definition: GUIBaseVehicleHelper.cpp:40
vehiclePoly_EmergencyLadder2
double vehiclePoly_EmergencyLadder2[]
Definition: GUIBaseVehicleHelper.cpp:82
vehiclePoly_PassengerHatchbackLeftGlass
double vehiclePoly_PassengerHatchbackLeftGlass[]
Definition: GUIBaseVehicleHelper.cpp:45
vehiclePoly_PassengerVanLeftGlass
double vehiclePoly_PassengerVanLeftGlass[]
Definition: GUIBaseVehicleHelper.cpp:55
SVS_TRUCK
render as a transport vehicle
Definition: SUMOVehicleClass.h:76
vehiclePoly_TransportLeftGlass
double vehiclePoly_TransportLeftGlass[]
Definition: GUIBaseVehicleHelper.cpp:64
GUIVisualizationSettings.h
GLHelper.h
GUIVisualizationSettings::vehicleSize
GUIVisualizationSizeSettings vehicleSize
Definition: GUIVisualizationSettings.h:520
vehiclePoly_PassengerSedanBackGlass
double vehiclePoly_PassengerSedanBackGlass[]
Definition: GUIBaseVehicleHelper.cpp:43
GLHelper::setColor
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition: GLHelper.cpp:621
vehiclePoly_DeliveryMediumLeftGlass
double vehiclePoly_DeliveryMediumLeftGlass[]
Definition: GUIBaseVehicleHelper.cpp:59
GUITexturesHelper::drawTexturedBox
static void drawTexturedBox(int which, double size)
Draws a named texture as a box with the given size.
Definition: GUITexturesHelper.cpp:72
SVS_BUS_FLEXIBLE
render as a flexible city bus
Definition: SUMOVehicleClass.h:86
SVS_PASSENGER_SEDAN
render as a sedan passenger vehicle ("Stufenheck")
Definition: SUMOVehicleClass.h:64
vehiclePoly_Emergency2
double vehiclePoly_Emergency2[]
Definition: GUIBaseVehicleHelper.cpp:79
SVS_UNKNOWN
not defined
Definition: SUMOVehicleClass.h:52
SVS_BICYCLE
render as a bicycle
Definition: SUMOVehicleClass.h:56
GLHelper::drawFilledCircle
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
Definition: GLHelper.cpp:348
RGBColor
Definition: RGBColor.h:39
SVS_DELIVERY
automated car (with cruise controllers)
Definition: SUMOVehicleClass.h:74
SVS_BUS
render as a bus
Definition: SUMOVehicleClass.h:82
SUMOVehicleShape
SUMOVehicleShape
Definition of vehicle classes to differ between different appearences.
Definition: SUMOVehicleClass.h:50
vehiclePoly_Rickshaw
double vehiclePoly_Rickshaw[]
Definition: GUIBaseVehicleHelper.cpp:89
GUITexturesHelper.h
SUMOVehicleClass.h
vehiclePoly_EVehicleBody
double vehiclePoly_EVehicleBody[]
Definition: GUIBaseVehicleHelper.cpp:66
SVS_RAIL_CARGO
render as a cargo train
Definition: SUMOVehicleClass.h:94
SVS_PASSENGER_HATCHBACK
render as a hatchback passenger vehicle ("Fliessheck")
Definition: SUMOVehicleClass.h:66
vehiclePoly_PassengerVanBackGlass
double vehiclePoly_PassengerVanBackGlass[]
Definition: GUIBaseVehicleHelper.cpp:56
vehiclePoly_EmergencyLadder6
double vehiclePoly_EmergencyLadder6[]
Definition: GUIBaseVehicleHelper.cpp:86
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
vehiclePoly_PassengerVanFrontGlass
double vehiclePoly_PassengerVanFrontGlass[]
Definition: GUIBaseVehicleHelper.cpp:53
SVS_MOPED
render as a moped
Definition: SUMOVehicleClass.h:58
vehiclePoly_PassengerWagonLeftGlass
double vehiclePoly_PassengerWagonLeftGlass[]
Definition: GUIBaseVehicleHelper.cpp:48
SVS_POLICE
render as a police car
Definition: SUMOVehicleClass.h:106
GUIBaseVehicleHelper.h
vehiclePoly_DeliveryMediumRightGlass
double vehiclePoly_DeliveryMediumRightGlass[]
Definition: GUIBaseVehicleHelper.cpp:58
GUIGlObject
Definition: GUIGlObject.h:65
GUIBaseVehicleHelper::drawAction_drawVehicleAsBoxPlus
static void drawAction_drawVehicleAsBoxPlus(const double width, const double length)
draw vehicle as a Box
Definition: GUIBaseVehicleHelper.cpp:111
vehiclePoly_PassengerVanBodyFront
double vehiclePoly_PassengerVanBodyFront[]
Definition: GUIBaseVehicleHelper.cpp:52
SVS_RAIL_CAR
render as a (city) rail without locomotive
Definition: SUMOVehicleClass.h:92
vehiclePoly_PassengerSedanLeftGlass
double vehiclePoly_PassengerSedanLeftGlass[]
Definition: GUIBaseVehicleHelper.cpp:42
SVS_PASSENGER_VAN
render as a van
Definition: SUMOVehicleClass.h:70
SVS_PEDESTRIAN
render as a pedestrian
Definition: SUMOVehicleClass.h:54
vehiclePoly_EmergencyLadder7
double vehiclePoly_EmergencyLadder7[]
Definition: GUIBaseVehicleHelper.cpp:87
vehiclePoly_Emergency
double vehiclePoly_Emergency[]
Definition: GUIBaseVehicleHelper.cpp:78
vehiclePoly_PassengerCarBody
double vehiclePoly_PassengerCarBody[]
Definition: GUIBaseVehicleHelper.cpp:38
vehiclePoly_PassengerWagonRightGlass
double vehiclePoly_PassengerWagonRightGlass[]
Definition: GUIBaseVehicleHelper.cpp:47
GLIncludes.h
vehiclePoly_Cyclist
double vehiclePoly_Cyclist[]
Definition: GUIBaseVehicleHelper.cpp:75
vehiclePoly_PassengerVanBody
double vehiclePoly_PassengerVanBody[]
Definition: GUIBaseVehicleHelper.cpp:51
vehiclePoly_EmergencyLadder4
double vehiclePoly_EmergencyLadder4[]
Definition: GUIBaseVehicleHelper.cpp:84
vehiclePoly_TransportRightGlass
double vehiclePoly_TransportRightGlass[]
Definition: GUIBaseVehicleHelper.cpp:63
GLHelper::drawBoxLine
static void drawBoxLine(const Position &beg, double rot, double visLength, double width, double offset=0)
Draws a thick line.
Definition: GLHelper.cpp:136
SVS_PASSENGER
render as a passenger vehicle
Definition: SUMOVehicleClass.h:62
vehiclePoly_EmergencyLadder
double vehiclePoly_EmergencyLadder[]
Definition: GUIBaseVehicleHelper.cpp:81
SVS_EMERGENCY
render as an emergency vehicle
Definition: SUMOVehicleClass.h:102
SVS_E_VEHICLE
render as a (futuristic) e-vehicle
Definition: SUMOVehicleClass.h:96
SVS_SHIP
render as a arbitrary ship
Definition: SUMOVehicleClass.h:100
SVS_TRUCK_SEMITRAILER
render as a semi-trailer transport vehicle ("Sattelschlepper")
Definition: SUMOVehicleClass.h:78
vehiclePoly_PassengerSedanRightGlass
double vehiclePoly_PassengerSedanRightGlass[]
Definition: GUIBaseVehicleHelper.cpp:41
config.h
SVS_FIREBRIGADE
render as a fire brigade
Definition: SUMOVehicleClass.h:104
vehiclePoly_TransportBody
double vehiclePoly_TransportBody[]
Definition: GUIBaseVehicleHelper.cpp:61
SVS_ANT
render as a giant ant
Definition: SUMOVehicleClass.h:98
SVS_TRUCK_1TRAILER
render as a transport vehicle with one trailer
Definition: SUMOVehicleClass.h:80
SVS_PASSENGER_WAGON
render as a wagon passenger vehicle ("Combi")
Definition: SUMOVehicleClass.h:68
vehiclePoly_EmergencyLadder5
double vehiclePoly_EmergencyLadder5[]
Definition: GUIBaseVehicleHelper.cpp:85
vehiclePoly_ShipSuperStructure
double vehiclePoly_ShipSuperStructure[]
Definition: GUIBaseVehicleHelper.cpp:73
SVS_BUS_COACH
render as a coach
Definition: SUMOVehicleClass.h:84
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:345
vehiclePoly_PassengerCarBodyFront
double vehiclePoly_PassengerCarBodyFront[]
Definition: GUIBaseVehicleHelper.cpp:39
SVS_RICKSHAW
render as a rickshaw
Definition: SUMOVehicleClass.h:108
RGBColor::changedBrightness
RGBColor changedBrightness(int change, int toChange=3) const
Returns a new color with altered brightness.
Definition: RGBColor.cpp:153
vehiclePoly_EVehicleBackGlass
double vehiclePoly_EVehicleBackGlass[]
Definition: GUIBaseVehicleHelper.cpp:69
vehiclePoly_ShipDeck
double vehiclePoly_ShipDeck[]
Definition: GUIBaseVehicleHelper.cpp:72
vehiclePoly_PassengerVanRightGlass
double vehiclePoly_PassengerVanRightGlass[]
Definition: GUIBaseVehicleHelper.cpp:54
GUITexturesHelper::getTextureID
static int getTextureID(const std::string &filename, const bool mirrorX=false)
return texture id for the given filename (initialize on first use)
Definition: GUITexturesHelper.cpp:112
GUIBaseVehicleHelper::drawAction_drawVehicleAsTrianglePlus
static void drawAction_drawVehicleAsTrianglePlus(const double width, const double length)
draw vehicle as a triangle
Definition: GUIBaseVehicleHelper.cpp:126
GUIVisualizationSizeSettings::getExaggeration
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
Definition: GUIVisualizationSettings.cpp:212
SVS_RAIL
render as a rail
Definition: SUMOVehicleClass.h:90