diff --git a/src/translations/Dyt_zh_CN.ts b/src/translations/Dyt_zh_CN.ts index e6954a86..d28efc6e 100644 --- a/src/translations/Dyt_zh_CN.ts +++ b/src/translations/Dyt_zh_CN.ts @@ -1270,18 +1270,18 @@ QtOsgViewWidget - - + + warning 警告 - + default workspace failed - + open dyt file failed diff --git a/src/viewer/QtOsgViewWidget.cpp b/src/viewer/QtOsgViewWidget.cpp index afd9caad..a57a24a0 100644 --- a/src/viewer/QtOsgViewWidget.cpp +++ b/src/viewer/QtOsgViewWidget.cpp @@ -33,142 +33,6 @@ #include "ui/MainFrame.h" -double normalizeScaleMeters(double meters) { - if (meters <= 3) { - meters = 1; - } else if (meters <= 7.5) { - meters = 5; - } else if (meters <= 15) { - meters = 10; - } else if (meters <= 35) { - meters = 20; - } else if (meters <= 75) { - meters = 50; - } else if (meters <= 150) { - meters = 100; - } else if (meters <= 350) { - meters = 200; - } else if (meters <= 750) { - meters = 500; - } else if (meters <= 1500) { - meters = 1000; - } else if (meters <= 3500) { - meters = 2000; - } else if (meters <= 7500) { - meters = 5000; - } else if (meters <= 15000) { - meters = 10000; - } else if (meters <= 35000) { - meters = 20000; - } else if (meters <= 55000) { - meters = 50000; - } else if (meters <= 150000) { - meters = 100000; - } else if (meters <= 350000) { - meters = 200000; - } else if (meters <= 750000) { - meters = 500000; - } else if (meters <= 1500000) { - meters = 1000000; - } else { - meters = 2000000; - } - return meters; -} - -double normalizeScaleFeet(double feet) { - double feetPerMile = 5280.0; - if (feet <= 7.5) { - feet = 5; - } else if (feet <= 15) { - feet = 10; - } else if (feet <= 35) { - feet = 20; - } else if (feet <= 75) { - feet = 50; - } else if (feet <= 150) { - feet = 100; - } else if (feet <= 350) { - feet = 200; - } else if (feet <= 750) { - feet = 500; - } else if (feet <= 1500) { - feet = 1000; - } else if (feet <= 3640) { - feet = 2000; - } else if (feet <= 1.5 * feetPerMile) { - feet = 1 * feetPerMile; - } else if (feet <= 3.5 * feetPerMile) { - feet = 2 * feetPerMile; - } else if (feet <= 7.5 * feetPerMile) { - feet = 5 * feetPerMile; - } else if (feet <= 15 * feetPerMile) { - feet = 10 * feetPerMile; - } else if (feet <= 35 * feetPerMile) { - feet = 20 * feetPerMile; - } else if (feet <= 75 * feetPerMile) { - feet = 50 * feetPerMile; - } else if (feet <= 150 * feetPerMile) { - feet = 100 * feetPerMile; - } else if (feet <= 350 * feetPerMile) { - feet = 200 * feetPerMile; - } else if (feet <= 750 * feetPerMile) { - feet = 500 * feetPerMile; - } else if (feet <= 1500 * feetPerMile) { - feet = 1000 * feetPerMile; - } else { - feet = 2000 * feetPerMile; - } - return feet; -} - -double normalizeScaleNauticalMiles(double nmi) { - //double feetPerMile = 6076.12; - if (nmi <= 0.0015) { - nmi = 0.001; - } else if (nmi <= 0.0035) { - nmi = 0.002; - } else if (nmi <= 0.0075) { - nmi = 0.005; - } else if (nmi <= 0.015) { - nmi = 0.01; - } else if (nmi <= 0.035) { - nmi = 0.02; - } else if (nmi <= 0.075) { - nmi = 0.05; - } else if (nmi <= 0.15) { - nmi = 0.1; - } else if (nmi <= 0.35) { - nmi = 0.2; - } else if (nmi <= 0.75) { - nmi = 0.5; - } else if (nmi <= 1.5) { - nmi = 1; - } else if (nmi <= 3.5) { - nmi = 2; - } else if (nmi <= 7.5) { - nmi = 5; - } else if (nmi <= 15) { - nmi = 10; - } else if (nmi <= 35) { - nmi = 20; - } else if (nmi <= 75) { - nmi = 50; - } else if (nmi <= 150) { - nmi = 100; - } else if (nmi <= 350) { - nmi = 200; - } else if (nmi <= 750) { - nmi = 500; - } else if (nmi <= 1500) { - nmi = 1000; - } else { - nmi = 2000; - } - return nmi; -} - - QtOsgViewWidget::QtOsgViewWidget(QWidget* parent) : QWidget(parent) { LOG_INFO("actor, self={}", fmt::ptr(this)); @@ -196,108 +60,6 @@ void QtOsgViewWidget::keyReleaseEvent(QKeyEvent* event) { view_->KeyRelease(event); } -void QtOsgViewWidget::OnComputeScale() { - osgEarth::MapNode* mapNode = activeScene_->GetMapNode(); - if (nullptr == mapNode || nullptr == mapNode->getTerrain()) { - return; - } - dyt_check(nullptr != view_); - - float x = 0.0f, y = 0.0f; - osg::Vec3d world1, world2; - if (!mapNode->getTerrain()->getWorldCoordsUnderMouse(view_->GetView(), x, y, world1)) { - emit signalScaleInfo(""); - return; - } - x += devicePixelRatio_; - if (!mapNode->getTerrain()->getWorldCoordsUnderMouse(view_->GetView(), x, y, world2)) { - emit signalScaleInfo(""); - return; - } - -#if 0 - TRACE("w1: %g %g %g w2: %g %g %g", - world1.x(), world1.y(), world1.z(), - world2.x(), world2.y(), world2.z()); -#endif - - double meters; - double radius = 6378137.0; - dyt_check(nullptr != g_srs_); - radius = g_srs_->getEllipsoid().getRadiusEquator(); - - if (!g_srs_->isGeocentric() ) { - // TRACE("Map is geographic"); - // World cords are already lat/long - // Compute great circle distance - meters = osgEarth::GeoMath::distance(world1, world2, g_srs_); - } else { - osgEarth::GeoPoint mapPoint1, mapPoint2; - mapPoint1.fromWorld(g_srs_, world1); - mapPoint1.makeGeographic(); - mapPoint2.fromWorld(g_srs_, world2); - mapPoint2.makeGeographic(); - // Compute great circle distance - meters = osgEarth::GeoMath::distance(osg::DegreesToRadians(mapPoint1.y()), - osg::DegreesToRadians(mapPoint1.x()), - osg::DegreesToRadians(mapPoint2.y()), - osg::DegreesToRadians(mapPoint2.x()), - radius); - } - - double scale = meters / devicePixelRatio_; - double pixelWidth = devicePixelRatio_ * 2.0; - // 1mi = 5280 feet - //double scaleMiles = scale / 1609.344; // International mile = 1609.344m - //double scaleNauticalMiles = scale / 1852.0; // nautical mile = 1852m - //double scaleUSSurveyMiles = scale / 1609.347218694; // US survey mile = 5280 US survey feet - //double scaleUSSurveyFeet = scale * 3937.0/1200.0; // US survey foot = 1200/3937 m -#if 0 - TRACE("m: %g px: %g m/px: %g", meters, pixelWidth, scale); -#endif - switch (scaleUnits_) { - case ScaleBarHandler::Delegate::Units::UNITS_NAUTICAL_MILES: { - double nmi = meters / 1852.0; - scale = nmi / devicePixelRatio_; - nmi = normalizeScaleNauticalMiles(nmi); - pixelWidth = nmi / scale; - emit signalScaleInfo(QString("%1 nmi").arg(nmi)); - } break; - case ScaleBarHandler::Delegate::Units::UNITS_US_SURVEY_FEET: { - double feet = meters * 3937.0 / 1200.0; - scale = feet / pixelWidth; - feet = normalizeScaleFeet(feet); - pixelWidth = feet / scale; - if (feet >= 5280) { - emit signalScaleInfo(QString("%1 miUS").arg(feet / 5280.0)); - } else { - emit signalScaleInfo(QString("%1 ftUS").arg(feet)); - } - } break; - case ScaleBarHandler::Delegate::Units::UNITS_INTL_FEET: { - double feet = 5280.0 * meters / 1609.344; - scale = feet / pixelWidth; - feet = normalizeScaleFeet(feet); - pixelWidth = feet / scale; - if (feet >= 5280) { - emit signalScaleInfo(QString("%1 mi").arg(feet / 5280.0)); - } else { - emit signalScaleInfo(QString("%1 ft").arg(feet)); - } - } break; - case ScaleBarHandler::Delegate::Units::UNITS_METERS: - default: { - meters = normalizeScaleMeters(meters); - pixelWidth = meters / scale; - if (meters >= 1000) { - emit signalScaleInfo(QString("%1 km").arg(meters * 0.001)); - } else { - emit signalScaleInfo(QString("%1 m").arg(meters)); - } - } break; - } -} - void QtOsgViewWidget::Initialize(void) { if (view_) { LOG_INFO("view is created"); diff --git a/src/viewer/QtOsgViewWidget.h b/src/viewer/QtOsgViewWidget.h index 9c2031f6..583420f5 100644 --- a/src/viewer/QtOsgViewWidget.h +++ b/src/viewer/QtOsgViewWidget.h @@ -13,7 +13,7 @@ class QKeyEvent; class QInputEvent; class QResizeEvent; -class QtOsgViewWidget : public QWidget, public ScaleBarHandler::Delegate { +class QtOsgViewWidget : public QWidget { Q_OBJECT public: explicit QtOsgViewWidget(QWidget* parent = nullptr); @@ -24,8 +24,6 @@ public: return nullptr; } - void OnComputeScale() override; - void Initialize(void); void Uninitialize(void);