QGIS API Documentation 3.99.0-Master (8e76e220402)
Loading...
Searching...
No Matches
qgsoverlaytextureentity.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsoverlaytextureentity.cpp
3 --------------------------------------
4 Date : June 2024
5 Copyright : (C) 2024 by Benoit De Mezzo
6 Email : benoit dot de dot mezzo at oslandia 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 <QUrl>
19#include <QVector2D>
20#include <Qt3DRender/QParameter>
21#include <Qt3DRender/QTexture>
22
23#include "moc_qgsoverlaytextureentity.cpp"
24
25QgsOverlayTextureEntity::QgsOverlayTextureEntity( Qt3DRender::QTexture2D *texture, Qt3DRender::QLayer *layer, QNode *parent )
26 : QgsRenderPassQuad( layer, parent )
27{
28 setObjectName( "OverlayTextureQuad" );
29
30 mTextureParameter = new Qt3DRender::QParameter( "previewTexture", texture );
31 mCenterTextureCoords = new Qt3DRender::QParameter( "centerTexCoords", QVector2D( 0, 0 ) );
32 mSizeTextureCoords = new Qt3DRender::QParameter( "sizeTexCoords", QVector2D( 1, 1 ) );
33 mIsDepth = new Qt3DRender::QParameter( "isDepth", true );
34 mFlipTextureY = new Qt3DRender::QParameter( "flipTextureY", true );
35
36 mMaterial->addParameter( mTextureParameter );
37 mMaterial->addParameter( mCenterTextureCoords );
38 mMaterial->addParameter( mSizeTextureCoords );
39 mMaterial->addParameter( mIsDepth );
40 mMaterial->addParameter( mFlipTextureY );
41
42 mShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( "qrc:/shaders/preview.vert" ) ) );
43 mShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( "qrc:/shaders/preview.frag" ) ) );
44
45 setViewport( QPointF( 0.9f, 0.9f ), QSizeF( 0.1, 0.1 ) );
46
47 setEnabled( false );
48}
49
50void QgsOverlayTextureEntity::setPosition( Qt::Corner corner, double size, double offset )
51{
52 setPosition( corner, QSizeF( size, size ), QSizeF( offset, offset ) );
53}
54
55void QgsOverlayTextureEntity::setPosition( Qt::Corner corner, QSizeF size, QSizeF offset )
56{
57 switch ( corner )
58 {
59 case Qt::Corner::TopRightCorner:
60 setViewport( QPointF( 1.0f - size.width() / 2 - offset.width(), offset.height() + size.height() / 2 ), 0.5 * size );
61 break;
62 case Qt::Corner::TopLeftCorner:
63 setViewport( QPointF( offset.width() + size.width() / 2, offset.height() + size.height() / 2 ), 0.5 * size );
64 break;
65 case Qt::Corner::BottomRightCorner:
66 setViewport( QPointF( 1.0f - size.width() / 2 - offset.width(), 1.0f - size.height() / 2 - offset.height() ), 0.5 * size );
67 break;
68 case Qt::Corner::BottomLeftCorner:
69 setViewport( QPointF( offset.width() + size.width() / 2, 1.0f - size.height() / 2 - offset.height() ), 0.5 * size );
70 break;
71 }
72}
73
74
75void QgsOverlayTextureEntity::setViewport( const QPointF &centerTexCoords, const QSizeF &sizeTexCoords )
76{
77 mCenterTextureCoords->setValue( QVector2D( static_cast<float>( centerTexCoords.x() ), static_cast<float>( centerTexCoords.y() ) ) );
78 mSizeTextureCoords->setValue( QVector2D( static_cast<float>( sizeTexCoords.width() ), static_cast<float>( sizeTexCoords.height() ) ) );
79}
void setPosition(Qt::Corner corner, QSizeF size, QSizeF offset=QSizeF(0., 0.))
Sets the texture debugging parameters.
Qt3DRender::QParameter * mSizeTextureCoords
Qt3DRender::QParameter * mTextureParameter
Qt3DRender::QParameter * mFlipTextureY
Qt3DRender::QParameter * mCenterTextureCoords
QgsOverlayTextureEntity(Qt3DRender::QTexture2D *texture, Qt3DRender::QLayer *layer, QNode *parent=nullptr)
Constructor.
Qt3DRender::QParameter * mIsDepth
QgsRenderPassQuad(Qt3DRender::QLayer *layer, QNode *parent=nullptr)
Constructor.
Qt3DRender::QShaderProgram * mShader
Qt3DRender::QMaterial * mMaterial