QGIS API Documentation 4.1.0-Master (01362494303)
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
18#include <Qt3DRender/QTextureImageDataGenerator>
19
20#include "moc_qgsterraintextureimage_p.cpp"
21
23
24class TerrainTextureImageDataGenerator : public Qt3DRender::QTextureImageDataGenerator
25{
26 public:
27 static QImage placeholderImage()
28 {
29 // simple placeholder image
30 QImage i( 2, 2, QImage::Format_RGB32 );
31 i.setPixelColor( 0, 0, Qt::darkGray );
32 i.setPixelColor( 1, 0, Qt::lightGray );
33 i.setPixelColor( 0, 1, Qt::lightGray );
34 i.setPixelColor( 1, 1, Qt::darkGray );
35 return i;
36 }
37
38 TerrainTextureImageDataGenerator( const QgsRectangle &extent, const QString &debugText, const QImage &img, int version )
39 : mExtent( extent )
40 , mDebugText( debugText )
41 , mImage( img )
42 , mVersion( version )
43 {}
44
45 Qt3DRender::QTextureImageDataPtr operator()() override
46 {
47 Qt3DRender::QTextureImageDataPtr dataPtr = Qt3DRender::QTextureImageDataPtr::create();
48 dataPtr->setImage( mImage.isNull() ? placeholderImage() : mImage ); // will copy image data to the internal byte array
49 dataPtr->setFormat( QOpenGLTexture::TextureFormat::SRGB8_Alpha8 );
50 return dataPtr;
51 }
52
53 qintptr id() const override { return reinterpret_cast<qintptr>( &Qt3DCore::FunctorType<TerrainTextureImageDataGenerator>::id ); }
54
55 bool operator==( const QTextureImageDataGenerator &other ) const override
56 {
57 const TerrainTextureImageDataGenerator *otherFunctor = dynamic_cast<const TerrainTextureImageDataGenerator *>( &other );
58 return otherFunctor && otherFunctor->mVersion == mVersion && mExtent == otherFunctor->mExtent;
59 }
60
61 private:
62 QgsRectangle mExtent;
63 QString mDebugText;
64 QImage mImage;
65 int mVersion;
66};
67
69
70
71QgsTerrainTextureImage::QgsTerrainTextureImage( const QImage &image, const QgsRectangle &extent, const QString &debugText, Qt3DCore::QNode *parent )
72 : Qt3DRender::QAbstractTextureImage( parent )
73 , mExtent( extent )
74 , mDebugText( debugText )
75 , mImage( image )
76{}
77
78Qt3DRender::QTextureImageDataGeneratorPtr QgsTerrainTextureImage::dataGenerator() const
79{
80 return Qt3DRender::QTextureImageDataGeneratorPtr( new TerrainTextureImageDataGenerator( mExtent, mDebugText, mImage, mVersion ) );
81}
82
83void QgsTerrainTextureImage::invalidate()
84{
85 mImage = QImage();
86 mVersion++;
87 notifyDataGeneratorChanged();
88}
89
90void QgsTerrainTextureImage::setImage( const QImage &img )
91{
92 this->mImage = img;
93 mVersion++;
94 notifyDataGeneratorChanged();
95}
96
A rectangle specified with double values.
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)