QGIS API Documentation 4.1.0-Master (376402f9aeb)
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"
20#include "qgsfontbutton.h"
21#include "qgslogger.h"
26#include "qgspointcloudlayer.h"
31#include "qgsproject.h"
32#include "qgsprojectutils.h"
33#include "qgsstyle.h"
35#include "qgstextformatwidget.h"
36#include "qgsvirtualpointcloudprovider.h"
37
38#include <QString>
39
40#include "moc_qgspointcloudrendererpropertieswidget.cpp"
41
42using namespace Qt::StringLiterals;
43
44static bool initPointCloudRenderer( const QString &name, QgsPointCloudRendererWidgetFunc f, const QString &iconName = QString() )
45{
47 if ( !rendererAbstractMetadata )
48 return false;
49 QgsPointCloudRendererMetadata *rendererMetadata = dynamic_cast<QgsPointCloudRendererMetadata *>( rendererAbstractMetadata );
50 if ( !rendererMetadata )
51 return false;
52
53 rendererMetadata->setWidgetFunction( f );
54
55 if ( !iconName.isEmpty() )
56 {
57 rendererMetadata->setIcon( QgsApplication::getThemeIcon( iconName ) );
58 }
59
60 QgsDebugMsgLevel( "Set for " + name, 2 );
61 return true;
62}
63
64void QgsPointCloudRendererPropertiesWidget::initRendererWidgetFunctions()
65{
66 static bool sInitialized = false;
67 if ( sInitialized )
68 return;
69
70 initPointCloudRenderer( u"extent"_s, QgsPointCloudExtentRendererWidget::create, u"styleicons/pointcloudextent.svg"_s );
71 initPointCloudRenderer( u"rgb"_s, QgsPointCloudRgbRendererWidget::create, u"styleicons/multibandcolor.svg"_s );
72 initPointCloudRenderer( u"ramp"_s, QgsPointCloudAttributeByRampRendererWidget::create, u"styleicons/singlebandpseudocolor.svg"_s );
73 initPointCloudRenderer( u"classified"_s, QgsPointCloudClassifiedRendererWidget::create, u"styleicons/paletted.svg"_s );
74
75 sInitialized = true;
76}
77
79 : QgsMapLayerConfigWidget( layer, nullptr, parent )
80 , mLayer( layer )
81 , mStyle( style )
82{
83 setupUi( this );
84
85 layout()->setContentsMargins( 0, 0, 0, 0 );
86
87 // initialize registry's widget functions
88 initRendererWidgetFunctions();
89
91 const QStringList renderers = reg->renderersList();
92 for ( const QString &name : renderers )
93 {
95 cboRenderers->addItem( m->icon(), m->visibleName(), name );
96 }
97
98 cboRenderers->setCurrentIndex( -1 ); // set no current renderer
99
100 mPointStyleComboBox->addItem( tr( "Square" ), QVariant::fromValue( Qgis::PointCloudSymbol::Square ) );
101 mPointStyleComboBox->addItem( tr( "Circle" ), QVariant::fromValue( Qgis::PointCloudSymbol::Circle ) );
102
103 connect( cboRenderers, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::rendererChanged );
104
105 connect( mBlendModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
106 connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
107
108 mPointSizeUnitWidget->setUnits(
110 );
111
112 connect( mPointSizeSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
113 connect( mPointSizeUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
114
115 mDrawOrderComboBox->addItem( tr( "Default" ), QVariant::fromValue( Qgis::PointCloudDrawOrder::Default ) );
116 mDrawOrderComboBox->addItem( tr( "Bottom to Top" ), QVariant::fromValue( Qgis::PointCloudDrawOrder::BottomToTop ) );
117 mDrawOrderComboBox->addItem( tr( "Top to Bottom" ), QVariant::fromValue( Qgis::PointCloudDrawOrder::TopToBottom ) );
118
119 connect( mDirectionalLightWidget, &QgsDirectionalLightWidget::directionChanged, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
120
121 mEdlDistanceSpinBox->setClearValue( 0.5 );
122 mEdlStrengthSpinBox->setClearValue( 1000 );
123 connect( mEdlStrengthSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
124 connect( mEdlDistanceSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
125 connect( mEdlDistanceUnit, &QgsUnitSelectionWidget::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
126
127 mHillshadingZFactorSpinBox->setClearValue( 1.0 );
128 connect( mHillshadingZFactorSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
129 connect( mHillshadingMultidirCheckBox, &QCheckBox::toggled, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
130
131 mMaxErrorUnitWidget->setUnits(
133 );
134 mMaxErrorSpinBox->setClearValue( 0.3 );
135
136 mHorizontalTriangleThresholdSpinBox->setClearValue( 5.0 );
137 mHorizontalTriangleUnitWidget->setUnits(
139 );
140
141 connect( mMaxErrorSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
142 connect( mMaxErrorUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
143
144 connect( mPointStyleComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
145 connect( mDrawOrderComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
146
147 connect( mEyeDomeLightingGroupBox, &QGroupBox::toggled, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
148 connect( mHillshadeGroupBox, &QGroupBox::toggled, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
149
150 connect( mTriangulateGroupBox, &QGroupBox::toggled, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
151 connect( mHorizontalTriangleCheckBox, &QCheckBox::clicked, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
152 connect( mHorizontalTriangleThresholdSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
153 connect( mHorizontalTriangleUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
154
155 // show virtual point cloud options only when vpc layer is selected
156 if ( !mLayer->dataProvider()->subIndexes().isEmpty() )
157 {
158 mLabelOptions->setDialogTitle( tr( "Customize label text" ) );
159 mLabelOptions->setText( tr( "Label format" ) );
160 connect( mLabels, &QCheckBox::stateChanged, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
161 connect( mLabelOptions, &QgsFontButton::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
162 mZoomOutOptions->addItem( tr( "Show Extents Only" ), QVariant::fromValue( Qgis::PointCloudZoomOutRenderBehavior::RenderExtents ) );
163
164 if ( const QgsVirtualPointCloudProvider *vpcProvider = dynamic_cast<QgsVirtualPointCloudProvider *>( mLayer->dataProvider() ) )
165 {
166 if ( !vpcProvider->overviews().isEmpty() )
167 {
168 mZoomOutOptions->addItem( tr( "Show Overview Only" ), QVariant::fromValue( Qgis::PointCloudZoomOutRenderBehavior::RenderOverview ) );
169 mZoomOutOptions->addItem( tr( "Show Extents Over Overview" ), QVariant::fromValue( Qgis::PointCloudZoomOutRenderBehavior::RenderOverviewAndExtents ) );
170 }
171
172 for ( auto it = mOverviewSwitchingScaleMap.constBegin(); it != mOverviewSwitchingScaleMap.constEnd(); ++it )
173 {
174 mOverviewSwitchingScale->addItem( it.value(), it.key() );
175 }
176 setOverviewSwitchingScale( 1.0 );
177 }
178 else
179 {
180 mZoomOutOptions->setEnabled( false );
181 mOverviewSwitchingScale->setEnabled( false );
182 }
183
184 connect( mOverviewSwitchingScale, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
185
186 connect( mZoomOutOptions, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( int ) {
187 switch ( mZoomOutOptions->currentData().value<Qgis::PointCloudZoomOutRenderBehavior>() )
188 {
190 mLabels->setEnabled( false );
191 mLabelOptions->setEnabled( false );
192 break;
195 mLabels->setEnabled( true );
196 mLabelOptions->setEnabled( true );
197 }
198 emitWidgetChanged();
199 } );
200 }
201 else
202 {
203 mVpcGroupBox->setVisible( false );
204 }
205
206 syncToLayer( layer );
207}
208
210{
211 mMapCanvas = context.mapCanvas();
212 mMessageBar = context.messageBar();
213 if ( mActiveWidget )
214 {
215 mActiveWidget->setContext( context );
216 }
217}
218
220{
221 mLayer = qobject_cast<QgsPointCloudLayer *>( layer );
222
223 mBlockChangedSignal = true;
224 mOpacityWidget->setOpacity( mLayer->opacity() );
225 mBlendModeComboBox->setShowClippingModes( QgsProjectUtils::layerIsContainedInGroupLayer( QgsProject::instance(), mLayer ) );
226 mBlendModeComboBox->setBlendMode( mLayer->blendMode() );
227
228 if ( mLayer->renderer() )
229 {
230 // set current renderer from layer
231 const QString rendererName = mLayer->renderer()->type();
232
233 const int rendererIdx = cboRenderers->findData( rendererName );
234 if ( cboRenderers->currentIndex() != rendererIdx )
235 {
236 cboRenderers->setCurrentIndex( rendererIdx );
237 }
238 else
239 {
240 rendererChanged();
241 }
242
243 // no renderer found... this mustn't happen
244 Q_ASSERT( rendererIdx != -1 && "there must be a renderer!" );
245
246 mPointSizeSpinBox->setValue( mLayer->renderer()->pointSize() );
247 mPointSizeUnitWidget->setUnit( mLayer->renderer()->pointSizeUnit() );
248 mPointSizeUnitWidget->setMapUnitScale( mLayer->renderer()->pointSizeMapUnitScale() );
249
250 mPointStyleComboBox->setCurrentIndex( mPointStyleComboBox->findData( QVariant::fromValue( mLayer->renderer()->pointSymbol() ) ) );
251 mDrawOrderComboBox->setCurrentIndex( mDrawOrderComboBox->findData( QVariant::fromValue( mLayer->renderer()->drawOrder2d() ) ) );
252
253 mMaxErrorSpinBox->setValue( mLayer->renderer()->maximumScreenError() );
254 mMaxErrorUnitWidget->setUnit( mLayer->renderer()->maximumScreenErrorUnit() );
255 setOverviewSwitchingScale( mLayer->renderer()->overviewSwitchingScale() );
256
257 mTriangulateGroupBox->setChecked( mLayer->renderer()->renderAsTriangles() );
258 mHorizontalTriangleCheckBox->setChecked( mLayer->renderer()->horizontalTriangleFilter() );
259 mHorizontalTriangleThresholdSpinBox->setValue( mLayer->renderer()->horizontalTriangleFilterThreshold() );
260 mHorizontalTriangleUnitWidget->setUnit( mLayer->renderer()->horizontalTriangleFilterUnit() );
261
262 if ( !mLayer->dataProvider()->subIndexes().isEmpty() )
263 {
264 mLabels->setChecked( mLayer->renderer()->showLabels() );
265 mLabelOptions->setTextFormat( mLayer->renderer()->labelTextFormat() );
266 mZoomOutOptions->setCurrentIndex( mZoomOutOptions->findData( QVariant::fromValue( mLayer->renderer()->zoomOutBehavior() ) ) );
267 switch ( mLayer->renderer()->zoomOutBehavior() )
268 {
270 mLabels->setEnabled( false );
271 mLabelOptions->setEnabled( false );
272 break;
273 default:
274 mLabels->setEnabled( true );
275 mLabelOptions->setEnabled( true );
276 }
277 }
278
279 QgsElevationShadingRenderer shadingRenderer = mLayer->renderer()->elevationShadingRenderer();
280
281 mEyeDomeLightingGroupBox->setChecked( shadingRenderer.isActiveEyeDomeLighting() );
282 mHillshadeGroupBox->setChecked( shadingRenderer.isActiveHillshading() );
283
284 mEdlStrengthSpinBox->setValue( shadingRenderer.eyeDomeLightingStrength() );
285 mEdlDistanceSpinBox->setValue( shadingRenderer.eyeDomeLightingDistance() );
286 mEdlDistanceUnit->setUnits(
288 );
289 mEdlDistanceUnit->setUnit( shadingRenderer.eyeDomeLightingDistanceUnit() );
290 mHillshadingMultidirCheckBox->setChecked( shadingRenderer.isHillshadingMultidirectional() );
291 mHillshadingZFactorSpinBox->setValue( shadingRenderer.hillshadingZFactor() );
292
293 mDirectionalLightWidget->setAltitude( shadingRenderer.lightAltitude() );
294 mDirectionalLightWidget->setAzimuth( shadingRenderer.lightAzimuth() );
295 mDirectionalLightWidget->setEnableAzimuth( !mHillshadingMultidirCheckBox->isChecked() );
296 }
297
298 mBlockChangedSignal = false;
299}
300
302{
303 if ( mActiveWidget )
304 mActiveWidget->setDockMode( dockMode );
306}
307
309{
310 mLayer->setOpacity( mOpacityWidget->opacity() );
311 mLayer->setBlendMode( mBlendModeComboBox->blendMode() );
312
313 if ( mActiveWidget )
314 mLayer->setRenderer( mActiveWidget->renderer() );
315 else if ( !cboRenderers->currentData().toString().isEmpty() )
316 {
317 QDomElement elem;
318 if ( QgsPointCloudRendererAbstractMetadata *metadata = QgsApplication::pointCloudRendererRegistry()->rendererMetadata( cboRenderers->currentData().toString() ) )
319 {
320 mLayer->setRenderer( metadata->createRenderer( elem, QgsReadWriteContext() ) );
321 }
322 }
323
324 mLayer->renderer()->setPointSize( mPointSizeSpinBox->value() );
325 mLayer->renderer()->setPointSizeUnit( mPointSizeUnitWidget->unit() );
326 mLayer->renderer()->setPointSizeMapUnitScale( mPointSizeUnitWidget->getMapUnitScale() );
327
328 mLayer->renderer()->setPointSymbol( mPointStyleComboBox->currentData().value<Qgis::PointCloudSymbol>() );
329
330 mLayer->renderer()->setMaximumScreenError( mMaxErrorSpinBox->value() );
331 mLayer->renderer()->setMaximumScreenErrorUnit( mMaxErrorUnitWidget->unit() );
332 mLayer->renderer()->setDrawOrder2d( mDrawOrderComboBox->currentData().value<Qgis::PointCloudDrawOrder>() );
333
334 mLayer->renderer()->setRenderAsTriangles( mTriangulateGroupBox->isChecked() );
335 mLayer->renderer()->setHorizontalTriangleFilter( mHorizontalTriangleCheckBox->isChecked() );
336 mLayer->renderer()->setHorizontalTriangleFilterThreshold( mHorizontalTriangleThresholdSpinBox->value() );
337 mLayer->renderer()->setHorizontalTriangleFilterUnit( mHorizontalTriangleUnitWidget->unit() );
338
339 mLayer->renderer()->setShowLabels( mLabels->isChecked() );
340 mLayer->renderer()->setLabelTextFormat( mLabelOptions->textFormat() );
341 mLayer->renderer()->setZoomOutBehavior( mZoomOutOptions->currentData().value<Qgis::PointCloudZoomOutRenderBehavior>() );
342
343 mLayer->renderer()->setOverviewSwitchingScale( overviewSwitchingScale() );
344
345 QgsElevationShadingRenderer shadingRenderer;
346
347 shadingRenderer.setActiveEyeDomeLighting( mEyeDomeLightingGroupBox->isChecked() );
348 shadingRenderer.setActiveHillshading( mHillshadeGroupBox->isChecked() );
349 shadingRenderer.setActive( mEyeDomeLightingGroupBox->isChecked() || mHillshadeGroupBox->isChecked() );
350 shadingRenderer.setEyeDomeLightingStrength( mEdlStrengthSpinBox->value() );
351 shadingRenderer.setEyeDomeLightingDistance( mEdlDistanceSpinBox->value() );
352 shadingRenderer.setEyeDomeLightingDistanceUnit( mEdlDistanceUnit->unit() );
353 shadingRenderer.setHillshadingMultidirectional( mHillshadingMultidirCheckBox->isChecked() );
354 shadingRenderer.setHillshadingZFactor( mHillshadingZFactorSpinBox->value() );
355
356 shadingRenderer.setLightAltitude( mDirectionalLightWidget->altitude() );
357 shadingRenderer.setLightAzimuth( mDirectionalLightWidget->azimuth() );
358
359 mLayer->renderer()->setElevationShadingRenderer( shadingRenderer );
360}
361
362void QgsPointCloudRendererPropertiesWidget::rendererChanged()
363{
364 if ( cboRenderers->currentIndex() == -1 )
365 {
366 QgsDebugError( u"No current item -- this should never happen!"_s );
367 return;
368 }
369
370 const QString rendererName = cboRenderers->currentData().toString();
371
372 //Retrieve the previous renderer: from the old active widget if possible, otherwise from the layer
373 std::unique_ptr<QgsPointCloudRenderer> oldRenderer;
374 std::unique_ptr<QgsPointCloudRenderer> newRenderer;
375 if ( mActiveWidget )
376 newRenderer.reset( mActiveWidget->renderer() );
377
378 if ( newRenderer )
379 {
380 oldRenderer = std::move( newRenderer );
381 }
382 else
383 {
384 oldRenderer.reset( mLayer->renderer()->clone() );
385 }
386
387 // get rid of old active widget (if any)
388 if ( mActiveWidget )
389 {
390 stackedWidget->removeWidget( mActiveWidget );
391
392 delete mActiveWidget;
393 mActiveWidget = nullptr;
394 }
395
396 QgsPointCloudRendererWidget *widget = nullptr;
397 QgsPointCloudRendererAbstractMetadata *rendererMetadata = QgsApplication::pointCloudRendererRegistry()->rendererMetadata( rendererName );
398 if ( rendererMetadata )
399 widget = rendererMetadata->createRendererWidget( mLayer, mStyle, oldRenderer.get() );
400 oldRenderer.reset();
401
402 if ( widget )
403 {
404 // instantiate the widget and set as active
405 mActiveWidget = widget;
406 stackedWidget->addWidget( mActiveWidget );
407 stackedWidget->setCurrentWidget( mActiveWidget );
408
409 if ( mMapCanvas || mMessageBar )
410 {
411 QgsSymbolWidgetContext context;
412 context.setMapCanvas( mMapCanvas );
413 context.setMessageBar( mMessageBar );
414 mActiveWidget->setContext( context );
415 }
416
419 widget->setDockMode( dockMode() );
420 }
421 else
422 {
423 // set default "no edit widget available" page
424 stackedWidget->setCurrentWidget( pageNoWidget );
425 }
426 emitWidgetChanged();
427}
428
429void QgsPointCloudRendererPropertiesWidget::emitWidgetChanged()
430{
431 if ( !mBlockChangedSignal )
432 emit widgetChanged();
433}
434
435void QgsPointCloudRendererPropertiesWidget::setOverviewSwitchingScale( double scale )
436{
437 mOverviewSwitchingScale->setCurrentIndex( mOverviewSwitchingScale->findData( scale ) );
438}
439
440double QgsPointCloudRendererPropertiesWidget::overviewSwitchingScale() const
441{
442 return mOverviewSwitchingScaleMap.key( mOverviewSwitchingScale->currentText() );
443}
PointCloudSymbol
Rendering symbols for point cloud points.
Definition qgis.h:4515
@ Circle
Renders points as circles.
Definition qgis.h:4517
@ Square
Renders points as squares.
Definition qgis.h:4516
PointCloudDrawOrder
Pointcloud rendering order for 2d views.
Definition qgis.h:4527
@ BottomToTop
Draw points with larger Z values last.
Definition qgis.h:4529
@ Default
Draw points in the order they are stored.
Definition qgis.h:4528
@ TopToBottom
Draw points with larger Z values first.
Definition qgis.h:4530
PointCloudZoomOutRenderBehavior
Point cloud zoom out options.
Definition qgis.h:6599
@ RenderOverviewAndExtents
Render point cloud extents over overview point cloud.
Definition qgis.h:6602
@ RenderExtents
Render only point cloud extents when zoomed out.
Definition qgis.h:6600
@ RenderOverview
Render overview point cloud when zoomed out.
Definition qgis.h:6601
@ Millimeters
Millimeters.
Definition qgis.h:5497
@ Points
Points (e.g., for font sizes).
Definition qgis.h:5501
@ MapUnits
Map units.
Definition qgis.h:5498
@ Pixels
Pixels.
Definition qgis.h:5499
@ Inches
Inches.
Definition qgis.h:5502
@ MetersInMapUnits
Meters value as Map units.
Definition qgis.h:5504
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(...
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.
Base class for all map layer types.
Definition qgsmaplayer.h:83
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 widgetChanged()
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 ...
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 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:63
#define QgsDebugError(str)
Definition qgslogger.h:59
QgsPointCloudRendererWidget *(* QgsPointCloudRendererWidgetFunc)(QgsPointCloudLayer *, QgsStyle *, QgsPointCloudRenderer *)