QGIS API Documentation 3.99.0-Master (21b3aa880ba)
Loading...
Searching...
No Matches
qgsterraintextureimage_p.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsterraintextureimage_p.cpp
3 --------------------------------------
4 Date : July 2017
5 Copyright : (C) 2017 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
19
20#include <Qt3DRender/QTextureImageDataGenerator>
21
22#include "moc_qgsterraintextureimage_p.cpp"
23
25
26class TerrainTextureImageDataGenerator : public Qt3DRender::QTextureImageDataGenerator
27{
28 public:
29 static QImage placeholderImage()
30 {
31 // simple placeholder image
32 QImage i( 2, 2, QImage::Format_RGB32 );
33 i.setPixelColor( 0, 0, Qt::darkGray );
34 i.setPixelColor( 1, 0, Qt::lightGray );
35 i.setPixelColor( 0, 1, Qt::lightGray );
36 i.setPixelColor( 1, 1, Qt::darkGray );
37 return i;
38 }
39
40 TerrainTextureImageDataGenerator( const QgsRectangle &extent, const QString &debugText, const QImage &img, int version )
41 : mExtent( extent ), mDebugText( debugText ), mImage( img ), mVersion( version ) {}
42
43 Qt3DRender::QTextureImageDataPtr operator()() override
44 {
45 Qt3DRender::QTextureImageDataPtr dataPtr = Qt3DRender::QTextureImageDataPtr::create();
46 dataPtr->setImage( mImage.isNull() ? placeholderImage() : mImage ); // will copy image data to the internal byte array
47 return dataPtr;
48 }
49
50 qintptr id() const override
51 {
52#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
53 return reinterpret_cast<qintptr>( &Qt3DRender::FunctorType<TerrainTextureImageDataGenerator>::id );
54#else
55 return reinterpret_cast<qintptr>( &Qt3DCore::FunctorType<TerrainTextureImageDataGenerator>::id );
56#endif
57 }
58
59 bool operator==( const QTextureImageDataGenerator &other ) const override
60 {
61 const TerrainTextureImageDataGenerator *otherFunctor = dynamic_cast<const TerrainTextureImageDataGenerator *>( &other );
62 return otherFunctor && otherFunctor->mVersion == mVersion && mExtent == otherFunctor->mExtent;
63 }
64
65 private:
66 QgsRectangle mExtent;
67 QString mDebugText;
68 QImage mImage;
69 int mVersion;
70};
71
73
74
75QgsTerrainTextureImage::QgsTerrainTextureImage( const QImage &image, const QgsRectangle &extent, const QString &debugText, Qt3DCore::QNode *parent )
76 : Qt3DRender::QAbstractTextureImage( parent )
77 , mExtent( extent )
78 , mDebugText( debugText )
79 , mImage( image )
80{
81}
82
83Qt3DRender::QTextureImageDataGeneratorPtr QgsTerrainTextureImage::dataGenerator() const
84{
85 return Qt3DRender::QTextureImageDataGeneratorPtr( new TerrainTextureImageDataGenerator( mExtent, mDebugText, mImage, mVersion ) );
86}
87
88void QgsTerrainTextureImage::invalidate()
89{
90 mImage = QImage();
91 mVersion++;
92 notifyDataGeneratorChanged();
93}
94
95void QgsTerrainTextureImage::setImage( const QImage &img )
96{
97 this->mImage = img;
98 mVersion++;
99 notifyDataGeneratorChanged();
100}
101
A rectangle specified with double values.
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)