Use registry to create terrain generator

This commit is contained in:
Nyall Dawson 2024-11-26 13:06:45 +10:00
parent 25313dd530
commit 64e0c9e484
14 changed files with 71 additions and 90 deletions

View File

@ -54,8 +54,7 @@ class _3D_EXPORT QgsMeshTerrainGenerator : public QgsTerrainGenerator
//! Sets the symbol used to render the mesh as terrain //! Sets the symbol used to render the mesh as terrain
void setSymbol( QgsMesh3DSymbol *symbol SIP_TRANSFER ); void setSymbol( QgsMesh3DSymbol *symbol SIP_TRANSFER );
//! Sets CRS of the terrain void setCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context ) override;
void setCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context );
QgsChunkLoader *createChunkLoader( QgsChunkNode *node ) const override SIP_FACTORY; QgsChunkLoader *createChunkLoader( QgsChunkNode *node ) const override SIP_FACTORY;
float rootChunkError( const Qgs3DMapSettings &map ) const override; float rootChunkError( const Qgs3DMapSettings &map ) const override;

View File

@ -21,9 +21,7 @@
#include "qgsflatterraingenerator.h" #include "qgsflatterraingenerator.h"
#include "qgsdemterraingenerator.h" #include "qgsdemterraingenerator.h"
#include "qgsmeshterraingenerator.h" #include "qgsmeshterraingenerator.h"
#include "qgsonlineterraingenerator.h"
#include "qgsprojectviewsettings.h" #include "qgsprojectviewsettings.h"
#include "qgsquantizedmeshterraingenerator.h"
#include "qgsprojectelevationproperties.h" #include "qgsprojectelevationproperties.h"
#include "qgsterrainprovider.h" #include "qgsterrainprovider.h"
#include "qgslightsource.h" #include "qgslightsource.h"
@ -244,35 +242,13 @@ void Qgs3DMapSettings::readXml( const QDomElement &elem, const QgsReadWriteConte
mLayers = mapLayers; // needs to resolve refs afterwards mLayers = mapLayers; // needs to resolve refs afterwards
QDomElement elemTerrainGenerator = elemTerrain.firstChildElement( QStringLiteral( "generator" ) ); QDomElement elemTerrainGenerator = elemTerrain.firstChildElement( QStringLiteral( "generator" ) );
QString terrainGenType = elemTerrainGenerator.attribute( QStringLiteral( "type" ) ); const QString terrainGenType = elemTerrainGenerator.attribute( QStringLiteral( "type" ) );
if ( terrainGenType == QLatin1String( "dem" ) ) std::unique_ptr< QgsTerrainGenerator > terrainGenerator( Qgs3D::terrainRegistry()->createTerrainGenerator( terrainGenType ) );
if ( terrainGenerator )
{ {
QgsDemTerrainGenerator *demTerrainGenerator = new QgsDemTerrainGenerator; terrainGenerator->setCrs( mCrs, mTransformContext );
demTerrainGenerator->setCrs( mCrs, mTransformContext ); mTerrainGenerator->readXml( elemTerrainGenerator );
setTerrainGenerator( demTerrainGenerator ); setTerrainGenerator( terrainGenerator.release() );
}
else if ( terrainGenType == QLatin1String( "online" ) )
{
QgsOnlineTerrainGenerator *onlineTerrainGenerator = new QgsOnlineTerrainGenerator;
onlineTerrainGenerator->setCrs( mCrs, mTransformContext );
setTerrainGenerator( onlineTerrainGenerator );
}
else if ( terrainGenType == QLatin1String( "mesh" ) )
{
QgsMeshTerrainGenerator *meshTerrainGenerator = new QgsMeshTerrainGenerator;
meshTerrainGenerator->setCrs( mCrs, mTransformContext );
setTerrainGenerator( meshTerrainGenerator );
}
else if ( terrainGenType == QLatin1String( "quantizedmesh" ) )
{
QgsQuantizedMeshTerrainGenerator *qmTerrainGenerator = new QgsQuantizedMeshTerrainGenerator;
setTerrainGenerator( qmTerrainGenerator );
}
else // "flat"
{
QgsFlatTerrainGenerator *flatGen = new QgsFlatTerrainGenerator;
flatGen->setCrs( mCrs );
setTerrainGenerator( flatGen );
} }
std::unique_ptr<QgsAbstractTerrainSettings> terrainSettings( Qgs3D::terrainRegistry()->createTerrainSettings( terrainGenType ) ); std::unique_ptr<QgsAbstractTerrainSettings> terrainSettings( Qgs3D::terrainRegistry()->createTerrainSettings( terrainGenType ) );
@ -282,8 +258,6 @@ void Qgs3DMapSettings::readXml( const QDomElement &elem, const QgsReadWriteConte
setTerrainSettings( terrainSettings.release() ); setTerrainSettings( terrainSettings.release() );
} }
mTerrainGenerator->readXml( elemTerrainGenerator );
QDomElement elemSkybox = elem.firstChildElement( QStringLiteral( "skybox" ) ); QDomElement elemSkybox = elem.firstChildElement( QStringLiteral( "skybox" ) );
mIsSkyboxEnabled = elemSkybox.attribute( QStringLiteral( "skybox-enabled" ) ).toInt(); mIsSkyboxEnabled = elemSkybox.attribute( QStringLiteral( "skybox-enabled" ) ).toInt();
mSkyboxSettings.readXml( elemSkybox, context ); mSkyboxSettings.readXml( elemSkybox, context );
@ -687,7 +661,7 @@ void Qgs3DMapSettings::configureTerrainFromProject( QgsProjectElevationPropertie
if ( properties->terrainProvider()->type() == QLatin1String( "flat" ) ) if ( properties->terrainProvider()->type() == QLatin1String( "flat" ) )
{ {
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( crs() ); flatTerrain->setCrs( crs(), QgsProject::instance()->transformContext() );
setTerrainGenerator( flatTerrain ); setTerrainGenerator( flatTerrain );
setTerrainElevationOffset( properties->terrainProvider()->offset() ); setTerrainElevationOffset( properties->terrainProvider()->offset() );
@ -722,7 +696,7 @@ void Qgs3DMapSettings::configureTerrainFromProject( QgsProjectElevationPropertie
else else
{ {
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( crs() ); flatTerrain->setCrs( crs(), QgsProject::instance()->transformContext() );
setTerrainGenerator( flatTerrain ); setTerrainGenerator( flatTerrain );
} }
} }

View File

@ -52,8 +52,7 @@ class _3D_EXPORT QgsDemTerrainGenerator : public QgsTerrainGenerator
//! Returns raster layer with elevation model to be used for terrain generation //! Returns raster layer with elevation model to be used for terrain generation
QgsRasterLayer *layer() const; QgsRasterLayer *layer() const;
//! Sets CRS of the terrain void setCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context ) override;
void setCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context );
QgsCoordinateReferenceSystem crs() const override { return mCrs; } QgsCoordinateReferenceSystem crs() const override { return mCrs; }
//! Sets resolution of the generator (how many elevation samples on one side of a terrain tile) //! Sets resolution of the generator (how many elevation samples on one side of a terrain tile)

View File

@ -131,7 +131,7 @@ void QgsFlatTerrainGenerator::readXml( const QDomElement &elem )
Q_UNUSED( elem ) Q_UNUSED( elem )
} }
void QgsFlatTerrainGenerator::setCrs( const QgsCoordinateReferenceSystem &crs ) void QgsFlatTerrainGenerator::setCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext & )
{ {
mCrs = crs; mCrs = crs;
updateTilingScheme(); updateTilingScheme();

View File

@ -69,9 +69,7 @@ class _3D_EXPORT QgsFlatTerrainGenerator : public QgsTerrainGenerator
void writeXml( QDomElement &elem ) const override; void writeXml( QDomElement &elem ) const override;
void readXml( const QDomElement &elem ) override; void readXml( const QDomElement &elem ) override;
//! Sets CRS of the terrain void setCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context ) override;
void setCrs( const QgsCoordinateReferenceSystem &crs );
//! Returns CRS of the terrain
QgsCoordinateReferenceSystem crs() const override { return mCrs; } QgsCoordinateReferenceSystem crs() const override { return mCrs; }
private: private:

View File

@ -46,9 +46,7 @@ class _3D_EXPORT QgsOnlineTerrainGenerator : public QgsTerrainGenerator
QgsOnlineTerrainGenerator(); QgsOnlineTerrainGenerator();
~QgsOnlineTerrainGenerator() override; ~QgsOnlineTerrainGenerator() override;
//! Sets CRS of the terrain void setCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context ) override;
void setCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context );
//! Returns CRS of the terrain
QgsCoordinateReferenceSystem crs() const override { return mCrs; } QgsCoordinateReferenceSystem crs() const override { return mCrs; }
//! Sets resolution of the generator (how many elevation samples on one side of a terrain tile) //! Sets resolution of the generator (how many elevation samples on one side of a terrain tile)

View File

@ -71,6 +71,11 @@ QString QgsTerrainGenerator::typeToString( QgsTerrainGenerator::Type type )
return QString(); return QString();
} }
void QgsTerrainGenerator::setCrs( const QgsCoordinateReferenceSystem &, const QgsCoordinateTransformContext & )
{
}
bool QgsTerrainGenerator::isValid() const bool QgsTerrainGenerator::isValid() const
{ {
return mIsValid; return mIsValid;

View File

@ -26,6 +26,7 @@ class Qgs3DMapSettings;
class Qgs3DRenderContext; class Qgs3DRenderContext;
class QgsRectangle; class QgsRectangle;
class QgsTerrainEntity; class QgsTerrainEntity;
class QgsCoordinateTransformContext;
class QDomElement; class QDomElement;
class QDomDocument; class QDomDocument;
@ -105,6 +106,13 @@ class _3D_EXPORT QgsTerrainGenerator : public QgsQuadtreeChunkLoaderFactory
//! Returns tiling scheme of the terrain //! Returns tiling scheme of the terrain
const QgsTilingScheme &tilingScheme() const { return mTerrainTilingScheme; } const QgsTilingScheme &tilingScheme() const { return mTerrainTilingScheme; }
/**
* Sets the CRS associated with the terrain.
*
* \see crs()
*/
virtual void setCrs( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context );
//! Returns CRS of the terrain //! Returns CRS of the terrain
virtual QgsCoordinateReferenceSystem crs() const { return mTerrainTilingScheme.crs(); } virtual QgsCoordinateReferenceSystem crs() const { return mTerrainTilingScheme.crs(); }

View File

@ -263,7 +263,7 @@ void Qgs3DMapConfigWidget::apply()
case QgsTerrainGenerator::Flat: case QgsTerrainGenerator::Flat:
{ {
QgsFlatTerrainGenerator *flatTerrainGen = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrainGen = new QgsFlatTerrainGenerator;
flatTerrainGen->setCrs( mMap->crs() ); flatTerrainGen->setCrs( mMap->crs(), QgsProject::instance()->transformContext() );
mMap->setTerrainGenerator( flatTerrainGen ); mMap->setTerrainGenerator( flatTerrainGen );
} }
break; break;

View File

@ -84,7 +84,7 @@ void initCanvas3D( Qgs3DMapCanvas *canvas )
} ); } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
map->setTerrainElevationOffset( QgsProject::instance()->elevationProperties()->terrainProvider()->offset() ); map->setTerrainElevationOffset( QgsProject::instance()->elevationProperties()->terrainProvider()->offset() );

View File

@ -99,7 +99,7 @@ void TestQgs3DCameraController::testTranslate()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size
@ -172,7 +172,7 @@ void TestQgs3DCameraController::testZoom()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size
@ -245,7 +245,7 @@ void TestQgs3DCameraController::testZoomWheel()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size
@ -292,7 +292,7 @@ void TestQgs3DCameraController::testRotationCenter()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size
@ -367,7 +367,7 @@ void TestQgs3DCameraController::testRotationCamera()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size
@ -443,7 +443,7 @@ void TestQgs3DCameraController::testRotationCenterZoomWheelRotationCenter()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size
@ -586,7 +586,7 @@ void TestQgs3DCameraController::testTranslateRotationCenterTranslate()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size
@ -739,7 +739,7 @@ void TestQgs3DCameraController::testTranslateZoomWheelTranslate()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size
@ -883,7 +883,7 @@ void TestQgs3DCameraController::testTranslateRotationCameraTranslate()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size
@ -1034,7 +1034,7 @@ void TestQgs3DCameraController::testRotationCenterRotationCameraRotationCenter()
mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings ); mapSettings->setLayers( QList<QgsMapLayer *>() << mLayerRgb << mLayerBuildings );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), QgsCoordinateTransformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QPoint winSize = QPoint( 640, 480 ); // default window size QPoint winSize = QPoint( 640, 480 ); // default window size

View File

@ -281,7 +281,7 @@ void TestQgs3DRendering::testFlatTerrain()
map->setLayers( QList<QgsMapLayer *>() << mLayerRgb ); map->setLayers( QList<QgsMapLayer *>() << mLayerRgb );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -414,7 +414,7 @@ void TestQgs3DRendering::testExtrudedPolygons()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -461,7 +461,7 @@ void TestQgs3DRendering::testExtrudedPolygonsClipping()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -517,7 +517,7 @@ void TestQgs3DRendering::testPhongShading()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -569,7 +569,7 @@ void TestQgs3DRendering::testExtrudedPolygonsTexturedPhong()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -623,7 +623,7 @@ void TestQgs3DRendering::testExtrudedPolygonsDataDefinedPhong()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -677,7 +677,7 @@ void TestQgs3DRendering::testExtrudedPolygonsDataDefinedPhongClipping()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -740,7 +740,7 @@ void TestQgs3DRendering::testExtrudedPolygonsDataDefinedGooch()
mapSettings->setLightSources( { defaultLight.clone() } ); mapSettings->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), mProject->transformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -796,7 +796,7 @@ void TestQgs3DRendering::testExtrudedPolygonsDataDefinedGoochClipping()
mapSettings->setLightSources( { defaultLight.clone() } ); mapSettings->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), mProject->transformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -837,7 +837,7 @@ void TestQgs3DRendering::testExtrudedPolygonsGoochShading()
map->setLayers( QList<QgsMapLayer *>() << mLayerBuildings << mLayerRgb ); map->setLayers( QList<QgsMapLayer *>() << mLayerBuildings << mLayerRgb );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -897,7 +897,7 @@ void TestQgs3DRendering::testExtrudedPolygonsMetalRoughShading()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), mProject->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -949,7 +949,7 @@ void TestQgs3DRendering::testPolygonsEdges()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -999,7 +999,7 @@ void TestQgs3DRendering::testLineRendering()
map->setLayers( QList<QgsMapLayer *>() << layerLines ); map->setLayers( QList<QgsMapLayer *>() << layerLines );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1056,7 +1056,7 @@ void TestQgs3DRendering::testLineRenderingClipping()
map->setLayers( QList<QgsMapLayer *>() << layerLines ); map->setLayers( QList<QgsMapLayer *>() << layerLines );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1115,7 +1115,7 @@ void TestQgs3DRendering::testLineRenderingCurved()
map->setLayers( QList<QgsMapLayer *>() << layerLines ); map->setLayers( QList<QgsMapLayer *>() << layerLines );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1174,7 +1174,7 @@ void TestQgs3DRendering::testLineRenderingDataDefinedColors()
map->setLayers( QList<QgsMapLayer *>() << layerLines ); map->setLayers( QList<QgsMapLayer *>() << layerLines );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1218,7 +1218,7 @@ void TestQgs3DRendering::testBufferedLineRendering()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1265,7 +1265,7 @@ void TestQgs3DRendering::testBufferedLineRenderingClipping()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1325,7 +1325,7 @@ void TestQgs3DRendering::testBufferedLineRenderingWidth()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1360,7 +1360,7 @@ void TestQgs3DRendering::testMapTheme()
map->setTerrainMapTheme( "theme_dtm" ); map->setTerrainMapTheme( "theme_dtm" );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1416,7 +1416,7 @@ void TestQgs3DRendering::testRuleBasedRenderer()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1475,7 +1475,7 @@ void TestQgs3DRendering::testFilteredRuleBasedRenderer()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1507,7 +1507,7 @@ void TestQgs3DRendering::testAnimationExport()
map.setExtent( fullExtent ); map.setExtent( fullExtent );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map.crs() ); flatTerrain->setCrs( map.crs(), mProject->transformContext() );
map.setTerrainGenerator( flatTerrain ); map.setTerrainGenerator( flatTerrain );
Qgs3DAnimationSettings animSettings; Qgs3DAnimationSettings animSettings;
@ -1578,7 +1578,7 @@ void TestQgs3DRendering::testInstancedRendering()
mapSettings->setLayers( QList<QgsMapLayer *>() << layerPointsZ.get() ); mapSettings->setLayers( QList<QgsMapLayer *>() << layerPointsZ.get() );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), mapSettings->transformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1653,7 +1653,7 @@ void TestQgs3DRendering::testInstancedRenderingClipping()
mapSettings->setLayers( QList<QgsMapLayer *>() << layerPointsZ.get() ); mapSettings->setLayers( QList<QgsMapLayer *>() << layerPointsZ.get() );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( mapSettings->crs() ); flatTerrain->setCrs( mapSettings->crs(), mapSettings->transformContext() );
mapSettings->setTerrainGenerator( flatTerrain ); mapSettings->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1754,7 +1754,7 @@ void TestQgs3DRendering::testBillboardRendering()
map->setLayers( QList<QgsMapLayer *>() << layerPointsZ.get() ); map->setLayers( QList<QgsMapLayer *>() << layerPointsZ.get() );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1845,7 +1845,7 @@ void TestQgs3DRendering::testFilteredFlatTerrain()
map->setLayers( QList<QgsMapLayer *>() << mLayerRgb ); map->setLayers( QList<QgsMapLayer *>() << mLayerRgb );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -1941,7 +1941,7 @@ void TestQgs3DRendering::testFilteredExtrudedPolygons()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), map->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;

View File

@ -86,7 +86,7 @@ void TestQgsLayout3DMap::testBasic()
map->setLayers( QList<QgsMapLayer *>() << mLayerDtm ); map->setLayers( QList<QgsMapLayer *>() << mLayerDtm );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), mProject->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsCameraPose cam; QgsCameraPose cam;

View File

@ -155,7 +155,7 @@ void TestQgsMesh3DRendering::testMesh()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), mProject->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -197,7 +197,7 @@ void TestQgsMesh3DRendering::testMesh_datasetOnFaces()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), mProject->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -309,7 +309,7 @@ void TestQgsMesh3DRendering::testFilteredMesh()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), mProject->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;
@ -350,7 +350,7 @@ void TestQgsMesh3DRendering::testMeshClipping()
map->setLightSources( { defaultLight.clone() } ); map->setLightSources( { defaultLight.clone() } );
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
flatTerrain->setCrs( map->crs() ); flatTerrain->setCrs( map->crs(), mProject->transformContext() );
map->setTerrainGenerator( flatTerrain ); map->setTerrainGenerator( flatTerrain );
QgsOffscreen3DEngine engine; QgsOffscreen3DEngine engine;