From 9f2bcb8d7235d74caeb342efa6b8c2067f639ad2 Mon Sep 17 00:00:00 2001 From: Jan Caha Date: Fri, 21 Feb 2025 15:40:01 +0100 Subject: [PATCH] move test to TestQgsMeshEditor --- tests/src/app/testqgsmaptooleditmesh.cpp | 73 ------------------------ tests/src/core/testqgsmesheditor.cpp | 62 +++++++++++++++++++- 2 files changed, 61 insertions(+), 74 deletions(-) diff --git a/tests/src/app/testqgsmaptooleditmesh.cpp b/tests/src/app/testqgsmaptooleditmesh.cpp index 0aed72d40379..3473b6ac19eb 100644 --- a/tests/src/app/testqgsmaptooleditmesh.cpp +++ b/tests/src/app/testqgsmaptooleditmesh.cpp @@ -47,7 +47,6 @@ class TestQgsMapToolEditMesh : public QgsTest void selectElements(); void testAssignVertexZValueFromTerrainOnCreation(); - void testAssignVertexZValueFromTerrainOnButtonClick(); void testDelaunayRefinement(); private: @@ -622,73 +621,6 @@ void TestQgsMapToolEditMesh::testAssignVertexZValueFromTerrainOnCreation() layer->rollBackFrameEditing( transform, false ); } -void TestQgsMapToolEditMesh::testAssignVertexZValueFromTerrainOnButtonClick() -{ - QgsCoordinateReferenceSystem crs3857; - crs3857.createFromString( "EPSG:3857" ); - - QString uri = QString( mDataDir + "/quad_and_triangle_with_free_vertices.2dm" ); - auto layer = std::make_unique( uri, "quad and triangle", "mdal" ); - layer->setCrs( crs3857 ); - QVERIFY( layer->isValid() ); - - QString rasterUri = QString( mDataDir + "/terrain_under_mesh.tif" ); - auto terrainLayer = std::make_unique( rasterUri, "terrain", "gdal" ); - terrainLayer->setCrs( crs3857 ); - QVERIFY( terrainLayer->isValid() ); - - auto terrain = std::make_unique(); - terrain->setLayer( terrainLayer.get() ); - - QgsProject::instance()->elevationProperties()->setTerrainProvider( terrain.release() ); - mCanvas->setLayers( QList() << layer.get() << terrainLayer.get() ); - mCanvas->setDestinationCrs( layer->crs() ); - - const QgsCoordinateTransform transform; - QgsMeshEditingError error; - layer->startFrameEditing( transform, error, false ); - QVERIFY( error == QgsMeshEditingError() ); - QVERIFY( layer->meshEditor() ); - - TestQgsMapToolAdvancedDigitizingUtils tool( mEditMeshMapTool ); - mCanvas->setCurrentLayer( layer.get() ); - mEditMeshMapTool->mActionDigitizing->trigger(); - - QList selectedVertices; - selectedVertices << 1 << 2 << 3; - - QgsPoint vertex; - - // test vertices prior to assignment from elevation provider - vertex = mEditMeshMapTool->mapVertex( 1 ); - QGSCOMPARENEAR( vertex.z(), 30, 0.01 ); - - vertex = mEditMeshMapTool->mapVertex( 2 ); - QGSCOMPARENEAR( vertex.z(), 40, 0.01 ); - - vertex = mEditMeshMapTool->mapVertex( 3 ); - QGSCOMPARENEAR( vertex.z(), 50, 0.01 ); - - mEditMeshMapTool->triggerTransformCoordinatesDockWidget( true ); - - // set selected vertices and press the button - mEditMeshMapTool->setSelectedVertices( selectedVertices, Qgis::SelectBehavior::SetSelection ); - mEditMeshMapTool->mTransformDockWidget->updateZValuesFromTerrain(); - - // test vertices after the assignment from elevation provider - vertex = mEditMeshMapTool->mapVertex( 1 ); - QGSCOMPARENEAR( vertex.z(), 18.244469, 0.000001 ); - - vertex = mEditMeshMapTool->mapVertex( 2 ); - QGSCOMPARENEAR( vertex.z(), 14.353244, 0.000001 ); - - vertex = mEditMeshMapTool->mapVertex( 3 ); - QGSCOMPARENEAR( vertex.z(), 54.627747, 0.000001 ); - - // remove edits - layer->rollBackFrameEditing( transform, false ); -} - void TestQgsMapToolEditMesh::selectElements() { QString uri = QString( mDataDir + "/quad_and_triangle_with_free_vertices.2dm" ); @@ -779,8 +711,6 @@ void TestQgsMapToolEditMesh::testDelaunayRefinement() QVERIFY( layer->commitFrameEditing( transform, false ) ); - QGSCOMPARELONGSTR( "edit_no_delaunay_refinement", "not_delaunay.2dm", TestQgsMapToolEditMesh::read2DMFileContent( copyDataPath1 ).toUtf8() ); - // editing with delaunay refinement mEditMeshMapTool->mWidgetActionDigitizing->mCheckBoxRefineNeighboringFaces->setChecked( true ); @@ -789,7 +719,6 @@ void TestQgsMapToolEditMesh::testDelaunayRefinement() layer = std::make_unique( copyDataPath2, "not delaunay", "mdal" ); layer->setCrs( crs3857 ); QVERIFY( layer->isValid() ); - layer->startFrameEditing( transform, error, false ); QVERIFY( error == QgsMeshEditingError() ); @@ -810,8 +739,6 @@ void TestQgsMapToolEditMesh::testDelaunayRefinement() QCOMPARE( layer->undoStack()->command( 0 )->text(), "Add vertex inside face with Delaunay refinement" ); QVERIFY( layer->commitFrameEditing( transform, false ) ); - - QGSCOMPARELONGSTR( "edit_delaunay_refinement", "delaunay.2dm", TestQgsMapToolEditMesh::read2DMFileContent( copyDataPath2 ).toUtf8() ); } QString TestQgsMapToolEditMesh::read2DMFileContent( const QString &filePath ) diff --git a/tests/src/core/testqgsmesheditor.cpp b/tests/src/core/testqgsmesheditor.cpp index 089c25a2097b..43cdfeebd3bb 100644 --- a/tests/src/core/testqgsmesheditor.cpp +++ b/tests/src/core/testqgsmesheditor.cpp @@ -25,7 +25,9 @@ #include "qgstransformeffect.h" #include "qgsmeshforcebypolylines.h" #include "qgslinestring.h" - +#include "qgsrasterlayer.h" +#include "qgsterrainprovider.h" +#include "qgsprojectelevationproperties.h" class TestQgsMeshEditor : public QObject { @@ -65,6 +67,8 @@ class TestQgsMeshEditor : public QObject void forceByLine(); void particularCases(); + + void testAssignVertexZValueFromTerrain(); }; @@ -2484,5 +2488,61 @@ void TestQgsMeshEditor::forceByLine() QCOMPARE( meshLayer->nativeMesh()->faceCount(), initialFaceCount + 31 ); } +void TestQgsMeshEditor::testAssignVertexZValueFromTerrain() +{ + QgsCoordinateReferenceSystem crs3857; + crs3857.createFromString( "EPSG:3857" ); + + QString uri = QString( mDataDir + "/quad_and_triangle_with_free_vertices.2dm" ); + auto layer = std::make_unique( uri, "quad and triangle", "mdal" ); + layer->setCrs( crs3857 ); + QVERIFY( layer->isValid() ); + + QString rasterUri = QString( mDataDir + "/terrain_under_mesh.tif" ); + auto terrainLayer = std::make_unique( rasterUri, "terrain", "gdal" ); + terrainLayer->setCrs( crs3857 ); + QVERIFY( terrainLayer->isValid() ); + + auto terrain = std::make_unique(); + terrain->setLayer( terrainLayer.get() ); + + QgsProject::instance()->elevationProperties()->setTerrainProvider( terrain.release() ); + + const QgsCoordinateTransform transform; + QgsMeshEditingError error; + layer->startFrameEditing( transform, error, false ); + + QList selectedVertices; + selectedVertices << 1 << 2 << 3; + + QgsMeshTransformVerticesByExpression transformVertex; + + transformVertex.setZFromTerrain( true ); + + // no input set + QVERIFY( !transformVertex.calculate( layer.get() ) ); + + transformVertex.setInputVertices( selectedVertices ); + + QVERIFY( transformVertex.calculate( layer.get() ) ); + + QGSCOMPARENEAR( transformVertex.mOldZValues.at( 0 ), 30, 0.1 ); + QGSCOMPARENEAR( transformVertex.mOldZValues.at( 1 ), 40, 0.1 ); + QGSCOMPARENEAR( transformVertex.mOldZValues.at( 2 ), 50, 0.1 ); + + QGSCOMPARENEAR( transformVertex.mNewZValues.at( 0 ), 18.244469, 0.000001 ); + QGSCOMPARENEAR( transformVertex.mNewZValues.at( 1 ), 14.353244, 0.000001 ); + QGSCOMPARENEAR( transformVertex.mNewZValues.at( 2 ), 54.627747, 0.000001 ); + + layer->meshEditor()->advancedEdit( &transformVertex ); + + QgsMesh &mesh = *layer->nativeMesh(); + + QGSCOMPARENEAR( mesh.vertices.at( 1 ).z(), 18.244469, 0.000001 ); + QGSCOMPARENEAR( mesh.vertices.at( 2 ).z(), 14.353244, 0.000001 ); + QGSCOMPARENEAR( mesh.vertices.at( 3 ).z(), 54.627747, 0.000001 ); + + layer->undoStack()->undo(); +} QGSTEST_MAIN( TestQgsMeshEditor ) #include "testqgsmesheditor.moc"