Skip to content

Commit 63adb73

Browse files
committedSep 15, 2017
Update terrain map whenever an active layer requests repaint
1 parent 489a21d commit 63adb73

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed
 

‎src/3d/terrain/terrain.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ Terrain::Terrain( int maxLevel, const Map3D &map, Qt3DCore::QNode *parent )
4545

4646
connect( &map, &Map3D::showTerrainBoundingBoxesChanged, this, &Terrain::onShowBoundingBoxesChanged );
4747
connect( &map, &Map3D::showTerrainTilesInfoChanged, this, &Terrain::invalidateMapImages );
48-
connect( &map, &Map3D::layersChanged, this, &Terrain::invalidateMapImages );
48+
connect( &map, &Map3D::layersChanged, this, &Terrain::onLayersChanged );
49+
50+
connectToLayersRepaintRequest();
4951

5052
mTerrainToMapTransform = new QgsCoordinateTransform( map.terrainGenerator()->crs(), map.crs );
5153

@@ -102,6 +104,27 @@ void Terrain::invalidateMapImages()
102104
needsUpdate = true;
103105
}
104106

107+
void Terrain::onLayersChanged()
108+
{
109+
connectToLayersRepaintRequest();
110+
invalidateMapImages();
111+
}
112+
113+
void Terrain::connectToLayersRepaintRequest()
114+
{
115+
Q_FOREACH ( QgsMapLayer *layer, mLayers )
116+
{
117+
disconnect( layer, &QgsMapLayer::repaintRequested, this, &Terrain::invalidateMapImages );
118+
}
119+
120+
mLayers = map.layers();
121+
122+
Q_FOREACH ( QgsMapLayer *layer, mLayers )
123+
{
124+
connect( layer, &QgsMapLayer::repaintRequested, this, &Terrain::invalidateMapImages );
125+
}
126+
}
127+
105128

106129
// -----------
107130

‎src/3d/terrain/terrain.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ namespace Qt3DRender
1313
class Map3D;
1414
class MapTextureGenerator;
1515
class QgsCoordinateTransform;
16+
class QgsMapLayer;
1617
class TerrainChunkEntity;
1718
class TerrainGenerator;
1819
class TerrainMapUpdateJobFactory;
@@ -38,16 +39,22 @@ class Terrain : public ChunkedEntity
3839
private slots:
3940
void onShowBoundingBoxesChanged();
4041
void invalidateMapImages();
42+
void onLayersChanged();
4143

4244
private:
4345

46+
void connectToLayersRepaintRequest();
47+
4448
const Map3D ↦
4549
//! picker of terrain to know height of terrain when dragging
4650
Qt3DRender::QObjectPicker *mTerrainPicker;
4751
MapTextureGenerator *mMapTextureGenerator;
4852
QgsCoordinateTransform *mTerrainToMapTransform;
4953

5054
std::unique_ptr<TerrainMapUpdateJobFactory> mUpdateJobFactory;
55+
56+
//! layers that are currently being used for map rendering (and thus being watched for renderer updates)
57+
QList<QgsMapLayer *> mLayers;
5158
};
5259

5360

0 commit comments

Comments
 (0)
Please sign in to comment.