QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgs25drendererwidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgs25drendererwidget.cpp - Qgs25DRendererWidget
3
4 ---------------------
5 begin : 14.1.2016
6 copyright : (C) 2016 by mku
7 email : [your-email-here]
8 ***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
17#include "qgs25drenderer.h"
18#include "qgsvectorlayer.h"
20#include "qgssymbol.h"
21
23 : QgsRendererWidget( layer, style )
24
25{
26 if ( !layer )
27 return;
28
29 // the renderer only applies to point vector layers
31 {
32 //setup blank dialog
33 QGridLayout *layout = new QGridLayout( this );
34 QLabel *label = new QLabel( tr( "The 2.5D renderer only can be used with polygon layers. \n"
35 "'%1' is not a polygon layer and cannot be rendered in 2.5D." )
36 .arg( layer->name() ), this );
37 layout->addWidget( label );
38 return;
39 }
40
41 setupUi( this );
42 this->layout()->setContentsMargins( 0, 0, 0, 0 );
43
44 mAngleWidget->setClearValue( 0 );
45 mWallColorButton->setColorDialogTitle( tr( "Select Wall Color" ) );
46 mWallColorButton->setAllowOpacity( true );
47 mWallColorButton->setContext( QStringLiteral( "symbology" ) );
48 mRoofColorButton->setColorDialogTitle( tr( "Select Roof Color" ) );
49 mRoofColorButton->setAllowOpacity( true );
50 mRoofColorButton->setContext( QStringLiteral( "symbology" ) );
51 mShadowColorButton->setColorDialogTitle( tr( "Select Shadow Color" ) );
52 mShadowColorButton->setAllowOpacity( true );
53 mShadowColorButton->setContext( QStringLiteral( "symbology" ) );
54
55 if ( renderer )
56 {
58 }
59
60 mHeightWidget->setLayer( layer );
61
63 const QVariant height = scope->variable( QStringLiteral( "qgis_25d_height" ) );
64 const QVariant angle = scope->variable( QStringLiteral( "qgis_25d_angle" ) );
65 delete scope;
66
67 mHeightWidget->setField( QgsVariantUtils::isNull( height ) ? QStringLiteral( "10" ) : height.toString() );
68 mAngleWidget->setValue( QgsVariantUtils::isNull( angle ) ? 70 : angle.toDouble() );
69 mAngleWidget->setClearValue( 70 );
70 mWallColorButton->setColor( mRenderer->wallColor() );
71 mRoofColorButton->setColor( mRenderer->roofColor() );
72 mShadowColorButton->setColor( mRenderer->shadowColor() );
73 mShadowEnabledWidget->setChecked( mRenderer->shadowEnabled() );
74 mShadowSizeWidget->setValue( mRenderer->shadowSpread() );
75 mShadowSizeWidget->setClearValue( 4 );
76 mWallExpositionShading->setChecked( mRenderer->wallShadingEnabled() );
77
78 connect( mAngleWidget, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &Qgs25DRendererWidget::updateRenderer );
79 connect( mHeightWidget, static_cast < void ( QgsFieldExpressionWidget::* )( const QString & ) > ( &QgsFieldExpressionWidget::fieldChanged ), this, &Qgs25DRendererWidget::updateRenderer );
80 connect( mWallColorButton, &QgsColorButton::colorChanged, this, &Qgs25DRendererWidget::updateRenderer );
81 connect( mRoofColorButton, &QgsColorButton::colorChanged, this, &Qgs25DRendererWidget::updateRenderer );
82 connect( mShadowColorButton, &QgsColorButton::colorChanged, this, &Qgs25DRendererWidget::updateRenderer );
83 connect( mShadowEnabledWidget, &QGroupBox::toggled, this, &Qgs25DRendererWidget::updateRenderer );
84 connect( mShadowSizeWidget, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &Qgs25DRendererWidget::updateRenderer );
85 connect( mWallExpositionShading, &QAbstractButton::toggled, this, &Qgs25DRendererWidget::updateRenderer );
86}
87
89
91{
92 return mRenderer.get();
93}
94
95void Qgs25DRendererWidget::updateRenderer()
96{
97 mRenderer->setRoofColor( mRoofColorButton->color() );
98 mRenderer->setWallColor( mWallColorButton->color() );
99 mRenderer->setShadowColor( mShadowColorButton->color() );
100 mRenderer->setShadowEnabled( mShadowEnabledWidget->isChecked() );
101 mRenderer->setShadowSpread( mShadowSizeWidget->value() );
102 mRenderer->setWallShadingEnabled( mWallExpositionShading->isChecked() );
103 emit widgetChanged();
104}
105
106void Qgs25DRendererWidget::apply()
107{
108 if ( mHeightWidget )
109 {
110 QgsExpressionContextUtils::setLayerVariable( mLayer, QStringLiteral( "qgis_25d_height" ), mHeightWidget->currentText() );
111 QgsExpressionContextUtils::setLayerVariable( mLayer, QStringLiteral( "qgis_25d_angle" ), mAngleWidget->value() );
112
114 }
115}
116
118{
119 return new Qgs25DRendererWidget( layer, style, renderer );
120}
@ Polygon
Polygons.
~Qgs25DRendererWidget() override
static QgsRendererWidget * create(QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer)
Static creation method.
QgsFeatureRenderer * renderer() override
Returns pointer to the renderer (no transfer of ownership)
Qgs25DRendererWidget(QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer)
Constructor.
static Qgs25DRenderer * convertFromRenderer(QgsFeatureRenderer *renderer)
Try to convert from an existing renderer.
void colorChanged(const QColor &color)
Emitted whenever a new color is set for the button.
Single scope for storing variables and functions for use within a QgsExpressionContext.
QVariant variable(const QString &name) const
Retrieves a variable's value from the scope.
static void setLayerVariable(QgsMapLayer *layer, const QString &name, const QVariant &value)
Sets a layer context variable.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
The QgsFieldExpressionWidget class creates a widget to choose fields and edit expressions It contains...
void fieldChanged(const QString &fieldName)
Emitted when the currently selected field changes.
QString name
Definition: qgsmaplayer.h:78
void widgetChanged()
Emitted when the widget state changes.
Base class for renderer settings widgets.
void layerVariablesChanged()
Emitted when expression context variables on the associated vector layers have been changed.
QgsVectorLayer * mLayer
static bool isNull(const QVariant &variant, bool silenceNullWarnings=false)
Returns true if the specified variant should be considered a NULL value.
Represents a vector layer which manages a vector based data sets.
Q_INVOKABLE Qgis::GeometryType geometryType() const
Returns point, line or polygon.
double ANALYSIS_EXPORT angle(QgsPoint *p1, QgsPoint *p2, QgsPoint *p3, QgsPoint *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
Definition: MathUtils.cpp:716