File indexing completed on 2024-12-01 04:19:21
0001 /* 0002 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <map/scene/view.h> 0008 0009 #include <QTest> 0010 0011 using namespace KOSMIndoorMap; 0012 0013 class MapViewTest : public QObject 0014 { 0015 Q_OBJECT 0016 private Q_SLOTS: 0017 void testProjection() 0018 { 0019 View v; 0020 QCOMPARE(v.mapGeoToScene(OSM::Coordinate{0.0, 0.0}), QPointF(128.0, 128.0)); 0021 QCOMPARE(v.mapSceneToGeo(QPointF(128.0, 128.0)), OSM::Coordinate(0.0, 0.0)); 0022 QCOMPARE(v.mapGeoToScene(OSM::Coordinate{0.0, -180.0}), QPointF(0.0, 128.0)); 0023 QCOMPARE(v.mapSceneToGeo(QPointF(0.0, 128.0)), OSM::Coordinate(0.0, -180.0)); 0024 QCOMPARE(v.mapGeoToScene(OSM::Coordinate{0.0, 180.0}), QPointF(256.0, 128.0)); 0025 QCOMPARE(v.mapSceneToGeo(QPointF(256.0, 128.0)), OSM::Coordinate(0.0, 180.0)); 0026 0027 QCOMPARE(v.mapGeoToScene(OSM::Coordinate{90.0, 0.0}).toPoint().y(), 0); 0028 QCOMPARE(v.mapSceneToGeo(QPointF(0.0, 128.0)).latF(), 0.0); 0029 QCOMPARE(v.mapGeoToScene(OSM::Coordinate{85.0512, 0.0}).toPoint().y(), 0); 0030 QCOMPARE(v.mapSceneToGeo(QPointF(0.0, 0.0)).latF(), 85.0511287); 0031 QCOMPARE(v.mapGeoToScene(OSM::Coordinate{60.0, 0.0}).toPoint().y(), 74); 0032 QCOMPARE(v.mapGeoToScene(OSM::Coordinate{-60.0, 0.0}).toPoint().y(), 182); 0033 QCOMPARE(v.mapGeoToScene(OSM::Coordinate{-85.0512, 0.0}).toPoint().y(), 256.0); 0034 QCOMPARE(v.mapSceneToGeo(QPointF(0.0, 256.0)).latF(), -85.0511288); 0035 QCOMPARE(v.mapGeoToScene(OSM::Coordinate{-90.0, 0.0}).toPoint().y(), 256.0); 0036 0037 QCOMPARE(v.mapGeoToScene(OSM::BoundingBox{OSM::Coordinate{-90.0, -180.0}, OSM::Coordinate{90.0, 180.0}}).toRect(), QRect(0, 0, 256, 256)); 0038 QCOMPARE(v.mapGeoToScene(OSM::BoundingBox{OSM::Coordinate{0.0, 0.0}, OSM::Coordinate{90.0, 90.0}}).toRect(), QRect(128, 0, 64, 128)); 0039 } 0040 0041 void testViewport() 0042 { 0043 { 0044 View v; 0045 v.setScreenSize({100, 200}); 0046 v.setSceneBoundingBox(QRectF{QPointF{13.0, 52.0}, QPointF{14.0, 54.0}}); 0047 QCOMPARE(v.viewport(), QRectF(QPointF{13.0, 52.0}, QPointF{14.0, 54.0})); 0048 } { 0049 View v; 0050 v.setScreenSize({200, 100}); 0051 v.setSceneBoundingBox(QRectF(QPointF{13.0, 52.0}, QPointF{14.0, 54.0})); 0052 QCOMPARE(v.viewport(), QRectF(QPointF{13.0, 52.0}, QPointF{14.0, 52.5})); 0053 } { 0054 View v; 0055 v.setScreenSize({100, 100}); 0056 v.setSceneBoundingBox(QRectF(QPointF{13.0, 52.0}, QPointF{14.0, 54.0})); 0057 QCOMPARE(v.viewport(), QRectF(QPointF{13.0, 52.0}, QPointF{14.0, 53.0})); 0058 } 0059 } 0060 0061 void testTransform() 0062 { 0063 { 0064 View v; 0065 v.setScreenSize({100, 100}); 0066 v.setSceneBoundingBox(QRectF(QPointF{13.0, 53.0}, QPointF{14.0, 54.0})); 0067 QCOMPARE(v.sceneToScreenTransform().m11(), 100.0); 0068 QCOMPARE(v.sceneToScreenTransform().m22(), 100.0); 0069 QCOMPARE(v.sceneToScreenTransform().m31(), -1300.0); 0070 QCOMPARE(v.sceneToScreenTransform().m32(), -5300.0); 0071 } { 0072 View v; 0073 v.setScreenSize({100, 100}); 0074 v.setSceneBoundingBox(QRectF(QPointF{13.0, 52.0}, QPointF{15.0, 53.0})); 0075 QCOMPARE(v.sceneToScreenTransform().m11(), 100.0); 0076 QCOMPARE(v.sceneToScreenTransform().m22(), 100.0); 0077 QCOMPARE(v.sceneToScreenTransform().m31(), -1300.0); 0078 QCOMPARE(v.sceneToScreenTransform().m32(), -5200.0); 0079 } { 0080 View v; 0081 v.setScreenSize({100, 200}); 0082 v.setSceneBoundingBox(QRectF(QPointF{13.0, 52.0}, QPointF{13.1, 52.5})); 0083 QCOMPARE(v.sceneToScreenTransform().m11(), 1000.0); 0084 QCOMPARE(v.sceneToScreenTransform().m22(), 1000.0); 0085 QCOMPARE(v.sceneToScreenTransform().m31(), -13000.0); 0086 QCOMPARE(v.sceneToScreenTransform().m32(), -52000.0); 0087 } 0088 } 0089 0090 void testZoomLevel() 0091 { 0092 View v; 0093 v.setScreenSize({512, 256}); 0094 v.setSceneBoundingBox(QRectF(QPointF{-180.0, -90.0}, QPointF{180.0, 90.0})); 0095 QCOMPARE(v.zoomLevel(), 1.0); 0096 v.setScreenSize({1024, 512}); 0097 v.setSceneBoundingBox(QRectF(QPointF{-180.0, -90.0}, QPointF{180.0, 90.0})); 0098 QCOMPARE(v.zoomLevel(), 2.0); 0099 v.zoomIn({512, 256}); 0100 QCOMPARE(v.zoomLevel(), 3.0); 0101 v.zoomOut({512, 256}); 0102 QCOMPARE(v.zoomLevel(), 2.0); 0103 v.zoomOut({512, 256}); 0104 v.zoomOut({512, 256}); 0105 v.zoomOut({512, 256}); 0106 QCOMPARE(v.zoomLevel(), 2.0); 0107 } 0108 0109 void testPan() 0110 { 0111 View v; 0112 v.setScreenSize({512, 256}); 0113 v.setSceneBoundingBox(QRectF(QPointF{-180.0, -90.0}, QPointF{180.0, 90.0})); 0114 QCOMPARE(v.viewport(), QRectF(QPointF{-180.0, -90.0}, QPointF{180.0, 90.0})); 0115 v.zoomIn({256, 128}); 0116 v.panScreenSpace(QPoint(-10000, -10000)); 0117 QCOMPARE(v.viewport().left(), -180.0); 0118 QCOMPARE(v.viewport().top(), -90.0); 0119 v.panScreenSpace(QPoint(10000, 10000)); 0120 QCOMPARE(v.viewport().left(), 0.0); 0121 QCOMPARE(v.viewport().top(), 0.0); 0122 } 0123 }; 0124 0125 QTEST_GUILESS_MAIN(MapViewTest) 0126 0127 #include "mapviewtest.moc"