35 if ( !rendererAbstractMetadata )
38 if ( !rendererMetadata )
43 if ( !iconName.isEmpty() )
52 static void _initRendererWidgetFunctions()
54 static bool sInitialized =
false;
58 _initRenderer( QStringLiteral(
"extent" ), QgsPointCloudExtentRendererWidget::create, QStringLiteral(
"styleicons/pointcloudextent.svg" ) );
59 _initRenderer( QStringLiteral(
"rgb" ), QgsPointCloudRgbRendererWidget::create, QStringLiteral(
"styleicons/multibandcolor.svg" ) );
60 _initRenderer( QStringLiteral(
"ramp" ), QgsPointCloudAttributeByRampRendererWidget::create, QStringLiteral(
"styleicons/singlebandpseudocolor.svg" ) );
61 _initRenderer( QStringLiteral(
"classified" ), QgsPointCloudClassifiedRendererWidget::create, QStringLiteral(
"styleicons/paletted.svg" ) );
73 layout()->setContentsMargins( 0, 0, 0, 0 );
76 _initRendererWidgetFunctions();
80 for (
const QString &name : renderers )
83 cboRenderers->addItem( m->icon(), m->visibleName(), name );
86 cboRenderers->setCurrentIndex( -1 );
91 connect( cboRenderers,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointCloudRendererPropertiesWidget::rendererChanged );
93 connect( mBlendModeComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
99 connect( mPointSizeSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
104 mMaxErrorSpinBox->setClearValue( 0.3 );
106 connect( mMaxErrorSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
109 connect( mPointStyleComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged );
126 mLayer = qobject_cast< QgsPointCloudLayer * >( layer );
128 mBlockChangedSignal =
true;
129 mOpacityWidget->setOpacity( mLayer->
opacity() );
130 mBlendModeComboBox->setBlendMode( mLayer->
blendMode() );
137 int rendererIdx = cboRenderers->findData( rendererName );
138 cboRenderers->setCurrentIndex( rendererIdx );
141 Q_ASSERT( rendererIdx != -1 &&
"there must be a renderer!" );
147 mPointStyleComboBox->setCurrentIndex( mPointStyleComboBox->findData( mLayer->
renderer()->
pointSymbol() ) );
153 mBlockChangedSignal =
false;
165 mLayer->
setOpacity( mOpacityWidget->opacity() );
166 mLayer->
setBlendMode( mBlendModeComboBox->blendMode() );
170 else if ( !cboRenderers->currentData().toString().isEmpty() )
186 void QgsPointCloudRendererPropertiesWidget::rendererChanged()
188 if ( cboRenderers->currentIndex() == -1 )
190 QgsDebugMsg( QStringLiteral(
"No current item -- this should never happen!" ) );
194 QString rendererName = cboRenderers->currentData().toString();
197 std::unique_ptr< QgsPointCloudRenderer > oldRenderer;
198 std::unique_ptr< QgsPointCloudRenderer > newRenderer;
200 newRenderer.reset( mActiveWidget->
renderer() );
204 oldRenderer = std::move( newRenderer );
214 stackedWidget->removeWidget( mActiveWidget );
216 delete mActiveWidget;
217 mActiveWidget =
nullptr;
222 if ( rendererMetadata )
229 mActiveWidget = widget;
230 stackedWidget->addWidget( mActiveWidget );
231 stackedWidget->setCurrentWidget( mActiveWidget );
233 if ( mMapCanvas || mMessageBar )
248 stackedWidget->setCurrentWidget( pageNoWidget );
253 void QgsPointCloudRendererPropertiesWidget::emitWidgetChanged()
255 if ( !mBlockChangedSignal )
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.
Base class for all map layer types.
void setBlendMode(QPainter::CompositionMode blendMode)
Set the blending mode used for rendering a layer.
QPainter::CompositionMode blendMode() const
Returns the current blending mode for a layer.
virtual void setOpacity(double opacity)
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
Represents a map layer supporting display of point clouds.
QgsPointCloudRenderer * renderer()
Returns the 2D renderer for the point cloud.
void setRenderer(QgsPointCloudRenderer *renderer)
Sets the 2D renderer for the point cloud.
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.
const QgsMapUnitScale & pointSizeMapUnitScale() const
Returns the map unit scale used for the point size.
void setMaximumScreenError(double error)
Sets the maximum screen error allowed when rendering the point cloud.
void setPointSizeUnit(const QgsUnitTypes::RenderUnit units)
Sets the units used for the point size.
PointSymbol pointSymbol() const
Returns the symbol used by the renderer for drawing points.
void setPointSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale used for the point size.
virtual QgsPointCloudRenderer * clone() const =0
Create a deep copy of this renderer.
void setPointSize(double size)
Sets the point size.
PointSymbol
Rendering symbols for points.
@ Square
Renders points as squares.
@ Circle
Renders points as circles.
virtual QString type() const =0
Returns the identifier of the renderer type.
void setPointSymbol(PointSymbol symbol)
Sets the symbol used by the renderer for drawing points.
QgsUnitTypes::RenderUnit maximumScreenErrorUnit() const
Returns the unit for the maximum screen error allowed when rendering the point cloud.
QgsUnitTypes::RenderUnit pointSizeUnit() const
Returns the units used for the point size.
double maximumScreenError() const
Returns the maximum screen error allowed when rendering the point cloud.
void setMaximumScreenErrorUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the maximum screen error allowed when rendering the point cloud.
double pointSize() const
Returns the point size.
The class is used as a container of context for various read/write operations on other objects.
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.
QList< QgsUnitTypes::RenderUnit > RenderUnitList
List of render units.
@ RenderMetersInMapUnits
Meters value as Map units.
@ RenderPoints
Points (e.g., for font sizes)
@ RenderMillimeters
Millimeters.
@ RenderMapUnits
Map units.
#define QgsDebugMsgLevel(str, level)
QgsPointCloudRendererWidget *(* QgsPointCloudRendererWidgetFunc)(QgsPointCloudLayer *, QgsStyle *, QgsPointCloudRenderer *)