diff --git a/src/guisim/GUINet.cpp b/src/guisim/GUINet.cpp index 8d9265252af..4c0cf5096c9 100644 --- a/src/guisim/GUINet.cpp +++ b/src/guisim/GUINet.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -429,6 +430,9 @@ GUINet::getPopUpMenu(GUIMainWindow& app, buildCenterPopupEntry(ret); buildShowParamsPopupEntry(ret); buildPositionCopyEntry(ret, app); + if (GeoConvHelper::getFinal().usingGeoProjection()) { + GUIDesigns::buildFXMenuCommand(ret, "Copy view geo-boundary to clipboard", nullptr, ret, MID_COPY_VIEW_GEOBOUNDARY); + } return ret; } diff --git a/src/netedit/GNENet.cpp b/src/netedit/GNENet.cpp index e7791d570f6..5bdf7fabe67 100644 --- a/src/netedit/GNENet.cpp +++ b/src/netedit/GNENet.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -158,6 +159,9 @@ GNENet::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { buildPopupHeader(ret, app); buildCenterPopupEntry(ret); buildPositionCopyEntry(ret, app); + if (GeoConvHelper::getFinal().usingGeoProjection()) { + GUIDesigns::buildFXMenuCommand(ret, "Copy view geo-boundary to clipboard", nullptr, ret, MID_COPY_VIEW_GEOBOUNDARY); + } return ret; } diff --git a/src/utils/gui/globjects/GUIGLObjectPopupMenu.cpp b/src/utils/gui/globjects/GUIGLObjectPopupMenu.cpp index 5041df9c22d..1bf2b79d2ce 100644 --- a/src/utils/gui/globjects/GUIGLObjectPopupMenu.cpp +++ b/src/utils/gui/globjects/GUIGLObjectPopupMenu.cpp @@ -47,6 +47,7 @@ FXDEFMAP(GUIGLObjectPopupMenu) GUIGLObjectPopupMenuMap[] = { FXMAPFUNC(SEL_COMMAND, MID_COPY_EDGE_NAME, GUIGLObjectPopupMenu::onCmdCopyEdgeName), FXMAPFUNC(SEL_COMMAND, MID_COPY_CURSOR_POSITION, GUIGLObjectPopupMenu::onCmdCopyCursorPosition), FXMAPFUNC(SEL_COMMAND, MID_COPY_CURSOR_GEOPOSITION, GUIGLObjectPopupMenu::onCmdCopyCursorGeoPosition), + FXMAPFUNC(SEL_COMMAND, MID_COPY_VIEW_GEOBOUNDARY, GUIGLObjectPopupMenu::onCmdCopyViewGeoBoundary), FXMAPFUNC(SEL_COMMAND, MID_SHOW_GEOPOSITION_ONLINE, GUIGLObjectPopupMenu::onCmdShowCursorGeoPositionOnline), FXMAPFUNC(SEL_COMMAND, MID_SHOWPARS, GUIGLObjectPopupMenu::onCmdShowPars), FXMAPFUNC(SEL_COMMAND, MID_SHOWTYPEPARS, GUIGLObjectPopupMenu::onCmdShowTypePars), @@ -185,13 +186,28 @@ long GUIGLObjectPopupMenu::onCmdCopyCursorGeoPosition(FXObject*, FXSelector, void*) { Position pos = myNetworkPosition; GeoConvHelper::getFinal().cartesian2geo(pos); - // formated for pasting into google maps + // formatted for pasting into google maps const std::string posString = toString(pos.y(), gPrecisionGeo) + ", " + toString(pos.x(), gPrecisionGeo); GUIUserIO::copyToClipboard(*myParent->getApp(), posString); return 1; } +long +GUIGLObjectPopupMenu::onCmdCopyViewGeoBoundary(FXObject*, FXSelector, void*) { + const Boundary b = myParent->getVisibleBoundary(); + Position lowLeft(b.xmin(), b.ymin()); + GeoConvHelper::getFinal().cartesian2geo(lowLeft); + Position upRight(b.xmax(), b.ymax()); + GeoConvHelper::getFinal().cartesian2geo(upRight); + // formatted for usage with osmconvert + const std::string posString = toString(lowLeft.x(), gPrecisionGeo) + "," + toString(lowLeft.y(), gPrecisionGeo) + "," + + toString(upRight.x(), gPrecisionGeo) + "," + toString(upRight.y(), gPrecisionGeo); + GUIUserIO::copyToClipboard(*myParent->getApp(), posString); + return 1; +} + + long GUIGLObjectPopupMenu::onCmdShowCursorGeoPositionOnline(FXObject* item, FXSelector, void*) { FXMenuCommand* const mc = dynamic_cast(item); diff --git a/src/utils/gui/globjects/GUIGLObjectPopupMenu.h b/src/utils/gui/globjects/GUIGLObjectPopupMenu.h index 386ed58bf3b..9d4b04c5522 100644 --- a/src/utils/gui/globjects/GUIGLObjectPopupMenu.h +++ b/src/utils/gui/globjects/GUIGLObjectPopupMenu.h @@ -105,6 +105,9 @@ class GUIGLObjectPopupMenu : public FXMenuPane { /// @brief Called if the cursor geo-position shall be copied to clipboard long onCmdCopyCursorGeoPosition(FXObject*, FXSelector, void*); + /// @brief Called if the current geo-boundary shall be copied to clipboard + long onCmdCopyViewGeoBoundary(FXObject*, FXSelector, void*); + /// @brief Called if the cursor geo-position shall be shown online long onCmdShowCursorGeoPositionOnline(FXObject*, FXSelector, void*); diff --git a/src/utils/gui/windows/GUIAppEnum.h b/src/utils/gui/windows/GUIAppEnum.h index 2cb63f4447f..2aef33fff1e 100644 --- a/src/utils/gui/windows/GUIAppEnum.h +++ b/src/utils/gui/windows/GUIAppEnum.h @@ -456,6 +456,8 @@ enum { MID_COPY_CURSOR_POSITION, /// @brief Copy cursor geo-coordinate position - popup entry MID_COPY_CURSOR_GEOPOSITION, + /// @brief Copy view geo-coordinate boundary - popup entry + MID_COPY_VIEW_GEOBOUNDARY, /// @brief Show the cursor geo-coordinate position online in GeoHack - popup entry MID_SHOW_GEOPOSITION_ONLINE, /// @brief open additional dialog (used in netedit)