QGIS API Documentation 4.3.0-Master (91d4a333d5d)
Loading...
Searching...
No Matches
qgspointcloudrendererpropertieswidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgspointcloudrendererpropertieswidget.cpp
3 ---------------------
4 begin : November 2020
5 copyright : (C) 2020 by Nyall Dawson
6 email : nyall dot dawson 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 ***************************************************************************/
16
17#include "qgis.h"
18#include "qgsapplication.h"
22#include "qgsfontbutton.h"
23#include "qgslogger.h"
28#include "qgspointcloudlayer.h"
33#include "qgsproject.h"
34#include "qgsprojectutils.h"
35#include "qgsproperty.h"
36#include "qgsstyle.h"
38#include "qgstextformatwidget.h"
39#include "qgsvirtualpointcloudprovider.h"
40
41#include <QString>
42
43#include "moc_qgspointcloudrendererpropertieswidget.cpp"
44
45using namespace Qt::StringLiterals;
46
47static bool initPointCloudRenderer( const QString &name, QgsPointCloudRendererWidgetFunc f, const QString &iconName = QString() )
48{
50 if ( !rendererAbstractMetadata )
51 return false;
52 QgsPointCloudRendererMetadata *rendererMetadata = dynamic_cast<QgsPointCloudRendererMetadata *>( rendererAbstractMetadata );
53 if ( !rendererMetadata )
54 return false;
55
56 rendererMetadata->setWidgetFunction( f );
57
58 if ( !iconName.isEmpty() )
59 {
60 rendererMetadata->setIcon( QgsApplication::getThemeIcon( iconName ) );
61 }
62
63 QgsDebugMsgLevel( "Set for " + name, 2 );
64 return true;
65}
66
67void QgsPointCloudRendererPropertiesWidget::initRendererWidgetFunctions()
68{
69 static bool sInitialized = false;
70 if ( sInitialized )
71 return;
72
73 initPointCloudRenderer( u"extent"_s, QgsPointCloudExtentRendererWidget::create, u"styleicons/pointcloudextent.svg"_s );
74 initPointCloudRenderer( u"rgb"_s, QgsPointCloudRgbRendererWidget::create, u"styleicons/multibandcolor.svg"_s );
75 initPointCloudRenderer( u"ramp"_s, QgsPointCloudAttributeByRampRendererWidget::create, u"styleicons/singlebandpseudocolor.svg"_s );
76 initPointCloudRenderer( u"classified"_s, QgsPointCloudClassifiedRendererWidget::create, u"styleicons/paletted.svg"_s );
77
78 sInitialized = true;
79}
80
82 : QgsMapLayerConfigWidget( layer, nullptr, parent )
83 , mLayer( layer )
84 , mStyle( style )
85{
86 setupUi( this );
87
88 layout()->setContentsMargins( 0, 0, 0, 0 );
89
90 // initialize registry's widget functions
91 initRendererWidgetFunctions();
92
94 const QStringList renderers = reg->renderersList();
95 for ( const QString &name : renderers )
96 {
98 cboRenderers->addItem( m->icon(), m->visibleName(), name );
99 }
100
101 cboRenderers->setCurrentIndex( -1 ); // set no current renderer
102
103 mPointStyleComboBox->addItem( tr( "Square" ), QVariant::fromValue( Qgis::PointCloudSymbol::Square ) );
104 mPointStyleComboBox->addItem( tr( "Circle" ), QVariant::fromValue( Qgis::PointCloudSymbol::Circle ) );
105
106 connect( cboRenderers, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::rendererChanged );
107
108 connect( mBlendModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
109 connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
110
111 mPointSizeUnitWidget->setUnits(
113 );
114
115 connect( mPointSizeSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
116 mPointSizeSpinBox->setClearValue( 1.0 );
117
118 connect( mPointSizeUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
119
120 mDrawOrderComboBox->addItem( tr( "Default" ), QVariant::fromValue( Qgis::PointCloudDrawOrder::Default ) );
121 mDrawOrderComboBox->addItem( tr( "Bottom to Top" ), QVariant::fromValue( Qgis::PointCloudDrawOrder::BottomToTop ) );
122 mDrawOrderComboBox->addItem( tr( "Top to Bottom" ), QVariant::fromValue( Qgis::PointCloudDrawOrder::TopToBottom ) );
123
124 connect( mDirectionalLightWidget, &QgsDirectionalLightWidget::directionChanged, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
125
126 mEdlDistanceSpinBox->setClearValue( 0.5 );
127 mEdlStrengthSpinBox->setClearValue( 1000 );
128 connect( mEdlStrengthSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
129 connect( mEdlDistanceSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
130 connect( mEdlDistanceUnit, &QgsUnitSelectionWidget::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
131
132 mHillshadingZFactorSpinBox->setClearValue( 1.0 );
133 connect( mHillshadingZFactorSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
134 connect( mHillshadingMultidirCheckBox, &QCheckBox::toggled, this, [this]( bool checked ) {
135 mDirectionalLightWidget->setEnableAzimuth( !checked );
136 emitWidgetChanged();
137 } );
138
139 mMaxErrorUnitWidget->setUnits(
141 );
142 mMaxErrorSpinBox->setClearValue( 0.3 );
143
144 mHorizontalTriangleThresholdSpinBox->setClearValue( 5.0 );
145 mHorizontalTriangleUnitWidget->setUnits(
147 );
148
149 connect( mMaxErrorSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
150 connect( mMaxErrorUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
151
152 connect( mPointStyleComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
153 connect( mDrawOrderComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
154
155 connect( mEyeDomeLightingGroupBox, &QGroupBox::toggled, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
156 connect( mHillshadeGroupBox, &QGroupBox::toggled, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
157
158 connect( mTriangulateGroupBox, &QGroupBox::toggled, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
159 connect( mHorizontalTriangleCheckBox, &QCheckBox::clicked, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
160 connect( mHorizontalTriangleThresholdSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
161 connect( mHorizontalTriangleUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
162
163 connect( mColorExpressionWidget, qOverload<const QString &>( &QgsFieldExpressionWidget::fieldChanged ), this, &QgsPointCloudRendererPropertiesWidget::updateDataDefinedProperty );
164 // show virtual point cloud options only when vpc layer is selected
165 if ( !mLayer->dataProvider()->subIndexes().isEmpty() )
166 {
167 mLabelOptions->setDialogTitle( tr( "Customize label text" ) );
168 mLabelOptions->setText( tr( "Label format" ) );
169 connect( mLabels, &QCheckBox::stateChanged, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
170 connect( mLabelOptions, &QgsFontButton::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
171 mZoomOutOptions->addItem( tr( "Show Extents Only" ), QVariant::fromValue( Qgis::PointCloudZoomOutRenderBehavior::RenderExtents ) );
172
173 if ( const QgsVirtualPointCloudProvider *vpcProvider = dynamic_cast<QgsVirtualPointCloudProvider *>( mLayer->dataProvider() ) )
174 {
175 if ( !vpcProvider->overviews().isEmpty() )
176 {
177 mZoomOutOptions->addItem( tr( "Show Overview Only" ), QVariant::fromValue( Qgis::PointCloudZoomOutRenderBehavior::RenderOverview ) );
178 mZoomOutOptions->addItem( tr( "Show Extents Over Overview" ), QVariant::fromValue( Qgis::PointCloudZoomOutRenderBehavior::RenderOverviewAndExtents ) );
179 }
180
181 for ( auto it = mOverviewSwitchingScaleMap.constBegin(); it != mOverviewSwitchingScaleMap.constEnd(); ++it )
182 {
183 mOverviewSwitchingScale->addItem( it.value(), it.key() );
184 }
185 setOverviewSwitchingScale( 1.0 );
186 }
187 else
188 {
189 mZoomOutOptions->setEnabled( false );
190 mOverviewSwitchingScale->setEnabled( false );
191 }
192
193 connect( mOverviewSwitchingScale, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
194
195 connect( mZoomOutOptions, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( int ) {
196 switch ( mZoomOutOptions->currentData().value<Qgis::PointCloudZoomOutRenderBehavior>() )
197 {
199 mLabels->setEnabled( false );
200 mLabelOptions->setEnabled( false );
201 break;
204 mLabels->setEnabled( true );
205 mLabelOptions->setEnabled( true );
206 }
207 emitWidgetChanged();
208 } );
209 }
210 else
211 {
212 mVpcGroupBox->setVisible( false );
213 }
214
216}
217
219{
220 mContext = context;
221 mMapCanvas = context.mapCanvas();
222 mMessageBar = context.messageBar();
223 if ( mActiveWidget )
224 {
225 mActiveWidget->setContext( context );
226 }
227}
228
230{
231 mLayer = qobject_cast<QgsPointCloudLayer *>( layer );
232
233 mBlockChangedSignal = true;
234 mOpacityWidget->setOpacity( mLayer->opacity() );
235 mBlendModeComboBox->setShowClippingModes( QgsProjectUtils::layerIsContainedInGroupLayer( QgsProject::instance(), mLayer ) );
236 mBlendModeComboBox->setBlendMode( mLayer->blendMode() );
237
238 if ( mLayer->renderer() )
239 {
240 // set current renderer from layer
241 const QString rendererName = mLayer->renderer()->type();
242
243 const int rendererIdx = cboRenderers->findData( rendererName );
244 if ( cboRenderers->currentIndex() != rendererIdx )
245 {
246 cboRenderers->setCurrentIndex( rendererIdx );
247 }
248 else
249 {
250 rendererChanged();
251 }
252
253 // no renderer found... this mustn't happen
254 Q_ASSERT( rendererIdx != -1 && "there must be a renderer!" );
255
256 mPointSizeSpinBox->setValue( mLayer->renderer()->pointSize() );
257 mPointSizeUnitWidget->setUnit( mLayer->renderer()->pointSizeUnit() );
258 mPointSizeUnitWidget->setMapUnitScale( mLayer->renderer()->pointSizeMapUnitScale() );
259
260 mPointStyleComboBox->setCurrentIndex( mPointStyleComboBox->findData( QVariant::fromValue( mLayer->renderer()->pointSymbol() ) ) );
261 mDrawOrderComboBox->setCurrentIndex( mDrawOrderComboBox->findData( QVariant::fromValue( mLayer->renderer()->drawOrder2d() ) ) );
262
263 mMaxErrorSpinBox->setValue( mLayer->renderer()->maximumScreenError() );
264 mMaxErrorUnitWidget->setUnit( mLayer->renderer()->maximumScreenErrorUnit() );
265 setOverviewSwitchingScale( mLayer->renderer()->overviewSwitchingScale() );
266
267 mTriangulateGroupBox->setChecked( mLayer->renderer()->renderAsTriangles() );
268 mHorizontalTriangleCheckBox->setChecked( mLayer->renderer()->horizontalTriangleFilter() );
269 mHorizontalTriangleThresholdSpinBox->setValue( mLayer->renderer()->horizontalTriangleFilterThreshold() );
270 mHorizontalTriangleUnitWidget->setUnit( mLayer->renderer()->horizontalTriangleFilterUnit() );
271
272 if ( !mLayer->dataProvider()->subIndexes().isEmpty() )
273 {
274 mLabels->setChecked( mLayer->renderer()->showLabels() );
275 mLabelOptions->setTextFormat( mLayer->renderer()->labelTextFormat() );
276 mZoomOutOptions->setCurrentIndex( mZoomOutOptions->findData( QVariant::fromValue( mLayer->renderer()->zoomOutBehavior() ) ) );
277 switch ( mLayer->renderer()->zoomOutBehavior() )
278 {
280 mLabels->setEnabled( false );
281 mLabelOptions->setEnabled( false );
282 break;
283 default:
284 mLabels->setEnabled( true );
285 mLabelOptions->setEnabled( true );
286 }
287 }
288
289 QgsElevationShadingRenderer shadingRenderer = mLayer->renderer()->elevationShadingRenderer();
290
291 mEyeDomeLightingGroupBox->setChecked( shadingRenderer.isActiveEyeDomeLighting() );
292 mHillshadeGroupBox->setChecked( shadingRenderer.isActiveHillshading() );
293
294 mEdlStrengthSpinBox->setValue( shadingRenderer.eyeDomeLightingStrength() );
295 mEdlDistanceSpinBox->setValue( shadingRenderer.eyeDomeLightingDistance() );
296 mEdlDistanceUnit->setUnits(
298 );
299 mEdlDistanceUnit->setUnit( shadingRenderer.eyeDomeLightingDistanceUnit() );
300 mHillshadingMultidirCheckBox->setChecked( shadingRenderer.isHillshadingMultidirectional() );
301 mHillshadingZFactorSpinBox->setValue( shadingRenderer.hillshadingZFactor() );
302
303 mDirectionalLightWidget->setAltitude( shadingRenderer.lightAltitude() );
304 mDirectionalLightWidget->setAzimuth( shadingRenderer.lightAzimuth() );
305 mDirectionalLightWidget->setEnableAzimuth( !mHillshadingMultidirCheckBox->isChecked() );
306 }
307
308 mColorExpressionWidget->setLayer( layer );
309 mColorExpressionWidget->registerExpressionContextGenerator( this );
310
311 mDataDefinedProperties = mLayer->renderer()->dataDefinedProperties();
312 const QgsProperty colorProperty = mDataDefinedProperties.property( QgsPointCloudRenderer::Property::Color );
313 mColorExpressionWidget->setExpression( colorProperty.expressionString() );
314
315 mBlockChangedSignal = false;
316}
317
319{
320 if ( mActiveWidget )
321 mActiveWidget->setDockMode( dockMode );
323}
324
326{
327 mLayer->setOpacity( mOpacityWidget->opacity() );
328 mLayer->setBlendMode( mBlendModeComboBox->blendMode() );
329
330 if ( mActiveWidget )
331 mLayer->setRenderer( mActiveWidget->renderer() );
332 else if ( !cboRenderers->currentData().toString().isEmpty() )
333 {
334 QDomElement elem;
335 if ( QgsPointCloudRendererAbstractMetadata *metadata = QgsApplication::pointCloudRendererRegistry()->rendererMetadata( cboRenderers->currentData().toString() ) )
336 {
337 mLayer->setRenderer( metadata->createRenderer( elem, QgsReadWriteContext() ) );
338 }
339 }
340
341 mLayer->renderer()->setPointSize( mPointSizeSpinBox->value() );
342 mLayer->renderer()->setPointSizeUnit( mPointSizeUnitWidget->unit() );
343 mLayer->renderer()->setPointSizeMapUnitScale( mPointSizeUnitWidget->getMapUnitScale() );
344
345 mLayer->renderer()->setPointSymbol( mPointStyleComboBox->currentData().value<Qgis::PointCloudSymbol>() );
346
347 mLayer->renderer()->setMaximumScreenError( mMaxErrorSpinBox->value() );
348 mLayer->renderer()->setMaximumScreenErrorUnit( mMaxErrorUnitWidget->unit() );
349 mLayer->renderer()->setDrawOrder2d( mDrawOrderComboBox->currentData().value<Qgis::PointCloudDrawOrder>() );
350
351 mLayer->renderer()->setRenderAsTriangles( mTriangulateGroupBox->isChecked() );
352 mLayer->renderer()->setHorizontalTriangleFilter( mHorizontalTriangleCheckBox->isChecked() );
353 mLayer->renderer()->setHorizontalTriangleFilterThreshold( mHorizontalTriangleThresholdSpinBox->value() );
354 mLayer->renderer()->setHorizontalTriangleFilterUnit( mHorizontalTriangleUnitWidget->unit() );
355
356 mLayer->renderer()->setShowLabels( mLabels->isChecked() );
357 mLayer->renderer()->setLabelTextFormat( mLabelOptions->textFormat() );
358 mLayer->renderer()->setZoomOutBehavior( mZoomOutOptions->currentData().value<Qgis::PointCloudZoomOutRenderBehavior>() );
359
360 mLayer->renderer()->setOverviewSwitchingScale( overviewSwitchingScale() );
361
362 QgsElevationShadingRenderer shadingRenderer;
363
364 shadingRenderer.setActiveEyeDomeLighting( mEyeDomeLightingGroupBox->isChecked() );
365 shadingRenderer.setActiveHillshading( mHillshadeGroupBox->isChecked() );
366 shadingRenderer.setActive( mEyeDomeLightingGroupBox->isChecked() || mHillshadeGroupBox->isChecked() );
367 shadingRenderer.setEyeDomeLightingStrength( mEdlStrengthSpinBox->value() );
368 shadingRenderer.setEyeDomeLightingDistance( mEdlDistanceSpinBox->value() );
369 shadingRenderer.setEyeDomeLightingDistanceUnit( mEdlDistanceUnit->unit() );
370 shadingRenderer.setHillshadingMultidirectional( mHillshadingMultidirCheckBox->isChecked() );
371 shadingRenderer.setHillshadingZFactor( mHillshadingZFactorSpinBox->value() );
372
373 shadingRenderer.setLightAltitude( mDirectionalLightWidget->altitude() );
374 shadingRenderer.setLightAzimuth( mDirectionalLightWidget->azimuth() );
375
376 mLayer->renderer()->setElevationShadingRenderer( shadingRenderer );
377 mLayer->renderer()->setDataDefinedProperties( mDataDefinedProperties );
378}
379
380void QgsPointCloudRendererPropertiesWidget::rendererChanged()
381{
382 if ( cboRenderers->currentIndex() == -1 )
383 {
384 QgsDebugError( u"No current item -- this should never happen!"_s );
385 return;
386 }
387
388 const QString rendererName = cboRenderers->currentData().toString();
389
390 //Retrieve the previous renderer: from the old active widget if possible, otherwise from the layer
391 std::unique_ptr<QgsPointCloudRenderer> oldRenderer;
392 std::unique_ptr<QgsPointCloudRenderer> newRenderer;
393 if ( mActiveWidget )
394 newRenderer.reset( mActiveWidget->renderer() );
395
396 if ( newRenderer )
397 {
398 oldRenderer = std::move( newRenderer );
399 }
400 else
401 {
402 oldRenderer.reset( mLayer->renderer()->clone() );
403 }
404
405 // get rid of old active widget (if any)
406 if ( mActiveWidget )
407 {
408 stackedWidget->removeWidget( mActiveWidget );
409
410 delete mActiveWidget;
411 mActiveWidget = nullptr;
412 }
413
414 QgsPointCloudRendererWidget *widget = nullptr;
415 QgsPointCloudRendererAbstractMetadata *rendererMetadata = QgsApplication::pointCloudRendererRegistry()->rendererMetadata( rendererName );
416 if ( rendererMetadata )
417 widget = rendererMetadata->createRendererWidget( mLayer, mStyle, oldRenderer.get() );
418 oldRenderer.reset();
419
420 if ( widget )
421 {
422 // instantiate the widget and set as active
423 mActiveWidget = widget;
424 stackedWidget->addWidget( mActiveWidget );
425 stackedWidget->setCurrentWidget( mActiveWidget );
426
427 if ( mMapCanvas || mMessageBar )
428 {
429 QgsSymbolWidgetContext context;
430 context.setMapCanvas( mMapCanvas );
431 context.setMessageBar( mMessageBar );
432 mActiveWidget->setContext( mContext );
433 }
434
437 widget->setDockMode( dockMode() );
438 }
439 else
440 {
441 // set default "no edit widget available" page
442 stackedWidget->setCurrentWidget( pageNoWidget );
443 }
444 emitWidgetChanged();
445}
446
447void QgsPointCloudRendererPropertiesWidget::emitWidgetChanged()
448{
449 if ( !mBlockChangedSignal )
450 emit changed();
451}
452
453void QgsPointCloudRendererPropertiesWidget::updateDataDefinedProperty()
454{
455 const QString expression = mColorExpressionWidget->expression();
456 if ( !expression.isEmpty() )
457 mDataDefinedProperties.setProperty( QgsPointCloudRenderer::Property::Color, QgsProperty::fromExpression( expression ) );
458 else
459 mDataDefinedProperties.setProperty( QgsPointCloudRenderer::Property::Color, QgsProperty() );
460 emitWidgetChanged();
461}
462
463
464void QgsPointCloudRendererPropertiesWidget::setOverviewSwitchingScale( double scale )
465{
466 mOverviewSwitchingScale->setCurrentIndex( mOverviewSwitchingScale->findData( scale ) );
467}
468
469double QgsPointCloudRendererPropertiesWidget::overviewSwitchingScale() const
470{
471 return mOverviewSwitchingScaleMap.key( mOverviewSwitchingScale->currentText() );
472}
473
475{
476 if ( auto *lExpressionContext = mContext.expressionContext() )
477 return *lExpressionContext;
478
479 QgsExpressionContext context( mContext.globalProjectAtlasMapLayerScopes( mLayer ) );
480
481 auto pointCloudScope = std::make_unique<QgsExpressionContextScope>( tr( "Point Cloud" ) );
482 context.appendScope( pointCloudScope.release() );
483
484 for ( const QgsExpressionContextScope &scope : mContext.additionalExpressionContextScopes() )
485 context.appendScope( new QgsExpressionContextScope( scope ) );
486
488
489 return context;
490}
PointCloudSymbol
Rendering symbols for point cloud points.
Definition qgis.h:4727
@ Circle
Renders points as circles.
Definition qgis.h:4729
@ Square
Renders points as squares.
Definition qgis.h:4728
PointCloudDrawOrder
Pointcloud rendering order for 2d views.
Definition qgis.h:4739
@ BottomToTop
Draw points with larger Z values last.
Definition qgis.h:4741
@ Default
Draw points in the order they are stored.
Definition qgis.h:4740
@ TopToBottom
Draw points with larger Z values first.
Definition qgis.h:4742
PointCloudZoomOutRenderBehavior
Point cloud zoom out options.
Definition qgis.h:6995
@ RenderOverviewAndExtents
Render point cloud extents over overview point cloud.
Definition qgis.h:6998
@ RenderExtents
Render only point cloud extents when zoomed out.
Definition qgis.h:6996
@ RenderOverview
Render overview point cloud when zoomed out.
Definition qgis.h:6997
@ Millimeters
Millimeters.
Definition qgis.h:5771
@ Points
Points (e.g., for font sizes).
Definition qgis.h:5775
@ MapUnits
Map units.
Definition qgis.h:5772
@ Pixels
Pixels.
Definition qgis.h:5773
@ Inches
Inches.
Definition qgis.h:5776
@ MetersInMapUnits
Meters value as Map units.
Definition qgis.h:5778
static QgsPointCloudRendererRegistry * pointCloudRendererRegistry()
Returns the application's point cloud renderer registry, used for managing point cloud layer 2D rende...
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
void directionChanged()
Emitted when the direction is changed.
Renders elevation shading on an image with different methods (eye dome lighting, hillshading,...
bool isActiveHillshading() const
Returns whether the hillshading is active.
void setActive(bool active)
Sets whether this shading renderer is active.
double hillshadingZFactor() const
Returns the z factor used by the hill shading method.
double eyeDomeLightingStrength() const
Returns the strength of the eye dome lighting method.
void setLightAzimuth(double lightAzimuth)
Sets the azimuth of the light (degree) that can be used by some methods (e.g.
double lightAltitude() const
Returns the altitude of the light (degree) that can be used by some methods (e.g.
void setHillshadingMultidirectional(bool multiDirectional)
Sets whether the hill shading method is multidirectional.
double eyeDomeLightingDistance() const
Returns the distance of the eye dome lighting method, that is the distance where the effect is apply ...
void setLightAltitude(double lightAltitude)
Sets the altitude of the light (degree) that can be used by some methods (e.g.
void setEyeDomeLightingStrength(double strength)
Sets the strength of the eye dome lighting method.
void setEyeDomeLightingDistanceUnit(Qgis::RenderUnit unit)
Sets the unit of the distance of the eye dome lighting method set by setEyeDomeLightingDistance().
void setActiveHillshading(bool active)
Sets active the hillshading.
bool isHillshadingMultidirectional() const
Returns whether the hill shading method is multidirectional.
void setHillshadingZFactor(double zFactor)
Sets the z factor used by the hill shading method.
bool isActiveEyeDomeLighting() const
Returns whether eye-dome lighting shading method is active.
void setEyeDomeLightingDistance(double distance)
Sets the distance of the eye dome lighting method, that is the distance where the effect is apply fro...
void setActiveEyeDomeLighting(bool active)
Sets active the eye-dome lighting shading method.
double lightAzimuth() const
Returns the azimuth of the light (degree) that can be used by some methods (e.g.
Qgis::RenderUnit eyeDomeLightingDistanceUnit() const
Returns the unit of the distance of the eye dome lighting method returned by eyeDomeLightingDistance(...
Single scope for storing variables and functions for use within a QgsExpressionContext.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
void setHighlightedVariables(const QStringList &variableNames)
Sets the list of variable names within the context intended to be highlighted to the user.
static const QString EXPR_ORIGINAL_VALUE
Inbuilt variable name for value original value variable.
void fieldChanged(const QString &fieldName)
Emitted when the currently selected field changes.
void changed()
Emitted when the widget's text format settings are changed.
QgsMapLayerConfigWidget(QgsMapLayer *layer, QgsMapCanvas *canvas, QWidget *parent=nullptr)
A panel widget that can be shown in the map style dock.
QgsMapLayer * layer()
Returns the layer the widget is associated with.
Base class for all map layer types.
Definition qgsmaplayer.h:84
void opacityChanged(double opacity)
Emitted when the opacity is changed in the widget, where opacity ranges from 0.0 (transparent) to 1....
void showPanel(QgsPanelWidget *panel)
Emit when you require a panel to be show in the interface.
void openPanel(QgsPanelWidget *panel)
Open a panel or dialog depending on dock mode setting If dock mode is true this method will emit the ...
bool dockMode() const
Returns the dock mode state.
void changed()
Emitted when the widget state changes.
virtual void setDockMode(bool dockMode)
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
Represents a map layer supporting display of point clouds.
Stores metadata about one point cloud renderer class.
void setIcon(const QIcon &icon)
Sets an icon representing the renderer.
virtual QgsPointCloudRendererWidget * createRendererWidget(QgsPointCloudLayer *layer, QgsStyle *style, QgsPointCloudRenderer *oldRenderer)
Returns new instance of settings widget for the renderer.
Convenience metadata class that uses static functions to create point cloud renderer and its widget.
void setWidgetFunction(QgsPointCloudRendererWidgetFunc f)
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
QgsPointCloudRendererPropertiesWidget(QgsPointCloudLayer *layer, QgsStyle *style, QWidget *parent=nullptr)
Constructor for QgsPointCloudRendererPropertiesWidget, associated with the specified layer and style ...
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
void syncToLayer(QgsMapLayer *layer) final
Reset to original (vector layer) values.
void setDockMode(bool dockMode) final
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
Registry of 2D renderers for point clouds.
QgsPointCloudRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
QStringList renderersList() const
Returns a list of available renderers.
static bool layerIsContainedInGroupLayer(QgsProject *project, QgsMapLayer *layer)
Returns true if the specified layer is a child layer from any QgsGroupLayer in the given project.
static QgsProject * instance()
Returns the QgsProject singleton instance.
A store for object properties.
QString expressionString() const
Returns the expression used for the property value.
static QgsProperty fromExpression(const QString &expression, bool isActive=true)
Returns a new ExpressionBasedProperty created from the specified expression.
A container for the context for various read/write operations on objects.
A database of saved style entities, including symbols, color ramps, text formats and others.
Definition qgsstyle.h:91
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
void setMapCanvas(QgsMapCanvas *canvas)
Sets the map canvas associated with the widget.
void setMessageBar(QgsMessageBar *bar)
Sets the message bar associated with the widget.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
void changed()
Emitted when the selected unit is changed, or the definition of the map unit scale is changed.
#define QgsDebugMsgLevel(str, level)
Definition qgslogger.h:80
#define QgsDebugError(str)
Definition qgslogger.h:71
QgsPointCloudRendererWidget *(* QgsPointCloudRendererWidgetFunc)(QgsPointCloudLayer *, QgsStyle *, QgsPointCloudRenderer *)