72 #include <gdal_priv.h> 75 #ifdef CHECK_MEMORY_LEAKS 77 #endif // CHECK_MEMORY_LEAKS 105 FXIMPLEMENT_ABSTRACT(
GUISUMOAbstractView, FXGLCanvas, GUISUMOAbstractViewMap, ARRAYNUMBER(GUISUMOAbstractViewMap))
113 LAYOUT_SIDE_TOP | LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0),
118 myMouseHotspotX(app.getDefaultCursor()->getHotX()),
119 myMouseHotspotY(app.getDefaultCursor()->getHotY()),
121 myUseToolTips(false),
122 myAmInitialised(false),
123 myViewportChooser(0),
124 myWindowCursorPositionX(getWidth() / 2),
125 myWindowCursorPositionY(getHeight() / 2),
126 myVisualizationChanger(0) {
129 flags |= FLAG_ENABLED;
130 myInEditMode =
false;
134 myVisualizationSettings->
gaming = myApp->isGaming();
147 for (std::vector<GUISUMOAbstractView::Decal>::iterator it =
myDecals.begin(); it !=
myDecals.end(); ++it) {
236 if (getWidth() == 0 || getHeight() == 0) {
255 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
256 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
261 glDisable(GL_DITHER);
265 glEnable(GL_POLYGON_SMOOTH);
266 glEnable(GL_LINE_SMOOTH);
269 glDisable(GL_POLYGON_SMOOTH);
270 glDisable(GL_LINE_SMOOTH);
298 selection.
grow(SENSITIVITY);
303 for (std::vector<GUIGlID>::const_iterator it = ids.begin(); it != ids.end(); it++) {
320 layer =
dynamic_cast<Shape*
>(o)->getLayer();
327 if (layer > maxLayer) {
342 selection.
grow(radius);
344 std::vector<GUIGlID> result;
346 for (std::vector<GUIGlID>::const_iterator it = ids.begin(); it != ids.end(); it++) {
358 result.push_back(
id);
368 const int NB_HITS_MAX = 1024 * 1024;
370 static GUIGlID hits[NB_HITS_MAX];
371 static GLint nb_hits = 0;
372 glSelectBuffer(NB_HITS_MAX, hits);
384 nb_hits = glRenderMode(GL_RENDER);
388 std::vector<GUIGlID> result;
391 for (
int i = 0; i < nb_hits; ++i) {
394 for (
int j = 0; j < (int)numNames; j++) {
395 result.push_back(*ptr);
421 glEnable(GL_DEPTH_TEST);
431 glTranslated(0, 0, .55);
432 glColor3d(0.5, 0.5, 0.5);
435 for (; ypos < yend;) {
436 glVertex2d(xmin, ypos);
437 glVertex2d(xend, ypos);
441 for (; xpos < xend;) {
442 glVertex2d(xpos, ymin);
443 glVertex2d(xpos, yend);
447 glTranslated(0, 0, -.55);
455 const std::string text(
"10000000000");
458 while (pixelSize <= 20) {
461 if (noDigits > (
int)text.length()) {
468 glMatrixMode(GL_PROJECTION);
471 glMatrixMode(GL_MODELVIEW);
476 glDisable(GL_TEXTURE_2D);
477 glDisable(GL_ALPHA_TEST);
479 glEnable(GL_DEPTH_TEST);
483 double o = double(15) / double(getHeight());
485 double oo = double(5) / double(getHeight());
488 glVertex2d(-.98, -1. + o);
489 glVertex2d(-.98 + len, -1. + o);
491 glVertex2d(-.98, -1. + o);
492 glVertex2d(-.98, -1. + o2);
494 glVertex2d(-.98 + len, -1. + o);
495 glVertex2d(-.98 + len, -1. + o2);
502 glRotated(180, 1, 0, 0);
504 glRotated(-180, 1, 0, 0);
507 glRotated(180, 1, 0, 0);
509 glRotated(-180, 1, 0, 0);
512 glMatrixMode(GL_PROJECTION);
514 glMatrixMode(GL_MODELVIEW);
540 if (o != 0 && dynamic_cast<GUIGlObject*>(o) != 0) {
541 if (applyZoom && zoomDist < 0) {
577 FXbool ret = FXGLCanvas::makeCurrent();
585 glViewport(0, 0, getWidth() - 1, getHeight() - 1);
624 FXEvent* e = (FXEvent*) data;
626 if ((e->state & CONTROLMASK) != 0) {
644 if (e->click_count == 2) {
645 handle(
this, FXSEL(SEL_DOUBLECLICKED, 0), data);
750 myApp->getCursorPosition(x, y, b);
765 FXGLCanvas::onKeyPress(o, sel, data);
772 FXGLCanvas::onKeyRelease(o, sel, data);
786 std::string errorMessage;
787 FXString ext = FXPath::extension(destFile.c_str());
788 const bool useGL2PS = ext ==
"ps" || ext ==
"eps" || ext ==
"pdf" || ext ==
"svg" || ext ==
"tex" || ext ==
"pgf";
790 const bool useVideo = destFile ==
"" || ext ==
"h264" || ext ==
"hevc";
801 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
802 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
807 glDisable(GL_DITHER);
811 glEnable(GL_POLYGON_SMOOTH);
812 glEnable(GL_LINE_SMOOTH);
815 glDisable(GL_POLYGON_SMOOTH);
816 glDisable(GL_LINE_SMOOTH);
822 GLint format = GL2PS_PS;
825 }
else if (ext ==
"eps") {
827 }
else if (ext ==
"pdf") {
829 }
else if (ext ==
"tex") {
831 }
else if (ext ==
"svg") {
833 }
else if (ext ==
"pgf") {
836 return "Could not save '" + destFile +
"'.\n Unrecognized format '" + std::string(ext.text()) +
"'.";
838 FILE* fp = fopen(destFile.c_str(),
"wb");
840 return "Could not save '" + destFile +
"'.\n Could not open file for writing";
842 GLint buffsize = 0, state = GL2PS_OVERFLOW;
844 glGetIntegerv(GL_VIEWPORT, viewport);
845 while (state == GL2PS_OVERFLOW) {
846 buffsize += 1024 * 1024;
847 gl2psBeginPage(destFile.c_str(),
"sumo-gui; http://sumo.dlr.de", viewport, format, GL2PS_SIMPLE_SORT,
848 GL2PS_DRAW_BACKGROUND | GL2PS_USE_CURRENT_VIEWPORT,
849 GL_RGBA, 0, NULL, 0, 0, 0, buffsize, fp,
"out.eps");
850 glMatrixMode(GL_MODELVIEW);
852 glDisable(GL_TEXTURE_2D);
853 glDisable(GL_ALPHA_TEST);
855 glEnable(GL_DEPTH_TEST);
865 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
867 const float minB[2] = { (float)viewPort.
xmin(), (float)viewPort.
ymin() };
868 const float maxB[2] = { (float)viewPort.
xmax(), (float)viewPort.
ymax() };
870 glEnable(GL_POLYGON_OFFSET_FILL);
871 glEnable(GL_POLYGON_OFFSET_LINE);
877 state = gl2psEndPage();
889 FXMALLOC(&buf, FXColor, getWidth()*getHeight());
891 glReadBuffer(GL_BACK);
893 glReadPixels(0, 0, getWidth(), getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)buf);
897 int mwidth = getWidth();
898 int mheight = getHeight();
900 FXColor* pbb = buf + mwidth * (mheight - 1);
917 errorMessage =
"video";
918 }
catch (std::runtime_error& err) {
919 errorMessage = err.what();
924 errorMessage =
"Could not save '" + destFile +
"'.";
927 errorMessage =
"Could not save '" + destFile +
"'.\n" + e.what();
1084 GDALDataset* poDataset = (GDALDataset*)GDALOpen(d.
filename.c_str(), GA_ReadOnly);
1085 if (poDataset == 0) {
1088 const int xSize = poDataset->GetRasterXSize();
1089 const int ySize = poDataset->GetRasterYSize();
1091 if (d.
width <= 0.) {
1092 double adfGeoTransform[6];
1093 if (poDataset->GetGeoTransform(adfGeoTransform) == CE_None) {
1094 Position topLeft(adfGeoTransform[0], adfGeoTransform[3]);
1095 const double horizontalSize = xSize * adfGeoTransform[1];
1096 const double verticalSize = ySize * adfGeoTransform[5];
1097 Position bottomRight(topLeft.
x() + horizontalSize, topLeft.
y() + verticalSize);
1099 d.
width = bottomRight.x() - topLeft.
x();
1100 d.
height = topLeft.
y() - bottomRight.y();
1101 d.
centerX = (topLeft.
x() + bottomRight.x()) / 2;
1102 d.
centerY = (topLeft.
y() + bottomRight.y()) / 2;
1110 if (d.
width <= 0.) {
1117 const int picSize = xSize * ySize;
1119 if (!FXMALLOC(&result, FXColor, picSize)) {
1123 for (
int j = 0; j < picSize; j++) {
1124 result[j] = FXRGB(0, 0, 0);
1127 for (
int i = 1; i <= poDataset->GetRasterCount(); i++) {
1128 GDALRasterBand* poBand = poDataset->GetRasterBand(i);
1130 if (poBand->GetColorInterpretation() == GCI_RedBand) {
1132 }
else if (poBand->GetColorInterpretation() == GCI_GreenBand) {
1134 }
else if (poBand->GetColorInterpretation() == GCI_BlueBand) {
1136 }
else if (poBand->GetColorInterpretation() == GCI_AlphaBand) {
1143 assert(xSize == poBand->GetXSize() && ySize == poBand->GetYSize());
1144 if (poBand->RasterIO(GF_Read, 0, 0, xSize, ySize, ((
unsigned char*)result) + shift, xSize, ySize, GDT_Byte, 4, 4 * xSize) == CE_Failure) {
1149 GDALClose(poDataset);
1151 return new FXImage(getApp(), result, IMAGE_OWNED | IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP, xSize, ySize);
1163 for (std::vector<GUISUMOAbstractView::Decal>::iterator l =
myDecals.begin(); l !=
myDecals.end(); ++l) {
1186 glTranslated(center.
x(), center.
y(), d.
layer);
1190 glRotated(d.
rot, 0, 0, 1);
1195 halfWidth =
p2m(halfWidth);
1196 halfHeight =
p2m(halfHeight);
1251 glMatrixMode(GL_PROJECTION);
1256 glOrtho(0, getWidth(), 0, getHeight(), -
GLO_MAX - 1,
GLO_MAX + 1);
1257 glMatrixMode(GL_MODELVIEW);
1261 glScaled(scaleX, scaleY, 1);
1262 glTranslated(-bound.
xmin(), -bound.
ymin(), 0);
1292 screenRelative(false),
GUIDialog_EditViewport * getViewportEditor()
get the viewport and create it on first access
SUMOReal getGridWidth() const
get grid width
void paintGLGrid()
paints a grid
A decal (an image) that can be shown.
virtual long onConfigure(FXObject *, FXSelector, void *)
mouse functions
void setValues(SUMOReal zoom, SUMOReal xoff, SUMOReal yoff)
Sets the given values into the dialog.
void showToolTips(bool val)
show tool tips
int pfDrawString(const char *c)
bool haveGrabbed() const
Returns the information whether one of the spin dialers is grabbed.
GUICompleteSchemeStorage gSchemeStorage
bool showSizeLegend
Information whether the size legend shall be drawn.
virtual SUMOReal getDelay() const
Returns the delay (should be overwritten by subclasses if applicable)
FXImage * checkGDALImage(Decal &d)
check whether we can read image data or position with gdal
virtual void setViewport(SUMOReal zoom, SUMOReal xPos, SUMOReal yPos)=0
Sets the viewport Used for: Adapting a new viewport.
FXImage * image
The image pointer for later cleanup.
const SUMOReal SUMO_const_laneWidth
virtual long onDoubleClicked(FXObject *, FXSelector, void *)
void setDefault(const std::string &name)
Makes the scheme with the given name the default.
virtual void setViewportFromTo(const Position &lookFrom, const Position &lookAt)
applies the given viewport settings
virtual void centerTo(GUIGlID id, bool applyZoom, SUMOReal zoomDist=20)
centers to the chosen artifact
bool myAmInitialised
Internal information whether doInit() was called.
void add(const Position &pos)
Adds the given position to this one.
virtual void recenterView()
recenters the view
FXint myWindowCursorPositionY
SUMOReal getHeight() const
Returns the height of the boundary (y-axis)
SUMORTree * myGrid
The visualization speed-up.
static GUIGlID add(FXImage *i)
Adds a texture to use.
void toggleSelection(GUIGlID id)
Toggles selection of an object.
bool gaming
whether the application is in gaming mode or not
virtual long onMouseMove(FXObject *, FXSelector, void *)
virtual SUMOReal getZoom() const =0
Returns the zoom factor computed stored in this changer.
unsigned char alpha() const
Returns the alpha-amount of the color.
virtual long onMiddleBtnPress(FXObject *, FXSelector, void *)
Stores the information about how to visualize structures.
The dialog to change the view (gui) settings.
static GeoConvHelper & getProcessing()
the coordinate transformation to use for input conversion and processing
#define GEO_OUTPUT_ACCURACY
void displayLegend()
a line with ticks, and the length information.
bool x2cartesian(Position &from, bool includeInBoundary=true)
void updatePositionInformation() const
update position information
void remove(GUIDialog_EditViewport *)
remove viewport
GUIVisualizationSettings * getVisualisationSettings() const
get visualitation settings
GUIMainWindow * myApp
The application.
virtual void saveFrame(const std::string &destFile, FXColor *buf)
Adds a frame to a video snapshot which will be initialized if neccessary.
MFXMutex myDecalsLock
The mutex to use before accessing the decals list in order to avoid thread conficts.
void pfSetPosition(SUMOReal x, SUMOReal y)
SUMOReal ymin() const
Returns minimum y-coordinate.
bool screenRelative
Whether this image should be skipped in 2D-views.
virtual long onLeftBtnPress(FXObject *, FXSelector, void *)
bool myInEditMode
Information whether too-tip informations shall be generated.
virtual void openObjectDialog()
virtual Boundary getCenteringBoundary() const =0
virtual long onKeyRelease(FXObject *o, FXSelector sel, void *data)
unsigned char blue() const
Returns the blue-amount of the color.
bool addAdditionalGLVisualisation(const GUIGlObject *const which)
Adds an object to call its additional visualisation method.
int glID
whether the decal shall be drawn in screen coordinates, rather than network coordinates ...
void setSnapshots(std::map< SUMOTime, std::string > snaps)
Sets the snapshot time to file map.
SUMOReal ymax() const
Returns maximum y-coordinate.
static const RGBColor BLACK
SUMOReal width
The width of the image (net coordinates in x-direction, in m)
SUMOReal getWidth() const
Returns the width of the boudary (x-axis)
virtual void copyViewportTo(GUISUMOAbstractView *view)
copy the viewport to the given view
virtual void onGamingClick(Position)
on gaming click
GUIDialog_ViewSettings * myVisualizationChanger
Visualization changer.
virtual void setViewportFrom(SUMOReal xPos, SUMOReal yPos, SUMOReal zPos)=0
Alternative method for setting the viewport.
virtual void stopTrack()
stop track
GUIDialog_EditViewport * myViewportChooser
viewport chooser
A RT-tree for efficient storing of SUMO's GL-objects.
bool dither
Information whether dithering shall be enabled.
#define UNUSED_PARAMETER(x)
A class that stores a 2D geometrical boundary.
SUMOReal xmin() const
Returns minimum x-coordinate.
int myMouseHotspotX
Offset to the mouse-hotspot from the mouse position.
void addDecals(const std::vector< Decal > &decals)
add decals
bool removeAdditionalGLVisualisation(const GUIGlObject *const which)
Removes an object from the list of objects that show additional things.
#define WRITE_WARNING(msg)
SUMOReal scale
information about a lane's width (temporary, used for a single view)
std::map< const GUIGlObject *, int > myAdditionallyDrawn
List of objects for which GUIGlObject::drawGLAdditional is called.
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
FXLabel & getCartesianLabel()
virtual void setDelay(SUMOReal)
Sets the delay of the parent application.
std::vector< GUIGlID > getObjectsAtPosition(Position pos, SUMOReal radius)
returns the ids of the object at position within the given (rectangular) radius using GL_SELECT ...
std::vector< Decal > myDecals
GUIGlID getObjectAtPosition(Position pos)
returns the id of the object at position using GL_SELECT
static FXbool scalePower2(FXImage *image, int maxSize=(2<< 29))
virtual GUIGlID getTrackedID() const
get tracked id
virtual void startTrack(int)
star track
SUMOReal getDelay() const
Returns the delay of the parent application.
virtual long onPaint(FXObject *, FXSelector, void *)
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
std::string name
The name of this setting.
void showToolTipFor(const GUIGlID id)
invokes the tooltip for the given object
virtual void setStatusBarText(const std::string &)
virtual long onKeyPress(FXObject *o, FXSelector sel, void *data)
keyboard functions
virtual SUMOReal getXPos() const =0
Returns the x-offset of the field to show stored in this changer.
static void sleep(long ms)
SUMOReal z() const
Returns the z-position.
bool isInEditMode()
returns true, if the edit button was pressed
A point in 2D or 3D with translation and scaling methods.
SUMOReal centerY
The center of the image in y-direction (net coordinates, in m)
virtual GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)=0
Returns an own popup-menu.
FXComboBox & getColoringSchemesCombo()
static GUIGlObjectStorage gIDStorage
A single static instance of this class.
bool isGaming() const
return whether the gui is in gaming mode
GUIPerspectiveChanger & getChanger() const
get changer
SUMOReal p2m(SUMOReal pixel) const
pixels-to-meters conversion method
virtual bool onLeftBtnRelease(void *data)
called when user releases left button
FXComboBox & getColoringSchemesCombo()
get coloring schemes combo
bool initialised
Whether this image was initialised (inserted as a texture)
SUMOReal x() const
Returns the x-position.
virtual bool onRightBtnRelease(void *data)
called when user releases right button
virtual void doInit()
doInit
virtual long onMouseWheel(FXObject *, FXSelector, void *)
virtual void checkSnapshots()
Checks whether it is time for a snapshot.
virtual ~GUISUMOAbstractView()
destructor
std::string filename
The path to the file the image is located at.
virtual int doPaintGL(int, const Boundary &)
paint GL
void pfSetScaleXY(SUMOReal sx, SUMOReal sy)
Position screenPos2NetPos(int x, int y) const
Translate screen position to network position.
SUMOReal gridXSize
Information about the grid spacings.
std::map< SUMOTime, std::string > mySnapshots
Snapshots.
static FXbool saveImage(const std::string &file, int width, int height, FXColor *data)
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
static void drawTextBox(const std::string &text, const Position &pos, const SUMOReal layer, const SUMOReal size, const RGBColor &txtColor=RGBColor::BLACK, const RGBColor &bgColor=RGBColor::WHITE, const RGBColor &borderColor=RGBColor::BLACK, const SUMOReal angle=0)
draw Text box with given parameters
GUIPerspectiveChanger * myChanger
The perspective changer.
bool myUseToolTips
use tool tips
std::string makeSnapshot(const std::string &destFile)
Takes a snapshots and writes it into the given file.
virtual void onLeftBtnPress(void *data)
mouse functions
GUIGLObjectPopupMenu * myPopup
The current popup-menu.
RGBColor backgroundColor
The background color to use.
void destroyPopup()
destoys the popup
bool antialiase
Information whether antialiase shall be enabled.
FXint myWindowCursorPositionX
Position of the cursor relative to the window.
virtual SUMOReal getZPos() const =0
Returns the camera height corresponding to the current zoom factor.
virtual long onMiddleBtnRelease(FXObject *, FXSelector, void *)
Boundary getViewport(bool fixRatio=true)
get viewport
virtual bool setColorScheme(const std::string &)
set color scheme
void unlock()
release mutex lock
virtual void showViewportEditor()
show viewport editor
FXbool makeCurrent()
A reimplementation due to some internal reasons.
SUMOReal height
The height of the image (net coordinates in y-direction, in m)
void applyGLTransform(bool fixRatio=true)
applies gl-transformations to fit the Boundary given by myChanger onto the canvas. If fixRatio is true, this boundary will be enlarged to prevent anisotropic stretching. (this should be set to false when doing selections)
virtual long onLeftBtnRelease(FXObject *, FXSelector, void *)
SUMOReal centerX
The center of the image in x-direction (net coordinates, in m)
GUIVisualizationSettings & getDefault()
Returns the default scheme.
Boundary & grow(SUMOReal by)
extends the boundary by the given amount
void saveViewport(const SUMOReal x, const SUMOReal y, const SUMOReal z)
Makes the given viewport the default.
GUIGlObject * getNetObject() const
Returns the network object.
void setViewport(GUISUMOAbstractView *view)
Sets the default viewport.
GUIVisualizationSettings * myVisualizationSettings
visualization settings
SUMOReal xmax() const
Returns maximum x-coordinate.
void add(SUMOReal x, SUMOReal y, SUMOReal z=0)
Makes the boundary include the given coordinate.
virtual void onMouseWheel(void *data)
called when user changes mouse wheel
bool isAdditionalGLVisualisationEnabled(GUIGlObject *const which) const
Check if an object is added in the additional GL visualitation.
unsigned char green() const
Returns the green-amount of the color.
void paintGL()
performs the painting of the simulation
virtual long onKeyPress(void *data)
called when user press a key
void setWindowCursorPosition(FXint x, FXint y)
Returns the information whether rotation is allowd.
void setCurrent(GUIVisualizationSettings *settings)
Sets current settings (called if reopened)
static const GUIGlID INVALID_ID
static FXImage * loadImage(FXApp *a, const std::string &file)
SUMOReal m2p(SUMOReal meter) const
meter-to-pixels conversion method
static const GeoConvHelper & getFinal()
the coordinate transformation for writing the location element and for tracking the original coordina...
bool showGrid
Information whether a grid shall be shown.
void drawDecals()
Draws the stored decals.
static int getMaxTextureSize()
return maximum number of pixels in x and y direction
SUMOReal layer
The layer of the image.
GUIGlID getGlID() const
Returns the numerical id of the object.
Position getCenter() const
Returns the center of the boundary.
unsigned char red() const
Returns the red-amount of the color.
virtual void centerTo(const Position &pos, SUMOReal radius, bool applyZoom=true)=0
Centers the view to the given position, setting it to a size that covers the radius. Used for: Centering of vehicles and junctions */.
void setDelay(SUMOReal delay)
Sets the delay of the parent application.
bool skip2D
Whether this image should be skipped in 2D-views.
virtual void onMouseMove(void *data)
called when user moves mouse
virtual SUMOTime getCurrentTimeStep() const
get the current simulation time
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
Boundary getVisibleBoundary() const
get visible boundary
void updateToolTip()
A method that updates the tooltip.
A dialog to change the viewport.
virtual void onRightBtnPress(void *data)
called when user press right button
void unblockObject(GUIGlID id)
Marks an object as unblocked.
SUMOReal getGridHeight() const
get grid Height
static bool UseMesoSim
this should be set at the same time as MSGlobals::gUseMesoSim
virtual SUMOReal getYPos() const =0
Returns the y-offset of the field to show stored in this changer.
void showViewschemeEditor()
show viewsscheme editor
virtual long onRightBtnPress(FXObject *, FXSelector, void *)
const std::string & getFullName() const
virtual long onMouseLeft(FXObject *, FXSelector, void *)
GUIGlID getObjectUnderCursor()
returns the id of the object under the cursor using GL_SELECT
bool drawForSelecting
whether drawing is performed for the purpose of selecting objects
#define WRITE_MESSAGE(msg)
GUIGlObject * getObjectBlocking(GUIGlID id)
Returns the object from the container locking it.
SUMOReal y() const
Returns the y-position.
virtual long onKeyRelease(void *data)
called when user releases a key
virtual int Search(const float a_min[2], const float a_max[2], const GUIVisualizationSettings &c) const
Find all within search rectangle.
GUISelectedStorage gSelected
A global holder of selected objects.
static void drawTexturedBox(int which, SUMOReal size)
Draws a named texture as a box with the given size.
FXDEFMAP(GUISUMOAbstractView) GUISUMOAbstractViewMap[]
SUMOReal rot
The rotation of the image in the ground plane (in degrees)
GUIGlChildWindow * myParent
The parent window.
virtual long onRightBtnRelease(FXObject *, FXSelector, void *)
static const Position INVALID
std::vector< GUIGlID > getObjectsInBoundary(const Boundary &bound)
returns the ids of all objects in the given boundary
void setOldValues(const Position &lookFrom, const Position &lookAt)
Resets old values.