Skip to content

Commit 670858d

Browse files
committed
Fix some transforms missing transform context
1 parent 95a2ac0 commit 670858d

7 files changed

+42
-7
lines changed

src/3d/qgs3dmapsettings.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,16 @@ void Qgs3DMapSettings::setCrs( const QgsCoordinateReferenceSystem &crs )
226226
mCrs = crs;
227227
}
228228

229+
QgsCoordinateTransformContext Qgs3DMapSettings::transformContext() const
230+
{
231+
return mTransformContext;
232+
}
233+
234+
void Qgs3DMapSettings::setTransformContext( const QgsCoordinateTransformContext &context )
235+
{
236+
mTransformContext = context;
237+
}
238+
229239
void Qgs3DMapSettings::setBackgroundColor( const QColor &color )
230240
{
231241
if ( color == mBackgroundColor )

src/3d/qgs3dmapsettings.h

+20
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,24 @@ class _3D_EXPORT Qgs3DMapSettings : public QObject
8888
//! Returns coordinate reference system used in the 3D scene
8989
QgsCoordinateReferenceSystem crs() const { return mCrs; }
9090

91+
/**
92+
* Returns the coordinate transform context, which stores various
93+
* information regarding which datum transforms should be used when transforming points
94+
* from a source to destination coordinate reference system.
95+
*
96+
* \see setTransformContext()
97+
*/
98+
QgsCoordinateTransformContext transformContext() const;
99+
100+
/**
101+
* Sets the coordinate transform \a context, which stores various
102+
* information regarding which datum transforms should be used when transforming points
103+
* from a source to destination coordinate reference system.
104+
*
105+
* \see transformContext()
106+
*/
107+
void setTransformContext( const QgsCoordinateTransformContext &context );
108+
91109
//! Sets background color of the 3D map view
92110
void setBackgroundColor( const QColor &color );
93111
//! Returns background color of the 3D map view
@@ -239,6 +257,8 @@ class _3D_EXPORT Qgs3DMapSettings : public QObject
239257
bool mSkyboxEnabled = false; //!< Whether to render skybox
240258
QString mSkyboxFileBase; //!< Base part of the files with skybox textures
241259
QString mSkyboxFileExtension; //!< Extension part of the files with skybox textures
260+
//! Coordinate transform context
261+
QgsCoordinateTransformContext mTransformContext;
242262
};
243263

244264

src/3d/terrain/qgsterrainentity_p.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ QgsTerrainEntity::QgsTerrainEntity( int maxLevel, const Qgs3DMapSettings &map, Q
6868

6969
connectToLayersRepaintRequest();
7070

71-
mTerrainToMapTransform = new QgsCoordinateTransform( map.terrainGenerator()->crs(), map.crs() );
71+
mTerrainToMapTransform = new QgsCoordinateTransform( map.terrainGenerator()->crs(), map.crs(), map.transformContext() );
7272

7373
mTextureGenerator = new QgsTerrainTextureGenerator( map );
7474

src/3d/terrain/qgsterraingenerator.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
QgsAABB QgsTerrainGenerator::rootChunkBbox( const Qgs3DMapSettings &map ) const
2323
{
2424
QgsRectangle te = extent();
25-
QgsCoordinateTransform terrainToMapTransform( crs(), map.crs() );
25+
QgsCoordinateTransform terrainToMapTransform( crs(), map.crs(), map.transformContext() );
2626
te = terrainToMapTransform.transformBoundingBox( te );
2727

2828
float hMin, hMax;
@@ -34,7 +34,7 @@ QgsAABB QgsTerrainGenerator::rootChunkBbox( const Qgs3DMapSettings &map ) const
3434
float QgsTerrainGenerator::rootChunkError( const Qgs3DMapSettings &map ) const
3535
{
3636
QgsRectangle te = extent();
37-
QgsCoordinateTransform terrainToMapTransform( crs(), map.crs() );
37+
QgsCoordinateTransform terrainToMapTransform( crs(), map.crs(), map.transformContext() );
3838
te = terrainToMapTransform.transformBoundingBox( te );
3939

4040
// use texel size as the error

src/app/layout/qgslayoutmapwidget.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ void QgsLayoutMapWidget::mapCrsChanged( const QgsCoordinateReferenceSystem &crs
305305
QgsRectangle newExtent;
306306
try
307307
{
308-
QgsCoordinateTransform xForm( oldCrs, crs.isValid() ? crs : QgsProject::instance()->crs() );
308+
QgsCoordinateTransform xForm( oldCrs, crs.isValid() ? crs : QgsProject::instance()->crs(), QgsProject::instance() );
309309
QgsRectangle prevExtent = mMapItem->extent();
310310
newExtent = xForm.transformBoundingBox( prevExtent );
311311
updateExtent = true;
@@ -526,7 +526,7 @@ void QgsLayoutMapWidget::mSetToMapCanvasExtentButton_clicked()
526526
try
527527
{
528528
QgsCoordinateTransform xForm( QgisApp::instance()->mapCanvas()->mapSettings().destinationCrs(),
529-
mMapItem->crs() );
529+
mMapItem->crs(), QgsProject::instance() );
530530
newExtent = xForm.transformBoundingBox( newExtent );
531531
}
532532
catch ( QgsCsException & )
@@ -559,7 +559,7 @@ void QgsLayoutMapWidget::mViewExtentInCanvasButton_clicked()
559559
try
560560
{
561561
QgsCoordinateTransform xForm( mMapItem->crs(),
562-
QgisApp::instance()->mapCanvas()->mapSettings().destinationCrs() );
562+
QgisApp::instance()->mapCanvas()->mapSettings().destinationCrs(), QgsProject::instance() );
563563
currentMapExtent = xForm.transformBoundingBox( currentMapExtent );
564564
}
565565
catch ( QgsCsException & )

src/app/qgisapp.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -10392,6 +10392,11 @@ void QgisApp::new3DMapCanvas()
1039210392
map->setSelectionColor( mMapCanvas->selectionColor() );
1039310393
map->setBackgroundColor( mMapCanvas->canvasColor() );
1039410394
map->setLayers( mMapCanvas->layers() );
10395+
map->setTransformContext( QgsProject::instance()->transformContext() );
10396+
connect( QgsProject::instance(), &QgsProject::transformContextChanged, map, [map]
10397+
{
10398+
map->setTransformContext( QgsProject::instance()->transformContext() );
10399+
} );
1039510400

1039610401
QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator;
1039710402
flatTerrain->setCrs( map->crs() );

tests/src/core/testqgscoordinatetransform.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ void TestQgsCoordinateTransform::transformBoundingBox()
244244
QGSCOMPARENEAR( resultRect.yMaximum(), expectedRect.yMaximum(), 0.001 );
245245

246246
// test transforming a bounding box, resulting in an invalid transform - exception must be thrown
247-
tr = QgsCoordinateTransform( QgsCoordinateReferenceSystem( 4326 ), QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:28356" ) ) );
247+
tr = QgsCoordinateTransform( QgsCoordinateReferenceSystem( 4326 ), QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:28356" ) ), QgsProject::instance() );
248248
QgsRectangle rect( -99999999999, 99999999999, -99999999998, 99999999998 );
249249
bool errorObtained = false;
250250
try

0 commit comments

Comments
 (0)