18
18
#include " qgslinestring.h"
19
19
#include " qgsmaplayerstylemanager.h"
20
20
#include " qgsmapthemecollection.h"
21
- #include " qgsmeshlayer.h"
22
- #include " qgsmeshrenderersettings.h"
23
21
#include " qgsproject.h"
24
22
#include " qgsrasterlayer.h"
25
23
#include " qgsrastershader.h"
34
32
#include " qgscameracontroller.h"
35
33
#include " qgsdemterraingenerator.h"
36
34
#include " qgsflatterraingenerator.h"
37
- #include " qgsmeshterraingenerator.h"
38
35
#include " qgsline3dsymbol.h"
39
36
#include " qgsoffscreen3dengine.h"
40
37
#include " qgspolygon3dsymbol.h"
41
38
#include " qgsrulebased3drenderer.h"
42
39
#include " qgsvectorlayer3drenderer.h"
43
- #include " qgsmeshlayer3drenderer.h"
44
40
#include " qgspoint3dsymbol.h"
45
41
#include " qgssymbollayer.h"
46
42
#include " qgsmarkersymbollayer.h"
47
- #include " qgsmaplayertemporalproperties.h"
48
43
#include " qgssymbol.h"
49
44
#include " qgssinglesymbolrenderer.h"
50
45
#include " qgsfillsymbollayer.h"
@@ -74,7 +69,6 @@ class TestQgs3DRendering : public QgsTest
74
69
void testFlatTerrain ();
75
70
void testDemTerrain ();
76
71
void testTerrainShading ();
77
- void testMeshTerrain ();
78
72
void testEpsg4978LineRendering ();
79
73
void testExtrudedPolygons ();
80
74
void testExtrudedPolygonsDataDefined ();
@@ -85,17 +79,13 @@ class TestQgs3DRendering : public QgsTest
85
79
void testBufferedLineRendering ();
86
80
void testBufferedLineRenderingWidth ();
87
81
void testMapTheme ();
88
- void testMesh ();
89
- void testMesh_datasetOnFaces ();
90
- void testMeshSimplified ();
91
82
void testRuleBasedRenderer ();
92
83
void testAnimationExport ();
93
84
void testBillboardRendering ();
94
85
void testInstancedRendering ();
95
86
void testFilteredFlatTerrain ();
96
87
void testFilteredDemTerrain ();
97
88
void testFilteredExtrudedPolygons ();
98
- void testFilteredMesh ();
99
89
void testDepthBuffer ();
100
90
void testAmbientOcclusion ();
101
91
void testDebugMap ();
@@ -111,10 +101,6 @@ class TestQgs3DRendering : public QgsTest
111
101
QgsRasterLayer *mLayerDtm = nullptr ;
112
102
QgsRasterLayer *mLayerRgb = nullptr ;
113
103
QgsVectorLayer *mLayerBuildings = nullptr ;
114
- QgsMeshLayer *mLayerMeshTerrain = nullptr ;
115
- QgsMeshLayer *mLayerMeshDataset = nullptr ;
116
- QgsMeshLayer *mLayerMeshSimplified = nullptr ;
117
-
118
104
};
119
105
120
106
/* *
@@ -208,36 +194,6 @@ void TestQgs3DRendering::initTestCase()
208
194
QgsVectorLayer3DRenderer *renderer3d = new QgsVectorLayer3DRenderer ( symbol3d );
209
195
mLayerBuildings ->setRenderer3D ( renderer3d );
210
196
211
- mLayerMeshTerrain = new QgsMeshLayer ( testDataPath ( " /mesh/quad_flower.2dm" ), " mesh" , " mdal" );
212
- QVERIFY ( mLayerMeshTerrain ->isValid () );
213
- mLayerMeshTerrain ->setCrs ( mLayerDtm ->crs () ); // this testing mesh does not have any CRS defined originally
214
- mProject ->addMapLayer ( mLayerMeshTerrain );
215
-
216
- mLayerMeshDataset = new QgsMeshLayer ( testDataPath ( " /mesh/quad_and_triangle.2dm" ), " mesh" , " mdal" );
217
- mLayerMeshDataset ->dataProvider ()->addDataset ( testDataPath ( " /mesh/quad_and_triangle_vertex_scalar.dat" ) );
218
- mLayerMeshDataset ->dataProvider ()->addDataset ( testDataPath ( " /mesh/quad_and_triangle_vertex_vector.dat" ) );
219
- mLayerMeshDataset ->dataProvider ()->addDataset ( testDataPath ( " /mesh/quad_and_triangle_els_face_scalar.dat" ) );
220
- QVERIFY ( mLayerMeshDataset ->isValid () );
221
- mLayerMeshDataset ->setCrs ( mLayerDtm ->crs () ); // this testing mesh does not have any CRS defined originally
222
- mLayerMeshDataset ->temporalProperties ()->setIsActive ( false );
223
- mLayerMeshDataset ->setStaticScalarDatasetIndex ( QgsMeshDatasetIndex ( 1 , 0 ) );
224
- mLayerMeshDataset ->setStaticVectorDatasetIndex ( QgsMeshDatasetIndex ( 2 , 0 ) );
225
- mProject ->addMapLayer ( mLayerMeshDataset );
226
-
227
- mLayerMeshSimplified = new QgsMeshLayer ( testDataPath ( " /mesh/trap_steady_05_3D.nc" ), " mesh" , " mdal" );
228
- mLayerMeshSimplified ->setCrs ( mProject ->crs () );
229
- QVERIFY ( mLayerMeshSimplified ->isValid () );
230
- mProject ->addMapLayer ( mLayerMeshSimplified );
231
-
232
- QgsMesh3DSymbol *symbolMesh3d = new QgsMesh3DSymbol;
233
- symbolMesh3d->setVerticalDatasetGroupIndex ( 0 );
234
- symbolMesh3d->setVerticalScale ( 10 );
235
- symbolMesh3d->setRenderingStyle ( QgsMesh3DSymbol::ColorRamp2DRendering );
236
- symbolMesh3d->setArrowsEnabled ( true );
237
- symbolMesh3d->setArrowsSpacing ( 300 );
238
- QgsMeshLayer3DRenderer *meshDatasetRenderer3d = new QgsMeshLayer3DRenderer ( symbolMesh3d );
239
- mLayerMeshDataset ->setRenderer3D ( meshDatasetRenderer3d );
240
-
241
197
mProject ->setCrs ( mLayerDtm ->crs () );
242
198
243
199
//
@@ -407,43 +363,6 @@ void TestQgs3DRendering::testTerrainShading()
407
363
QVERIFY ( imageCheck ( " shaded_terrain_no_layers" , " shaded_terrain_no_layers" , img3, QString (), 40 , QSize ( 0 , 0 ), 2 ) );
408
364
}
409
365
410
- void TestQgs3DRendering::testMeshTerrain ()
411
- {
412
- if ( !QgsTest::runFlakyTests () )
413
- QSKIP ( " This test is flaky and disabled on CI" );
414
-
415
- const QgsRectangle fullExtent = mLayerMeshTerrain ->extent ();
416
-
417
- Qgs3DMapSettings *map = new Qgs3DMapSettings;
418
- map->setCrs ( mProject ->crs () );
419
- map->setExtent ( fullExtent );
420
-
421
- QgsMeshTerrainGenerator *meshTerrain = new QgsMeshTerrainGenerator;
422
- meshTerrain->setCrs ( mProject ->crs (), mProject ->transformContext () );
423
- meshTerrain->setLayer ( mLayerMeshTerrain );
424
- map->setTerrainGenerator ( meshTerrain );
425
-
426
- QCOMPARE ( meshTerrain->heightAt ( 750 , 2500 , *map ), 500.0 );
427
-
428
- QgsOffscreen3DEngine engine;
429
- Qgs3DMapScene *scene = new Qgs3DMapScene ( *map, &engine );
430
- engine.setRootEntity ( scene );
431
-
432
- // look from the top
433
- scene->cameraController ()->setLookingAtPoint ( QgsVector3D ( 0 , 0 , 0 ), 3000 , 25 , 45 );
434
-
435
- // When running the test on Travis, it would initially return empty rendered image.
436
- // Capturing the initial image and throwing it away fixes that. Hopefully we will
437
- // find a better fix in the future.
438
- Qgs3DUtils::captureSceneImage ( engine, scene );
439
-
440
- QImage img = Qgs3DUtils::captureSceneImage ( engine, scene );
441
- delete scene;
442
- delete map;
443
-
444
- QVERIFY ( imageCheck ( " mesh_terrain_1" , " mesh_terrain_1" , img, QString (), 40 , QSize ( 0 , 0 ), 2 ) );
445
- }
446
-
447
366
void TestQgs3DRendering::testExtrudedPolygons ()
448
367
{
449
368
const QgsRectangle fullExtent = mLayerDtm ->extent ();
@@ -888,150 +807,6 @@ void TestQgs3DRendering::testMapTheme()
888
807
QVERIFY ( imageCheck ( " terrain_theme" , " terrain_theme" , img, QString (), 40 , QSize ( 0 , 0 ), 2 ) );
889
808
}
890
809
891
- void TestQgs3DRendering::testMesh ()
892
- {
893
- const QgsRectangle fullExtent = mLayerMeshDataset ->extent ();
894
-
895
- Qgs3DMapSettings *map = new Qgs3DMapSettings;
896
- map->setCrs ( mProject ->crs () );
897
- map->setExtent ( fullExtent );
898
- map->setLayers ( QList<QgsMapLayer *>() << mLayerMeshDataset );
899
- QgsPointLightSettings defaultLight;
900
- defaultLight.setIntensity ( 0.5 );
901
- defaultLight.setPosition ( QgsVector3D ( 0 , 1000 , 0 ) );
902
- map->setLightSources ( { defaultLight.clone () } );
903
-
904
- QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
905
- flatTerrain->setCrs ( map->crs () );
906
- map->setTerrainGenerator ( flatTerrain );
907
-
908
- QgsOffscreen3DEngine engine;
909
- Qgs3DMapScene *scene = new Qgs3DMapScene ( *map, &engine );
910
- engine.setRootEntity ( scene );
911
- scene->cameraController ()->setLookingAtPoint ( QgsVector3D ( 0 , 0 , 0 ), 3000 , 25 , 45 );
912
-
913
- Qgs3DUtils::captureSceneImage ( engine, scene );
914
- // When running the test on Travis, it would initially return empty rendered image.
915
- // Capturing the initial image and throwing it away fixes that. Hopefully we will
916
- // find a better fix in the future.
917
- QImage img = Qgs3DUtils::captureSceneImage ( engine, scene );
918
- delete scene;
919
- delete map;
920
-
921
- QVERIFY ( imageCheck ( " mesh3d" , " mesh3d" , img, QString (), 40 , QSize ( 0 , 0 ), 2 ) );
922
- }
923
-
924
- void TestQgs3DRendering::testMesh_datasetOnFaces ()
925
- {
926
- const QgsRectangle fullExtent = mLayerMeshDataset ->extent ();
927
-
928
- QgsMesh3DSymbol *symbolMesh3d = new QgsMesh3DSymbol;
929
- symbolMesh3d->setVerticalDatasetGroupIndex ( 3 );
930
- symbolMesh3d->setVerticalScale ( 10 );
931
- symbolMesh3d->setRenderingStyle ( QgsMesh3DSymbol::ColorRamp2DRendering );
932
- symbolMesh3d->setArrowsEnabled ( true );
933
- symbolMesh3d->setArrowsSpacing ( 300 );
934
- QgsMeshLayer3DRenderer *meshDatasetRenderer3d = new QgsMeshLayer3DRenderer ( symbolMesh3d );
935
- mLayerMeshDataset ->setRenderer3D ( meshDatasetRenderer3d );
936
-
937
- Qgs3DMapSettings *map = new Qgs3DMapSettings;
938
- map->setCrs ( mProject ->crs () );
939
- map->setExtent ( fullExtent );
940
- map->setLayers ( QList<QgsMapLayer *>() << mLayerMeshDataset );
941
- QgsPointLightSettings defaultLight;
942
- defaultLight.setIntensity ( 0.5 );
943
- defaultLight.setPosition ( QgsVector3D ( 0 , 1000 , 0 ) );
944
- map->setLightSources ( { defaultLight.clone () } );
945
-
946
- QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
947
- flatTerrain->setCrs ( map->crs () );
948
- map->setTerrainGenerator ( flatTerrain );
949
-
950
- QgsOffscreen3DEngine engine;
951
- Qgs3DMapScene *scene = new Qgs3DMapScene ( *map, &engine );
952
- engine.setRootEntity ( scene );
953
- scene->cameraController ()->setLookingAtPoint ( QgsVector3D ( 0 , 0 , 0 ), 3000 , 25 , 45 );
954
-
955
- Qgs3DUtils::captureSceneImage ( engine, scene );
956
- // When running the test on Travis, it would initially return empty rendered image.
957
- // Capturing the initial image and throwing it away fixes that. Hopefully we will
958
- // find a better fix in the future.
959
- QImage img = Qgs3DUtils::captureSceneImage ( engine, scene );
960
- delete scene;
961
- delete map;
962
-
963
- QVERIFY ( imageCheck ( " mesh3dOnFace" , " mesh3dOnFace" , img, QString (), 40 , QSize ( 0 , 0 ), 2 ) );
964
- }
965
-
966
- void TestQgs3DRendering::testMeshSimplified ()
967
- {
968
- if ( QgsTest::isCIRun () )
969
- {
970
- QSKIP ( " Intermittently fails on CI" );
971
- }
972
-
973
- QgsMeshSimplificationSettings simplificationSettings;
974
- simplificationSettings.setEnabled ( true );
975
- simplificationSettings.setReductionFactor ( 3 );
976
-
977
- QgsMeshRendererSettings settings;
978
- settings.setActiveScalarDatasetGroup ( 16 );
979
- settings.setActiveVectorDatasetGroup ( 6 );
980
- mLayerMeshSimplified ->setRendererSettings ( settings );
981
-
982
- const QgsRectangle fullExtent = mLayerMeshSimplified ->extent ();
983
- mLayerMeshSimplified ->setMeshSimplificationSettings ( simplificationSettings );
984
- mLayerMeshSimplified ->temporalProperties ()->setIsActive ( false );
985
- mLayerMeshSimplified ->setStaticScalarDatasetIndex ( QgsMeshDatasetIndex ( 16 , 5 ) );
986
- mLayerMeshSimplified ->setStaticVectorDatasetIndex ( QgsMeshDatasetIndex ( 6 , 5 ) );
987
-
988
- for ( int i = 0 ; i < 4 ; ++i )
989
- {
990
- Qgs3DMapSettings *map = new Qgs3DMapSettings;
991
- map->setCrs ( mProject ->crs () );
992
- map->setLayers ( QList<QgsMapLayer *>() << mLayerMeshSimplified );
993
- map->setExtent ( fullExtent );
994
-
995
- QgsMesh3DSymbol *symbolDataset = new QgsMesh3DSymbol;
996
- symbolDataset->setVerticalDatasetGroupIndex ( 11 );
997
- symbolDataset->setVerticalScale ( 1 );
998
- symbolDataset->setWireframeEnabled ( true );
999
- symbolDataset->setWireframeLineWidth ( 0.1 );
1000
- symbolDataset->setArrowsEnabled ( true );
1001
- symbolDataset->setArrowsSpacing ( 20 );
1002
- symbolDataset->setSingleMeshColor ( Qt::yellow );
1003
- symbolDataset->setLevelOfDetailIndex ( i );
1004
- QgsMeshLayer3DRenderer *meshDatasetRenderer3d = new QgsMeshLayer3DRenderer ( symbolDataset );
1005
- mLayerMeshSimplified ->setRenderer3D ( meshDatasetRenderer3d );
1006
-
1007
- QgsMeshTerrainGenerator *meshTerrain = new QgsMeshTerrainGenerator;
1008
- meshTerrain->setLayer ( mLayerMeshSimplified );
1009
- QgsMesh3DSymbol *symbol = new QgsMesh3DSymbol;
1010
- symbol->setWireframeEnabled ( true );
1011
- symbol->setWireframeLineWidth ( 0.1 );
1012
- symbol->setLevelOfDetailIndex ( i );
1013
- meshTerrain->setSymbol ( symbol );
1014
- map->setTerrainGenerator ( meshTerrain );
1015
-
1016
- QgsOffscreen3DEngine engine;
1017
- Qgs3DMapScene *scene = new Qgs3DMapScene ( *map, &engine );
1018
- engine.setRootEntity ( scene );
1019
-
1020
- // look from the top
1021
- scene->cameraController ()->setLookingAtPoint ( QgsVector3D ( 0 , 0 , 0 ), 1000 , 25 , 45 );
1022
-
1023
- // When running the test on Travis, it would initially return empty rendered image.
1024
- // Capturing the initial image and throwing it away fixes that. Hopefully we will
1025
- // find a better fix in the future.
1026
- Qgs3DUtils::captureSceneImage ( engine, scene );
1027
- QImage img = Qgs3DUtils::captureSceneImage ( engine, scene );
1028
- delete scene;
1029
- delete map;
1030
-
1031
- QVERIFY ( imageCheck ( QString ( " mesh_simplified_%1" ).arg ( i ), QString ( " mesh_simplified_%1" ).arg ( i ), img, QString (), 40 , QSize ( 0 , 0 ), 2 ) );
1032
- }
1033
- }
1034
-
1035
810
void TestQgs3DRendering::testRuleBasedRenderer ()
1036
811
{
1037
812
QgsPhongMaterialSettings materialSettings;
@@ -1456,51 +1231,6 @@ void TestQgs3DRendering::testFilteredExtrudedPolygons()
1456
1231
QVERIFY ( imageCheck ( " polygon3d_extrusion_filtered" , " polygon3d_extrusion_filtered" , img, QString (), 40 , QSize ( 0 , 0 ), 2 ) );
1457
1232
}
1458
1233
1459
- void TestQgs3DRendering::testFilteredMesh ()
1460
- {
1461
- const QgsRectangle fullExtent = mLayerMeshDataset ->extent ();
1462
- const QgsRectangle filteredExtent = QgsRectangle ( fullExtent.xMinimum (), fullExtent.yMinimum (),
1463
- fullExtent.xMinimum () + fullExtent.width () / 3.0 , fullExtent.yMinimum () + fullExtent.height () / 4.0 );
1464
-
1465
- QgsMesh3DSymbol *symbolMesh3d = new QgsMesh3DSymbol;
1466
- symbolMesh3d->setVerticalDatasetGroupIndex ( 0 );
1467
- symbolMesh3d->setVerticalScale ( 10 );
1468
- symbolMesh3d->setRenderingStyle ( QgsMesh3DSymbol::ColorRamp2DRendering );
1469
- symbolMesh3d->setArrowsEnabled ( true );
1470
- symbolMesh3d->setArrowsSpacing ( 300 );
1471
- QgsMeshLayer3DRenderer *meshDatasetRenderer3d = new QgsMeshLayer3DRenderer ( symbolMesh3d );
1472
- mLayerMeshDataset ->setRenderer3D ( meshDatasetRenderer3d );
1473
-
1474
- Qgs3DMapSettings *map = new Qgs3DMapSettings;
1475
- map->setCrs ( mProject ->crs () );
1476
- map->setExtent ( filteredExtent );
1477
- map->setLayers ( QList<QgsMapLayer *>() << mLayerMeshDataset );
1478
- QgsPointLightSettings defaultLight;
1479
- defaultLight.setIntensity ( 0.5 );
1480
- defaultLight.setPosition ( QgsVector3D ( 0 , 1000 , 0 ) );
1481
- map->setLightSources ( { defaultLight.clone () } );
1482
-
1483
- QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
1484
- flatTerrain->setCrs ( map->crs () );
1485
- map->setTerrainGenerator ( flatTerrain );
1486
-
1487
- QgsOffscreen3DEngine engine;
1488
- Qgs3DMapScene *scene = new Qgs3DMapScene ( *map, &engine );
1489
- engine.setRootEntity ( scene );
1490
- scene->cameraController ()->setLookingAtPoint ( QgsVector3D ( 0 , 0 , 0 ), 3000 , 25 , 45 );
1491
-
1492
- // When running the test on Travis, it would initially return empty rendered image.
1493
- // Capturing the initial image and throwing it away fixes that. Hopefully we will
1494
- // find a better fix in the future.
1495
- Qgs3DUtils::captureSceneImage ( engine, scene );
1496
-
1497
- QImage img = Qgs3DUtils::captureSceneImage ( engine, scene );
1498
- delete scene;
1499
- delete map;
1500
-
1501
- QVERIFY ( imageCheck ( " mesh3d_filtered" , " mesh3d_filtered" , img, QString (), 40 , QSize ( 0 , 0 ), 2 ) );
1502
- }
1503
-
1504
1234
void TestQgs3DRendering::testAmbientOcclusion ()
1505
1235
{
1506
1236
// =============================================
0 commit comments