72#pragma warning(disable: 4435 5219 5220)
75#pragma GCC diagnostic push
76#pragma GCC diagnostic ignored "-Wpedantic"
80#pragma GCC diagnostic pop
130FXIMPLEMENT_ABSTRACT(
GUISUMOAbstractView, FXGLCanvas, GUISUMOAbstractViewMap, ARRAYNUMBER(GUISUMOAbstractViewMap))
137 FXGLCanvas(p, glVis, share, p,
MID_GLCANVAS, LAYOUT_SIDE_TOP | LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0),
142 myMouseHotspotX(app.getDefaultCursor()->getHotX()),
143 myMouseHotspotY(app.getDefaultCursor()->getHotY()),
144 myAmInitialised(false),
145 myViewportChooser(
nullptr),
146 myWindowCursorPositionX(getWidth() / 2),
147 myWindowCursorPositionY(getHeight() / 2),
148 myVisualizationChanger(
nullptr),
152 flags |= FLAG_ENABLED;
155 myVisualizationSettings->
gaming = myApp->isGaming();
170 for (std::vector<GUISUMOAbstractView::Decal>::iterator it =
myDecals.begin(); it !=
myDecals.end(); ++it) {
174 i.first->removeActiveAddVisualisation(
this, ~0);
227 double xNet = bound.
xmin() + bound.
getWidth() * x / getWidth();
229 double yNet = bound.
ymin() + bound.
getHeight() * (getHeight() - y) / getHeight();
297 if (getWidth() == 0 || getHeight() == 0) {
313 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
314 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
319 glDisable(GL_DITHER);
322 glDisable(GL_LINE_SMOOTH);
392std::vector<GUIGlObject*>
398std::vector<GUIGlObject*>
408 positionBoundary.
add(pos);
413 double maxLayer = -std::numeric_limits<double>::max();
415 for (
const auto& i : ids) {
429 if (layer > maxLayer) {
443 std::vector<GUIGlID> result;
447 selection.
grow(radius);
451 for (
const auto& i : ids) {
475std::vector<GUIGlObject*>
478 std::vector<GUIGlObject*> result;
482 selection.
grow(radius);
486 for (
const auto& i : ids) {
507 const int NB_HITS_MAX = 1024 * 1024;
509 static GUIGlID hits[NB_HITS_MAX];
510 static GLint nb_hits = 0;
511 glSelectBuffer(NB_HITS_MAX, hits);
519 if (singlePosition) {
529 nb_hits = glRenderMode(GL_RENDER);
533 std::vector<GUIGlID> result;
536 for (
int i = 0; i < nb_hits; ++i) {
539 for (
int j = 0; j < (int)numNames; j++) {
540 result.push_back(*ptr);
550std::vector<GUIGlObject*>
557 bool junction =
false;
558 for (
const auto&
object : objects) {
567 std::vector<GUIGlObject*> filteredObjects;
568 for (
const auto&
object : objects) {
569 if ((object->getType() ==
GLO_LANE) && (object->getMicrosimID().find(
':') != std::string::npos)) {
572 filteredObjects.push_back(
object);
574 return filteredObjects;
582 if (
object !=
nullptr) {
599 glEnable(GL_DEPTH_TEST);
614 glTranslated(0, 0, .55);
615 glColor3d(0.5, 0.5, 0.5);
619 glVertex2d(xmin, yp);
620 glVertex2d(xmax, yp);
625 glVertex2d(xp, ymin);
626 glVertex2d(xp, ymax);
630 glTranslated(0, 0, -.55);
639 const std::string text(
"10000000000");
641 int pixelSize = (int)
m2p((
double) length);
642 while (pixelSize <= 20) {
645 if (noDigits > (
int)text.length()) {
648 pixelSize = (int)
m2p((
double) length);
652 glMatrixMode(GL_PROJECTION);
655 glMatrixMode(GL_MODELVIEW);
661 glDisable(GL_TEXTURE_2D);
662 glDisable(GL_ALPHA_TEST);
664 glEnable(GL_DEPTH_TEST);
666 glTranslated(0, 0, z);
668 double len = (double) pixelSize / (
double)(getWidth() - 1) * (
double) 2.0;
670 double o = double(15) / double(getHeight());
672 double oo = double(5) / double(getHeight());
675 glVertex2d(-.98, -1. + o);
676 glVertex2d(-.98 + len, -1. + o);
678 glVertex2d(-.98, -1. + o);
679 glVertex2d(-.98, -1. + o2);
681 glVertex2d(-.98 + len, -1. + o);
682 glVertex2d(-.98 + len, -1. + o2);
686 const double fontHeight = 0.1 * 300. / getHeight();
687 const double fontWidth = 0.1 * 300. / getWidth();
695 glMatrixMode(GL_PROJECTION);
697 glMatrixMode(GL_MODELVIEW);
718 glMatrixMode(GL_PROJECTION);
721 glMatrixMode(GL_MODELVIEW);
726 glEnable(GL_DEPTH_TEST);
729 glTranslated(0, 0, z);
731 const bool fixed = scheme.
isFixed();
732 const int numColors = (int)scheme.
getColors().size();
737 double textX = left - 0.01;
740 const double top = -0.8;
741 const double bot = 0.8;
742 const double dy = (top - bot) / numColors;
743 const double bot2 = fixed ? bot : bot + dy / 2;
749 textX = right + 0.01;
756 glVertex2d(right, top);
757 glVertex2d(right, bot2);
758 glVertex2d(left, bot2);
759 glVertex2d(left, top);
760 glVertex2d(right, top);
761 glVertex2d(left, top);
762 glVertex2d(right, bot2);
763 glVertex2d(left, bot2);
766 const double fontHeight = 0.20 * 300. / getHeight();
767 const double fontWidth = 0.20 * 300. / getWidth();
769 const int fadeSteps = fixed ? 1 : 10;
770 double colorStep = dy / fadeSteps;
771 for (
int i = 0; i < numColors; i++) {
773 const double topi = top - i * dy;
776 if (i + 1 < numColors) {
784 glVertex2d(left, topi);
785 glVertex2d(right, topi);
786 glVertex2d(right, topi - 5 * colorStep);
787 glVertex2d(left, topi - 5 * colorStep);
791 glVertex2d(right, topi - 10 * colorStep);
792 glVertex2d(left, topi - 10 * colorStep);
795 glVertex2d(right, topi - 5 * colorStep);
796 glVertex2d(left, topi - 5 * colorStep);
800 for (
double j = 0.0; j < fadeSteps; j++) {
803 glVertex2d(left, topi - j * colorStep);
804 glVertex2d(right, topi - j * colorStep);
805 glVertex2d(right, topi - (j + 1) * colorStep);
806 glVertex2d(left, topi - (j + 1) * colorStep);
813 glVertex2d(left, topi);
814 glVertex2d(right, topi);
815 glVertex2d(right, bot2);
816 glVertex2d(left, bot2);
821 std::string name = scheme.
getNames()[i];
824 const double bgShift = 0.0;
825 const double textShift = 0.01;
826 const double textXShift = -0.005;
829 glTranslated(0, 0, 0.1);
831 glVertex2d(textX, topi + fontHeight * bgShift);
832 glVertex2d(textX - textDir * fontWidth * (
double)text.size() / 2., topi + fontHeight * bgShift);
833 glVertex2d(textX - textDir * fontWidth * (
double)text.size() / 2., topi + fontHeight * (1. + bgShift));
834 glVertex2d(textX, topi + fontHeight * (1. + bgShift));
836 glTranslated(0, 0, -0.1);
841 glMatrixMode(GL_PROJECTION);
843 glMatrixMode(GL_MODELVIEW);
855 glMatrixMode(GL_PROJECTION);
858 glMatrixMode(GL_MODELVIEW);
861 const double fontHeight = 0.2 * 300. / getHeight();
862 const double fontWidth = 0.2 * 300. / getWidth();
864#ifdef CHECK_ELEMENTCOUNTER
869 glMatrixMode(GL_PROJECTION);
871 glMatrixMode(GL_MODELVIEW);
897 if (o !=
nullptr &&
dynamic_cast<GUIGlObject*
>(o) !=
nullptr) {
898 if (applyZoom && zoomDist < 0) {
947 FXbool ret = FXGLCanvas::makeCurrent();
955 glViewport(0, 0, getWidth() - 1, getHeight() - 1);
1019 FXEvent* e = (FXEvent*) ptr;
1021 if ((e->state & CONTROLMASK) != 0) {
1036 if ((e->state & SHIFTMASK) != 0) {
1057 if (e->click_count == 2) {
1058 handle(
this, FXSEL(SEL_DOUBLECLICKED, 0), ptr);
1160 }
else if (
myPopup->shown() ==
false) {
1190 const bool altKeyPressed = ((ev->state & ALTMASK) != 0);
1196 std::vector<GUIGlObject*> filteredObjectsUnderCursor;
1197 std::vector<GUIGlObject*> filteredVehiclesUnderCursor;
1198 std::vector<GUIGlObject*> filteredTLSUnderCursor;
1199 for (
const auto& GLObject : objectsUnderCursor) {
1200 if (GLObject->getType() ==
GLO_EDGE) {
1204 if (std::find(filteredObjectsUnderCursor.begin(), filteredObjectsUnderCursor.end(), GLObject) != filteredObjectsUnderCursor.end()) {
1213 filteredVehiclesUnderCursor.push_back(GLObject);
1217 filteredTLSUnderCursor.push_back(GLObject);
1219 filteredObjectsUnderCursor.push_back(GLObject);
1224 if (filteredObjectsUnderCursor.empty()) {
1227 }
else if (altKeyPressed) {
1230 }
else if (filteredVehiclesUnderCursor.size() > 0) {
1233 }
else if (filteredTLSUnderCursor.size() > 0) {
1248 if (objects.size() > 0) {
1250 if (objects.size() == 1) {
1254 std::vector<GUIGlObject*> filteredGLObjects;
1256 for (
const auto& glObject : objects) {
1258 if (glObject->getType() == objects.front()->getType()) {
1259 filteredGLObjects.push_back(glObject);
1278 return myPopup->onKeyPress(o, sel, ptr);
1280 FXEvent* e = (FXEvent*) ptr;
1281 if (e->state & CONTROLMASK) {
1282 if (e->code == FX::KEY_Page_Up) {
1287 }
else if (e->code == FX::KEY_Page_Down) {
1294 FXGLCanvas::onKeyPress(o, sel, ptr);
1303 return myPopup->onKeyRelease(o, sel, ptr);
1305 FXGLCanvas::onKeyRelease(o, sel, ptr);
1314#ifdef DEBUG_SNAPSHOT
1315 std::cout <<
"add snapshot time=" << time <<
" file=" << file <<
"\n";
1318 mySnapshots[time].push_back(std::make_tuple(file, w, h));
1328 std::string errorMessage;
1329 FXString ext = FXPath::extension(destFile.c_str());
1330 const bool useGL2PS = ext ==
"ps" || ext ==
"eps" || ext ==
"pdf" || ext ==
"svg" || ext ==
"tex" || ext ==
"pgf";
1332 const bool useVideo = destFile ==
"" || ext ==
"h264" || ext ==
"hevc" || ext ==
"mp4";
1343 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
1344 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
1347 glEnable(GL_DITHER);
1349 glDisable(GL_DITHER);
1352 glDisable(GL_LINE_SMOOTH);
1358 GLint format = GL2PS_PS;
1361 }
else if (ext ==
"eps") {
1363 }
else if (ext ==
"pdf") {
1365 }
else if (ext ==
"tex") {
1367 }
else if (ext ==
"svg") {
1369 }
else if (ext ==
"pgf") {
1372 return "Could not save '" + destFile +
"'.\n Unrecognized format '" + std::string(ext.text()) +
"'.";
1374 FILE* fp = fopen(destFile.c_str(),
"wb");
1376 return "Could not save '" + destFile +
"'.\n Could not open file for writing";
1379 GLint buffsize = 0, state = GL2PS_OVERFLOW;
1381 glGetIntegerv(GL_VIEWPORT, viewport);
1382 while (state == GL2PS_OVERFLOW) {
1383 buffsize += 1024 * 1024;
1384 gl2psBeginPage(destFile.c_str(),
"sumo-gui; https://sumo.dlr.de", viewport, format, GL2PS_SIMPLE_SORT,
1385 GL2PS_DRAW_BACKGROUND | GL2PS_USE_CURRENT_VIEWPORT,
1386 GL_RGBA, 0, NULL, 0, 0, 0, buffsize, fp,
"out.eps");
1387 glMatrixMode(GL_MODELVIEW);
1389 glDisable(GL_TEXTURE_2D);
1390 glDisable(GL_ALPHA_TEST);
1391 glDisable(GL_BLEND);
1392 glEnable(GL_DEPTH_TEST);
1401 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
1403 const float minB[2] = { (float)viewPort.
xmin(), (float)viewPort.
ymin() };
1404 const float maxB[2] = { (float)viewPort.
xmax(), (float)viewPort.
ymax() };
1406 glEnable(GL_POLYGON_OFFSET_FILL);
1407 glEnable(GL_POLYGON_OFFSET_LINE);
1411 state = gl2psEndPage();
1417 return "Could not save '" + destFile +
"', gl2ps was not enabled at compile time.";
1425 FXMALLOC(&buf, FXColor, getWidth()*getHeight());
1427 glReadBuffer(GL_BACK);
1429 glReadPixels(0, 0, getWidth(), getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)buf);
1433 int mwidth = getWidth();
1434 int mheight = getHeight();
1436 FXColor* pbb = buf + mwidth * (mheight - 1);
1447 }
while (paa < pbb);
1453 errorMessage =
"video";
1454 }
catch (std::runtime_error& err) {
1455 errorMessage = err.what();
1460 errorMessage =
"Could not save '" + destFile +
"'.";
1463 errorMessage =
"Could not save '" + destFile +
"'.\n" + e.what();
1467 return errorMessage;
1481#ifdef DEBUG_SNAPSHOT
1482 std::cout <<
"check snapshots time=" << time <<
" registeredTimes=" <<
mySnapshots.size() <<
"\n";
1489 std::vector<std::tuple<std::string, int, int> > files = snapIt->second;
1492 for (
const auto& entry : files) {
1493#ifdef DEBUG_SNAPSHOT
1494 std::cout <<
"make snapshot time=" << time <<
" file=" << file <<
"\n";
1496 const std::string& error =
makeSnapshot(std::get<0>(entry), std::get<1>(entry), std::get<2>(entry));
1497 if (error !=
"" && error !=
"video") {
1505#ifdef DEBUG_SNAPSHOT
1506 std::cout <<
" files=" <<
toString(files) <<
" myApplicationSnapshots=" <<
joinToString(*myApplicationSnapshots,
",") <<
"\n";
1545 const FXint minSize = 100;
1546 const FXint minTitlebarHeight = 20;
1547 int x =
MAX2(0,
MIN2(getApp()->reg().readIntEntry(
1548 "VIEWPORT_DIALOG_SETTINGS",
"x", 150),
1549 getApp()->getRootWindow()->getWidth() - minSize));
1550 int y =
MAX2(minTitlebarHeight,
MIN2(getApp()->reg().readIntEntry(
1551 "VIEWPORT_DIALOG_SETTINGS",
"y", 150),
1552 getApp()->getRootWindow()->getHeight() - minSize));
1671 GDALDataset* poDataset = (GDALDataset*)GDALOpen(d.
filename.c_str(), GA_ReadOnly);
1672 if (poDataset == 0) {
1675 const int xSize = poDataset->GetRasterXSize();
1676 const int ySize = poDataset->GetRasterYSize();
1678 if (d.
width <= 0.) {
1679 double adfGeoTransform[6];
1680 if (poDataset->GetGeoTransform(adfGeoTransform) == CE_None) {
1681 Position topLeft(adfGeoTransform[0], adfGeoTransform[3]);
1682 const double horizontalSize = xSize * adfGeoTransform[1];
1683 const double verticalSize = ySize * adfGeoTransform[5];
1684 Position bottomRight(topLeft.
x() + horizontalSize, topLeft.
y() + verticalSize);
1686 d.
width = bottomRight.
x() - topLeft.
x();
1687 d.
height = topLeft.
y() - bottomRight.
y();
1688 d.
centerX = (topLeft.
x() + bottomRight.
x()) / 2;
1689 d.
centerY = (topLeft.
y() + bottomRight.
y()) / 2;
1697 if (d.
width <= 0.) {
1704 const int picSize = xSize * ySize;
1706 if (!FXMALLOC(&result, FXColor, picSize)) {
1710 for (
int j = 0; j < picSize; j++) {
1711 result[j] = FXRGB(0, 0, 0);
1714 for (
int i = 1; i <= poDataset->GetRasterCount(); i++) {
1715 GDALRasterBand* poBand = poDataset->GetRasterBand(i);
1717 if (poBand->GetColorInterpretation() == GCI_RedBand) {
1719 }
else if (poBand->GetColorInterpretation() == GCI_GreenBand) {
1721 }
else if (poBand->GetColorInterpretation() == GCI_BlueBand) {
1723 }
else if (poBand->GetColorInterpretation() == GCI_AlphaBand) {
1729 assert(xSize == poBand->GetXSize() && ySize == poBand->GetYSize());
1730 if (poBand->RasterIO(GF_Read, 0, 0, xSize, ySize, ((
unsigned char*)result) + shift, xSize, ySize, GDT_Byte, 4, 4 * xSize) == CE_Failure) {
1735 GDALClose(poDataset);
1737 return new FXImage(getApp(), result, IMAGE_OWNED | IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP, xSize, ySize);
1753 if (!d.initialised) {
1756 if (img ==
nullptr) {
1761 d.initialised =
true;
1764 WRITE_ERROR(
"Could not load '" + d.filename +
"'.\n" + e.what());
1769 if (d.screenRelative) {
1771 glTranslated(center.
x(), center.
y(), d.layer);
1773 glTranslated(d.centerX, d.centerY, d.layer);
1775 glRotated(d.rot, 0, 0, 1);
1777 double halfWidth = d.width / 2.;
1778 double halfHeight = d.height / 2.;
1779 if (d.screenRelative) {
1780 halfWidth =
p2m(halfWidth);
1781 halfHeight =
p2m(halfHeight);
1795 myApp->getCursorPosition(x, y, b);
1796 int popX = x +
myApp->getX();
1797 int popY = y +
myApp->getY();
1803 const int rootWidth = getApp()->getRootWindow()->getWidth();
1804 const int rootHeight = getApp()->getRootWindow()->getHeight();
1805 if (popX <= rootWidth) {
1808 if (popY <= rootHeight) {
1860 glMatrixMode(GL_PROJECTION);
1865 glOrtho(0, getWidth(), 0, getHeight(), -
GLO_MAX - 1,
GLO_MAX + 1);
1866 glMatrixMode(GL_MODELVIEW);
1868 double scaleX = (double)getWidth() / bound.
getWidth();
1869 double scaleY = (double)getHeight() / bound.
getHeight();
1870 glScaled(scaleX, scaleY, 1);
1871 glTranslated(-bound.
xmin(), -bound.
ymin(), 0);
1923 screenRelative(false),
@ MID_GLCANVAS
GLCanvas - ID.
@ MID_REACHABILITY
show reachability from a given lane
@ MID_CLOSE_LANE
close lane
@ MID_CURSORDIALOG_FRONT
remove/select/mark front element
@ MID_CLOSE_EDGE
close edge
@ MID_SIMPLE_VIEW_COLORCHANGE
Informs the dialog about a value's change.
@ MID_ADD_REROUTER
add rerouter
GUICompleteSchemeStorage gSchemeStorage
@ MOVEVIEW
move view cursor
@ GLO_REROUTER_EDGE
a Rerouter over edge
@ GLO_ROUTEFLOW
a routeFlow
@ GLO_CONTAINER
a container
@ GLO_NETWORK
The network - empty.
@ GLO_CONTAINERFLOW
a person flow
@ GLO_PERSONFLOW
a person flow
GUISelectedStorage gSelected
A global holder of selected objects.
FXDEFMAP(GUISUMOAbstractView) GUISUMOAbstractViewMap[]
#define WRITE_WARNING(msg)
const double SUMO_const_laneWidth
#define UNUSED_PARAMETER(x)
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
A class that stores a 2D geometrical boundary.
Position getCenter() const
Returns the center of the boundary.
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
double ymin() const
Returns minimum y-coordinate.
double xmin() const
Returns minimum x-coordinate.
Boundary & grow(double by)
extends the boundary by the given amount
double getHeight() const
Returns the height of the boundary (y-axis)
double getWidth() const
Returns the width of the boudary (x-axis)
double ymax() const
Returns maximum y-coordinate.
double xmax() const
Returns maximum x-coordinate.
static void resetVertexCounter()
reset vertex counter
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
static void pushName(unsigned int name)
push Name
static void checkCounterMatrix()
check counter matrix (for debug purposes)
static void popMatrix()
pop matrix
static int getMatrixCounter()
get matrix counter
static void checkCounterName()
check counter name (for debug purposes)
static void popName()
pop Name
static void pushMatrix()
push matrix
static void setGL2PS(bool active=true)
set GL2PS
static int getVertexCounter()
get vertex counter
static void drawText(const std::string &text, const Position &pos, const double layer, const double size, const RGBColor &col=RGBColor::BLACK, const double angle=0, const int align=0, double width=-1)
static void resetMatrixCounter()
reset matrix counter
GUIVisualizationSettings & getDefault()
Returns the default scheme.
void saveViewport(const double x, const double y, const double z, const double rot)
Makes the given viewport the default.
const std::vector< GUISUMOAbstractView::Decal > & getDecals()
Returns the default decals.
void setDefault(const std::string &name)
Makes the scheme with the given name the default.
void saveDecals(const std::vector< GUISUMOAbstractView::Decal > &decals)
Makes the given decals the default.
void setViewport(GUISUMOAbstractView *view)
Sets the default viewport.
Dialog for edit rerouter intervals.
static FXCursor * getCursor(GUICursor which)
returns a cursor previously defined in the enum GUICursor
A dialog to change the viewport.
void setOldValues(const Position &lookFrom, const Position &lookAt, double rotation)
Resets old values.
bool haveGrabbed() const
Returns the information whether one of the spin dialers is grabbed.
void setValues(double zoom, double xoff, double yoff, double rotation)
Sets the given values into the dialog.
void show()
overload show function to focus always in OK Button
The dialog to change the view (gui) settings.
void show()
show view settings dialog
void setCurrent(GUIVisualizationSettings *settings)
Sets current settings (called if reopened)
FXComboBox * getColoringSchemesCombo()
return combobox with the current coloring schemes (standard, fastest standard, real world....
GUIMainWindow * getParent()
Returns the main window.
static const GUIGlID INVALID_ID
virtual double getClickPriority() const
Returns the priority of receiving mouse clicks.
virtual Boundary getCenteringBoundary() const =0
virtual void onLeftBtnPress(void *)
notify object about left click
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
GUIGlID getGlID() const
Returns the numerical id of the object.
void unblockObject(GUIGlID id)
Marks an object as unblocked.
GUIGlObject * getNetObject() const
Returns the network object.
GUIGlObject * getObjectBlocking(GUIGlID id) const
Returns the object from the container locking it.
static GUIGlObjectStorage gIDStorage
A single static instance of this class.
Representation of a lane in the micro simulation (gui-version)
MFXStaticToolTip * getStaticTooltipView() const
get static toolTip for view
virtual double getDelay() const
Returns the delay (should be overwritten by subclasses if applicable)
FXLabel * getGeoLabel()
get geo label
bool isGaming() const
return whether the gui is in gaming mode
virtual void setBreakpoints(const std::vector< SUMOTime > &)
Sets the breakpoints of the parent application.
FXLabel * getTestLabel()
get test label
virtual void setStatusBarText(const std::string &)
get status bar text (can be implemented in children)
virtual void setDelay(double)
Sets the delay of the parent application.
FXLabel * getCartesianLabel()
get cartesian label
virtual void setViewportFrom(double xPos, double yPos, double zPos)=0
Alternative method for setting the viewport.
virtual long onKeyPress(void *data)
called when user press a key
virtual void setRotation(double rotation)=0
Sets the rotation.
virtual void onRightBtnPress(void *data)
called when user press right button
virtual void centerTo(const Position &pos, double radius, bool applyZoom=true)=0
Centers the view to the given position, setting it to a size that covers the radius....
virtual double getRotation() const =0
Returns the rotation of the canvas stored in this changer.
virtual bool onLeftBtnRelease(void *data)
called when user releases left button
virtual double getZoom() const =0
Returns the zoom factor computed stored in this changer.
virtual void onLeftBtnPress(void *data)
mouse functions
virtual bool onMiddleBtnRelease(void *data)
called when user releases middle button
virtual double getXPos() const =0
Returns the x-offset of the field to show stored in this changer.
virtual double getYPos() const =0
Returns the y-offset of the field to show stored in this changer.
virtual void onMiddleBtnPress(void *data)
called when user press middle button
virtual long onKeyRelease(void *data)
called when user releases a key
virtual void onMouseMove(void *data)
called when user moves mouse
virtual double getZPos() const =0
Returns the camera height corresponding to the current zoom factor.
virtual void onMouseWheel(void *data)
called when user changes mouse wheel
virtual bool onRightBtnRelease(void *data)
called when user releases right button
Boundary getViewport(bool fixRatio=true)
get viewport
virtual void setViewport(double zoom, double xPos, double yPos)=0
Sets the viewport Used for: Adapting a new viewport.
const std::vector< double > & getThresholds() const
const std::vector< std::string > & getNames() const
const std::vector< T > & getColors() const
void paintGLGrid()
paints a grid
bool myAmInitialised
Internal information whether doInit() was called.
Position snapToActiveGrid(const Position &pos, bool snapXY=true) const
Returns a position that is mapped to the closest grid point if the grid is active.
std::vector< GUIGlObject * > myCurrentObjectsDialog
vector with current objects dialog
std::string makeSnapshot(const std::string &destFile, const int w=-1, const int h=-1)
Takes a snapshots and writes it into the given file.
void updateToolTip()
A method that updates the tooltip.
void addDecals(const std::vector< Decal > &decals)
add decals
virtual void checkSnapshots()
Checks whether it is time for a snapshot.
void showViewschemeEditor()
show viewsscheme editor
static const double SENSITIVITY
virtual long onLeftBtnRelease(FXObject *, FXSelector, void *)
FXMutex myDecalsLock
The mutex to use before accessing the decals list in order to avoid thread conflicts.
void displayLegend()
Draws a line with ticks, and the length information.
virtual long onVisualizationChange(FXObject *, FXSelector, void *)
hook to react on change in visualization settings
std::vector< GUIGlObject * > getGUIGlObjectsUnderCursor()
returns the GUIGlObject under the cursor using GL_SELECT (including overlapped objects)
long myFrameDrawTime
counter for measuring rendering time
void openObjectDialog(const std::vector< GUIGlObject * > &objects)
open object dialog for the given object
void replacePopup(GUIGLObjectPopupMenu *popUp)
replace PopUp
std::vector< GUIGlID > getObjectsAtPosition(Position pos, double radius)
returns the ids of the object at position within the given (rectangular) radius using GL_SELECT
const SUMORTree * myGrid
The visualization speed-up.
virtual void saveFrame(const std::string &destFile, FXColor *buf)
Adds a frame to a video snapshot which will be initialized if necessary.
virtual void recenterView()
recenters the view
virtual SUMOTime getCurrentTimeStep() const
get the current simulation time
GUIDialog_ViewSettings * myVisualizationChanger
Visualization changer.
std::vector< GUIGlID > getObjectsInBoundary(Boundary bound, bool singlePosition)
returns the ids of all objects in the given boundary
FXbool makeCurrent()
A reimplementation due to some internal reasons.
int myMouseHotspotX
Offset to the mouse-hotspot from the mouse position.
std::vector< GUIGlObject * > filterInernalLanes(const std::vector< GUIGlObject * > &objects) const
filter internal lanes in Objects under cursor
GUIMainWindow * getMainWindow() const
get main window
bool isInEditMode()
returns true, if the edit button was pressed
virtual long onMiddleBtnRelease(FXObject *, FXSelector, void *)
virtual long onMouseMove(FXObject *, FXSelector, void *)
GUIDialog_EditViewport * myViewportChooser
viewport chooser
bool myPanning
Panning flag.
bool isAdditionalGLVisualisationEnabled(GUIGlObject *const which) const
Check if an object is added in the additional GL visualitation.
FXCondition mySnapshotCondition
the semaphore when waiting for snapshots to finish
Position myPopupPosition
The current popup-menu position.
virtual void doInit()
doInit
FXint myWindowCursorPositionY
virtual long onCmdCloseEdge(FXObject *, FXSelector, void *)
virtual int doPaintGL(int, const Boundary &)
paint GL
virtual void showViewportEditor()
show viewport editor
const GUIVisualizationSettings & getVisualisationSettings() const
get visualization settings (read only)
void setDelay(double delay)
Sets the delay of the parent application.
Boundary getVisibleBoundary() const
get visible boundary
Position screenPos2NetPos(int x, int y) const
Translate screen position to network position.
void addSnapshot(SUMOTime time, const std::string &file, const int w=-1, const int h=-1)
Sets the snapshot time to file map.
GUIGlID getObjectUnderCursor()
returns the id of the front object under the cursor using GL_SELECT
GUIPerspectiveChanger & getChanger() const
get changer
virtual void centerTo(GUIGlID id, bool applyZoom, double zoomDist=20)
centers to the chosen artifact
GUIMainWindow * myApp
The application.
GUIDialog_EditViewport * getViewportEditor()
get the viewport and create it on first access
virtual void zoom2Pos(Position &camera, Position &lookAt, double zoom)
zoom interface for 3D view
virtual long onCmdCloseLane(FXObject *, FXSelector, void *)
interaction with the simulation
void drawFPS()
Draws frames-per-second indicator.
virtual long onMouseWheel(FXObject *, FXSelector, void *)
double getGridWidth() const
get grid width
bool removeAdditionalGLVisualisation(GUIGlObject *const which)
Removes an object from the list of objects that show additional things.
double getDelay() const
Returns the delay of the parent application.
virtual void updatePositionInformationLabel() const
update position information labels
std::vector< GUIGlObject * > getGUIGlObjectsAtPosition(Position pos, double radius)
returns the GUIGlObjects at position within the given (rectangular) radius using GL_SELECT
virtual long onLeftBtnPress(FXObject *, FXSelector, void *)
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
double p2m(double pixel) const
pixels-to-meters conversion method
std::vector< Decal > myDecals
const Position & getPopupPosition() const
get position of current popup
double m2p(double meter) const
meter-to-pixels conversion method
virtual GUILane * getLaneUnderCursor()
returns the GUILane at cursor position (implementation depends on view)
virtual void openObjectDialogAtCursor(const FXEvent *ev)
open object dialog at the cursor position
virtual void onGamingClick(Position)
on gaming click
bool myInEditMode
Information whether too-tip informations shall be generated.
GUIVisualizationSettings * editVisualisationSettings() const
edit visualization settings (allow modify VisualizationSetings, use carefully)
GUIVisualizationSettings * myVisualizationSettings
visualization settings
void destroyPopup()
destroys the popup
Position getWindowCursorPosition() const
return windows cursor position
virtual long onKeyPress(FXObject *o, FXSelector sel, void *data)
keyboard functions
virtual long onMiddleBtnPress(FXObject *, FXSelector, void *)
void paintGL()
FOX needs this.
virtual void stopTrack()
stop track
virtual Position getPositionInformation() const
Returns the cursor's x/y position within the network.
GUIGlID getObjectAtPosition(Position pos)
returns the id of the object at position using GL_SELECT
std::vector< GUIGlObject * > getGUIGlObjectsUnderSnappedCursor()
returns the GUIGlObject under the gripped cursor using GL_SELECT (including overlapped objects)
bool showToolTipFor(const GUIGlID idToolTip)
invokes the tooltip for the given object
virtual long onKeyRelease(FXObject *o, FXSelector sel, void *data)
virtual void onGamingRightClick(Position)
void setWindowCursorPosition(FXint x, FXint y)
Returns the gl-id of the object under the given coordinates.
double getFPS() const
retrieve FPS
virtual long onCmdShowReachability(FXObject *, FXSelector, void *)
highlight edges according to reachability
std::map< GUIGlObject *, int > myAdditionallyDrawn
List of objects for which GUIGlObject::drawGLAdditional is called.
void drawDecals()
Draws the stored decals.
std::vector< GUIGlID > getObjectsUnderCursor()
returns the id of the objects under the cursor using GL_SELECT (including overlapped objects)
Boundary applyGLTransform(bool fixRatio=true)
applies gl-transformations to fit the Boundary given by myChanger onto the canvas....
virtual void updateViewportValues()
update the viewport chooser with the current view values
FXImage * checkGDALImage(Decal &d)
check whether we can read image data or position with gdal
double getGridHeight() const
get grid height
virtual void startTrack(int)
star track
virtual long onDoubleClicked(FXObject *, FXSelector, void *)
virtual bool is3DView() const
return whether this is a 3D view
void displayLegends()
Draws the configured legends.
void displayColorLegend(const GUIColorScheme &scheme, bool leftSide)
Draws a legend for the given scheme.
FXMutex mySnapshotsMutex
The mutex to use before accessing the decals list in order to avoid thread conflicts.
virtual long onMouseLeft(FXObject *, FXSelector, void *)
virtual long onRightBtnRelease(FXObject *, FXSelector, void *)
FXint myWindowCursorPositionX
Position of the cursor relative to the window.
GUIPerspectiveChanger * myChanger
The perspective changer.
GUIGLObjectPopupMenu * myPopup
The current popup-menu.
virtual void copyViewportTo(GUISUMOAbstractView *view)
copy the viewport to the given view
void setBreakpoints(const std::vector< SUMOTime > &breakpoints)
Sets the breakpoints of the parent application.
FXComboBox * getColoringSchemesCombo()
get coloring schemes combo
void waitForSnapshots(const SUMOTime snapshotTime)
bool addAdditionalGLVisualisation(GUIGlObject *const which)
Adds an object to call its additional visualisation method.
virtual bool setColorScheme(const std::string &)
set color scheme
GUIGlChildWindow * myParent
The parent window.
virtual long onCmdAddRerouter(FXObject *, FXSelector, void *)
virtual long onPaint(FXObject *, FXSelector, void *)
virtual long onRightBtnPress(FXObject *, FXSelector, void *)
virtual ~GUISUMOAbstractView()
destructor
virtual long onConfigure(FXObject *, FXSelector, void *)
mouse functions
std::map< SUMOTime, std::vector< std::tuple< std::string, int, int > > > mySnapshots
Snapshots.
void remove(GUIDialog_EditViewport *)
remove viewport
virtual GUIGlID getTrackedID() const
get tracked id
void openPopupDialog()
open popup dialog
void toggleSelection(GUIGlID id)
Toggles selection of an object.
static void drawTexturedBox(int which, double size)
Draws a named texture as a box with the given size.
static GUIGlID add(FXImage *i)
Adds a texture to use.
static int getMaxTextureSize()
return maximum number of pixels in x and y direction
Stores the information about how to visualize structures.
RGBColor backgroundColor
The background color to use.
static const double MISSING_DATA
bool dither
Information whether dithering shall be enabled.
GUIColorer vehicleColorer
The vehicle colorer.
bool drawForRectangleSelection
whether drawing is performed for the purpose of selecting objects using a rectangle
GUIVisualizationSizeSettings addSize
std::string name
The name of this setting.
bool drawJunctionShape
whether the shape of the junction should be drawn
bool drawForPositionSelection
whether drawing is performed for the purpose of selecting objects with a single click
bool gaming
whether the application is in gaming mode or not
bool fps
Information whether frames-per-second should be drawn.
bool showGrid
Information whether a grid shall be shown.
bool showVehicleColorLegend
Information whether the vehicle color legend shall be drawn.
double scale
information about a lane's width (temporary, used for a single view)
GUIColorScheme & getLaneEdgeScheme()
Returns the current lane (edge) coloring schme.
bool showSizeLegend
Information whether the size legend shall be drawn.
double gridXSize
Information about the grid spacings.
bool showColorLegend
Information whether the edge color legend shall be drawn.
double angle
The current view rotation angle.
static const GeoConvHelper & getFinal()
the coordinate transformation for writing the location element and for tracking the original coordina...
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
static GeoConvHelper & getProcessing()
the coordinate transformation to use for input conversion and processing
static FXImage * loadImage(FXApp *a, const std::string &file)
static FXbool scalePower2(FXImage *image, int maxSize=(2<< 29))
static FXbool saveImage(const std::string &file, int width, int height, FXColor *data)
static void sleep(long ms)
A point in 2D or 3D with translation and scaling methods.
void setx(double x)
set position x
void set(double x, double y)
set positions x and y
static const Position INVALID
used to indicate that a position is valid
double x() const
Returns the x-position.
void setz(double z)
set position z
Position rotateAround2D(double rad, const Position &origin)
rotate this position by rad around origin and return the result
double z() const
Returns the z-position.
void sety(double y)
set position y
double y() const
Returns the y-position.
static RGBColor interpolate(const RGBColor &minColor, const RGBColor &maxColor, double weight)
Interpolates between two colors.
static const RGBColor WHITE
unsigned char red() const
Returns the red-amount of the color.
unsigned char alpha() const
Returns the alpha-amount of the color.
unsigned char green() const
Returns the green-amount of the color.
unsigned char blue() const
Returns the blue-amount of the color.
static const RGBColor BLACK
static const RGBColor RED
named colors
A RT-tree for efficient storing of SUMO's GL-objects.
virtual int Search(const float a_min[2], const float a_max[2], const GUIVisualizationSettings &c) const
Find all within search rectangle.
static long getCurrentMillis()
Returns the current time in milliseconds.
NLOHMANN_BASIC_JSON_TPL_DECLARATION void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL &j1, nlohmann::NLOHMANN_BASIC_JSON_TPL &j2) noexcept(//NOLINT(readability-inconsistent-declaration-parameter-name) is_nothrow_move_constructible< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value &&//NOLINT(misc-redundant-expression) is_nothrow_move_assignable< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value)
exchanges the values of two JSON objects
A decal (an image) that can be shown.
double centerX
The center of the image in x-direction (net coordinates, in m)
double height
The height of the image (net coordinates in y-direction, in m)
double width
The width of the image (net coordinates in x-direction, in m)
double centerY
The center of the image in y-direction (net coordinates, in m)
std::string filename
The path to the file the image is located at.
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values