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) {
230 if (getWidth() == 0 || getHeight() == 0) {
249 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
250 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
255 glDisable(GL_DITHER);
259 glEnable(GL_POLYGON_SMOOTH);
260 glEnable(GL_LINE_SMOOTH);
263 glDisable(GL_POLYGON_SMOOTH);
264 glDisable(GL_LINE_SMOOTH);
292 selection.
grow(SENSITIVITY);
297 for (std::vector<GUIGlID>::const_iterator it = ids.begin(); it != ids.end(); it++) {
314 layer =
dynamic_cast<Shape*
>(o)->getLayer();
321 if (layer > maxLayer) {
336 selection.
grow(radius);
338 std::vector<GUIGlID> result;
340 for (std::vector<GUIGlID>::const_iterator it = ids.begin(); it != ids.end(); it++) {
352 result.push_back(
id);
362 const int NB_HITS_MAX = 1024 * 1024;
364 static GUIGlID hits[NB_HITS_MAX];
365 static GLint nb_hits = 0;
366 glSelectBuffer(NB_HITS_MAX, hits);
378 nb_hits = glRenderMode(GL_RENDER);
382 std::vector<GUIGlID> result;
385 for (
int i = 0; i < nb_hits; ++i) {
388 for (
int j = 0; j < (int)numNames; j++) {
389 result.push_back(*ptr);
415 glEnable(GL_DEPTH_TEST);
425 glTranslated(0, 0, .55);
426 glColor3d(0.5, 0.5, 0.5);
429 for (; ypos < yend;) {
430 glVertex2d(xmin, ypos);
431 glVertex2d(xend, ypos);
435 for (; xpos < xend;) {
436 glVertex2d(xpos, ymin);
437 glVertex2d(xpos, yend);
441 glTranslated(0, 0, -.55);
449 const std::string text(
"10000000000");
452 while (pixelSize <= 20) {
455 if (noDigits > (
int)text.length()) {
463 glMatrixMode(GL_PROJECTION);
466 glMatrixMode(GL_MODELVIEW);
471 glDisable(GL_TEXTURE_2D);
472 glDisable(GL_ALPHA_TEST);
474 glEnable(GL_DEPTH_TEST);
478 double o = double(15) / double(getHeight());
480 double oo = double(5) / double(getHeight());
483 glVertex2d(-.98, -1. + o);
484 glVertex2d(-.98 + len, -1. + o);
486 glVertex2d(-.98, -1. + o);
487 glVertex2d(-.98, -1. + o2);
489 glVertex2d(-.98 + len, -1. + o);
490 glVertex2d(-.98 + len, -1. + o2);
497 glRotated(180, 1, 0, 0);
499 glRotated(-180, 1, 0, 0);
502 glRotated(180, 1, 0, 0);
504 glRotated(-180, 1, 0, 0);
507 glMatrixMode(GL_PROJECTION);
509 glMatrixMode(GL_MODELVIEW);
535 if (o != 0 && dynamic_cast<GUIGlObject*>(o) != 0) {
536 if (applyZoom && zoomDist < 0) {
572 FXbool ret = FXGLCanvas::makeCurrent();
580 glViewport(0, 0, getWidth() - 1, getHeight() - 1);
619 FXEvent* e = (FXEvent*) data;
621 if ((e->state & CONTROLMASK) != 0) {
639 if (e->click_count == 2) {
640 handle(
this, FXSEL(SEL_DOUBLECLICKED, 0), data);
745 myApp->getCursorPosition(x, y, b);
760 FXGLCanvas::onKeyPress(o, sel, data);
767 FXGLCanvas::onKeyRelease(o, sel, data);
781 std::string errorMessage;
782 FXString ext = FXPath::extension(destFile.c_str());
783 const bool useGL2PS = ext ==
"ps" || ext ==
"eps" || ext ==
"pdf" || ext ==
"svg" || ext ==
"tex" || ext ==
"pgf";
785 const bool useVideo = destFile ==
"" || ext ==
"h264" || ext ==
"hevc";
796 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
797 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
802 glDisable(GL_DITHER);
806 glEnable(GL_POLYGON_SMOOTH);
807 glEnable(GL_LINE_SMOOTH);
810 glDisable(GL_POLYGON_SMOOTH);
811 glDisable(GL_LINE_SMOOTH);
817 GLint format = GL2PS_PS;
820 }
else if (ext ==
"eps") {
822 }
else if (ext ==
"pdf") {
824 }
else if (ext ==
"tex") {
826 }
else if (ext ==
"svg") {
828 }
else if (ext ==
"pgf") {
831 return "Could not save '" + destFile +
"'.\n Unrecognized format '" + std::string(ext.text()) +
"'.";
833 FILE* fp = fopen(destFile.c_str(),
"wb");
835 return "Could not save '" + destFile +
"'.\n Could not open file for writing";
837 GLint buffsize = 0, state = GL2PS_OVERFLOW;
839 glGetIntegerv(GL_VIEWPORT, viewport);
840 while (state == GL2PS_OVERFLOW) {
841 buffsize += 1024 * 1024;
842 gl2psBeginPage(destFile.c_str(),
"sumo-gui; http://sumo.dlr.de", viewport, format, GL2PS_SIMPLE_SORT,
843 GL2PS_DRAW_BACKGROUND | GL2PS_USE_CURRENT_VIEWPORT,
844 GL_RGBA, 0, NULL, 0, 0, 0, buffsize, fp,
"out.eps");
845 glMatrixMode(GL_MODELVIEW);
847 glDisable(GL_TEXTURE_2D);
848 glDisable(GL_ALPHA_TEST);
850 glEnable(GL_DEPTH_TEST);
860 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
864 minB[0] = viewPort.
xmin();
865 minB[1] = viewPort.
ymin();
866 maxB[0] = viewPort.
xmax();
867 maxB[1] = viewPort.
ymax();
869 glEnable(GL_POLYGON_OFFSET_FILL);
870 glEnable(GL_POLYGON_OFFSET_LINE);
876 state = gl2psEndPage();
888 FXMALLOC(&buf, FXColor, getWidth()*getHeight());
890 glReadBuffer(GL_BACK);
892 glReadPixels(0, 0, getWidth(), getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)buf);
896 int mwidth = getWidth();
897 int mheight = getHeight();
899 FXColor* pbb = buf + mwidth * (mheight - 1);
916 errorMessage =
"video";
917 }
catch (std::runtime_error& err) {
918 errorMessage = err.what();
923 errorMessage =
"Could not save '" + destFile +
"'.";
926 errorMessage =
"Could not save '" + destFile +
"'.\n" + e.what();
1083 GDALDataset* poDataset = (GDALDataset*)GDALOpen(d.
filename.c_str(), GA_ReadOnly);
1084 if (poDataset == 0) {
1087 const int xSize = poDataset->GetRasterXSize();
1088 const int ySize = poDataset->GetRasterYSize();
1090 if (d.
width <= 0.) {
1091 double adfGeoTransform[6];
1092 if (poDataset->GetGeoTransform(adfGeoTransform) == CE_None) {
1093 Position topLeft(adfGeoTransform[0], adfGeoTransform[3]);
1094 const double horizontalSize = xSize * adfGeoTransform[1];
1095 const double verticalSize = ySize * adfGeoTransform[5];
1096 Position bottomRight(topLeft.
x() + horizontalSize, topLeft.
y() + verticalSize);
1098 d.
width = bottomRight.x() - topLeft.
x();
1099 d.
height = topLeft.
y() - bottomRight.y();
1100 d.
centerX = (topLeft.
x() + bottomRight.x()) / 2;
1101 d.
centerY = (topLeft.
y() + bottomRight.y()) / 2;
1109 if (d.
width <= 0.) {
1116 const int picSize = xSize * ySize;
1118 if (!FXMALLOC(&result, FXColor, picSize)) {
1122 for (
int j = 0; j < picSize; j++) {
1123 result[j] = FXRGB(0, 0, 0);
1126 for (
int i = 1; i <= poDataset->GetRasterCount(); i++) {
1127 GDALRasterBand* poBand = poDataset->GetRasterBand(i);
1129 if (poBand->GetColorInterpretation() == GCI_RedBand) {
1131 }
else if (poBand->GetColorInterpretation() == GCI_GreenBand) {
1133 }
else if (poBand->GetColorInterpretation() == GCI_BlueBand) {
1135 }
else if (poBand->GetColorInterpretation() == GCI_AlphaBand) {
1142 assert(xSize == poBand->GetXSize() && ySize == poBand->GetYSize());
1143 if (poBand->RasterIO(GF_Read, 0, 0, xSize, ySize, ((
unsigned char*)result) + shift, xSize, ySize, GDT_Byte, 4, 4 * xSize) == CE_Failure) {
1148 GDALClose(poDataset);
1150 return new FXImage(getApp(), result, IMAGE_OWNED | IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP, xSize, ySize);
1162 for (std::vector<GUISUMOAbstractView::Decal>::iterator l =
myDecals.begin(); l !=
myDecals.end(); ++l) {
1184 glRotated(d.
rot, 0, 0, 1);
1241 glMatrixMode(GL_PROJECTION);
1246 glOrtho(0, getWidth(), 0, getHeight(), -
GLO_MAX - 1,
GLO_MAX + 1);
1247 glMatrixMode(GL_MODELVIEW);
1251 glScaled(scaleX, scaleY, 1);
1252 glTranslated(-bound.
xmin(), -bound.
ymin(), 0);
GUIDialog_EditViewport * getViewportEditor()
get the viewport and create it on first access
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)
SUMOReal getHeight() const
Returns the height of the boundary.
GUICompleteSchemeStorage gSchemeStorage
bool showSizeLegend
Information whether the size legend shall be drawn.
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
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
SUMOReal getWidth() const
Returns the width of the boudary.
virtual long onDoubleClicked(FXObject *, FXSelector, void *)
virtual SUMOReal getDelay() const
Returns the delay (should be overwritten by subclasses if applicable)
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
Position getCenter() const
Returns the center of the boundary.
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
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 *)
const std::string & getFullName() const
virtual SUMOReal getZoom() const =0
Returns the zoom factor computed stored in this changer.
SUMOReal ymin() const
Returns minimum y-coordinate.
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 remove(GUIDialog_EditViewport *)
remove viewport
GUIMainWindow * myApp
The application.
SUMOReal xmin() const
Returns minimum x-coordinate.
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 p2m(SUMOReal pixel) const
pixels-to-meters conversion method
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)
GUIGlObject * getNetObject() const
Returns the network object.
SUMOReal getGridHeight() const
get grid Height
bool addAdditionalGLVisualisation(const GUIGlObject *const which)
Adds an object to call its additional visualisation method.
int glID
The gl-id of the texture that holds this image.
void setSnapshots(std::map< SUMOTime, std::string > snaps)
Sets the snapshot time to file map.
static const RGBColor BLACK
SUMOReal width
The width of the image (net coordinates in x-direction, in m)
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
bool isGaming() const
return whether the gui is in gaming mode
GUIDialog_EditViewport * myViewportChooser
viewport chooser
A RT-tree for efficient storing of SUMO's GL-objects.
SUMOReal x() const
Returns the x-position.
bool dither
Information whether dithering shall be enabled.
GUIGlID getGlID() const
Returns the numerical id of the object.
#define UNUSED_PARAMETER(x)
SUMOReal xmax() const
Returns maximum x-coordinate.
A class that stores a 2D geometrical boundary.
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.
virtual GUIGlID getTrackedID() const
get tracked id
unsigned char blue() const
Returns the blue-amount of the color.
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
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
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 void startTrack(int)
star track
virtual long onPaint(FXObject *, FXSelector, void *)
std::string name
The name of this setting.
void showToolTipFor(const GUIGlID id)
invokes the tooltip for the given object
Boundary getVisibleBoundary() const
get visible boundary
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)
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()
unsigned char alpha() const
Returns the alpha-amount of the color.
static GUIGlObjectStorage gIDStorage
A single static instance of this class.
SUMOReal z() const
Returns the z-position.
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)
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)
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)
void updatePositionInformation() const
update position information
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
SUMOReal getDelay() const
Returns the delay of the parent application.
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 *)
void add(SUMOReal x, SUMOReal y)
Makes the boundary include the given coordinate.
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.
void setViewport(GUISUMOAbstractView *view)
Sets the default viewport.
GUIVisualizationSettings * myVisualizationSettings
visualization settings
virtual void onMouseWheel(void *data)
called when user changes mouse wheel
SUMOReal m2p(SUMOReal meter) const
meter-to-pixels conversion method
void paintGL()
performs the painting of the simulation
virtual long onKeyPress(void *data)
called when user press a key
virtual SUMOTime getCurrentTimeStep() const
get the current simulation time
SUMOReal y() const
Returns the y-position.
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 getGridWidth() const
get grid width
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
bool isAdditionalGLVisualisationEnabled(GUIGlObject *const which) const
Check if an object is added in the additional GL visualitation.
GUIPerspectiveChanger & getChanger() const
get changer
SUMOReal layer
The layer of the image.
virtual int Search(const float a_min[2], const float a_max[2], const GUIVisualizationSettings &c) const
Find all within search rectangle.
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.
GUIVisualizationSettings * getVisualisationSettings() const
get visualitation settings
bool skip2D
Whether this image should be skipped in 2D-views.
unsigned char green() const
Returns the green-amount of the color.
virtual void onMouseMove(void *data)
called when user moves mouse
void updateToolTip()
A method that updates the tooltip.
A dialog to change the viewport.
SUMOReal ymax() const
Returns maximum y-coordinate.
virtual void onRightBtnPress(void *data)
called when user press right button
void unblockObject(GUIGlID id)
Marks an object as unblocked.
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 *)
bool haveGrabbed() const
Returns the information whether one of the spin dialers is grabbed.
virtual long onMouseLeft(FXObject *, FXSelector, void *)
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
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.
virtual long onKeyRelease(void *data)
called when user releases a key
unsigned char red() const
Returns the red-amount of the color.
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.