SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GUIJunctionWrapper.cpp
Go to the documentation of this file.
1 /****************************************************************************/
11 // }
12 /****************************************************************************/
13 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
14 // Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
15 /****************************************************************************/
16 //
17 // This file is part of SUMO.
18 // SUMO is free software: you can redistribute it and/or modify
19 // it under the terms of the GNU General Public License as published by
20 // the Free Software Foundation, either version 3 of the License, or
21 // (at your option) any later version.
22 //
23 /****************************************************************************/
24 
25 
26 // ===========================================================================
27 // included modules
28 // ===========================================================================
29 #ifdef _MSC_VER
30 #include <windows_config.h>
31 #else
32 #include <config.h>
33 #endif
34 
35 #include <string>
36 #include <utility>
37 #ifdef HAVE_OSG
38 #include <osg/Geometry>
39 #endif
40 #include <microsim/MSLane.h>
41 #include <microsim/MSJunction.h>
42 #include <utils/geom/Position.h>
43 #include <microsim/MSNet.h>
46 #include <gui/GUIGlobals.h>
49 #include "GUIJunctionWrapper.h"
53 #include <utils/gui/div/GLHelper.h>
56 
57 #ifdef CHECK_MEMORY_LEAKS
58 #include <foreign/nvwa/debug_new.h>
59 #endif // CHECK_MEMORY_LEAKS
60 
61 
62 // ===========================================================================
63 // method definitions
64 // ===========================================================================
66  : GUIGlObject(GLO_JUNCTION, junction.getID()),
67  myJunction(junction) {
68  if (myJunction.getShape().size() == 0) {
70  myBoundary = Boundary(pos.x() - 1., pos.y() - 1., pos.x() + 1., pos.y() + 1.);
71  } else {
73  }
75 #ifdef HAVE_INTERNAL_LANES
76  myIsInner = dynamic_cast<MSInternalJunction*>(&myJunction) != 0;
77 #else
78  myIsInner = false;
79 #endif
80 }
81 
82 
84 
85 
88  GUISUMOAbstractView& parent) {
89  GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this);
90  buildPopupHeader(ret, app);
94  buildPositionCopyEntry(ret, false);
95  return ret;
96 }
97 
98 
102  return 0;
103 }
104 
105 
106 Boundary
108  Boundary b = myBoundary;
109  b.grow(20);
110  return b;
111 }
112 
113 
114 void
116  // check whether it is not too small
117  if (s.scale * myMaxSize < 1.) {
118  return;
119  }
120  if (!myIsInner) {
121  glPushName(getGlID());
122  glPushMatrix();
123  const SUMOReal colorValue = static_cast<SUMOReal>(s.junctionColorer.getActive() == 1 && gSelected.isSelected(getType(), getGlID()));
125  glTranslated(0, 0, getType());
127  glPopMatrix();
128  }
129  if (myIsInner) {
131  } else {
133  }
134  glPopName();
135 }
136 
137 
138 #ifdef HAVE_OSG
139 void
140 GUIJunctionWrapper::updateColor(const GUIVisualizationSettings& s) {
141  const SUMOReal colorValue = static_cast<SUMOReal>(s.junctionColorer.getActive() == 1 && gSelected.isSelected(getType(), getGlID()));
142  const RGBColor& col = s.junctionColorer.getScheme().getColor(colorValue);
143  osg::Vec4ubArray* colors = dynamic_cast<osg::Vec4ubArray*>(myGeom->getColorArray());
144  (*colors)[0].set(col.red(), col.green(), col.blue(), col.alpha());
145  myGeom->setColorArray(colors);
146 }
147 #endif
148 
149 
150 /****************************************************************************/
151