diff --git a/python/core/auto_additions/qgspointcloudrenderer.py b/python/core/auto_additions/qgspointcloudrenderer.py new file mode 100644 index 00000000000..9449277ebe0 --- /dev/null +++ b/python/core/auto_additions/qgspointcloudrenderer.py @@ -0,0 +1,7 @@ +# The following has been generated automatically from src/core/pointcloud/qgspointcloudrenderer.h +# monkey patching scoped based enum +QgsPointCloudRenderer.DrawOrder.Default.__doc__ = "Draw points in the order they are stored" +QgsPointCloudRenderer.DrawOrder.BottomToTop.__doc__ = "Draw points with larger Z values last" +QgsPointCloudRenderer.DrawOrder.TopToBottom.__doc__ = "Draw points with larger Z values first" +QgsPointCloudRenderer.DrawOrder.__doc__ = 'Pointcloud rendering order for 2d views\n/since QGIS 3.24\n\n' + '* ``Default``: ' + QgsPointCloudRenderer.DrawOrder.Default.__doc__ + '\n' + '* ``BottomToTop``: ' + QgsPointCloudRenderer.DrawOrder.BottomToTop.__doc__ + '\n' + '* ``TopToBottom``: ' + QgsPointCloudRenderer.DrawOrder.TopToBottom.__doc__ +# -- diff --git a/python/core/auto_generated/pointcloud/qgspointcloudrenderer.sip.in b/python/core/auto_generated/pointcloud/qgspointcloudrenderer.sip.in index 701b77ab100..ed1bc316da1 100644 --- a/python/core/auto_generated/pointcloud/qgspointcloudrenderer.sip.in +++ b/python/core/auto_generated/pointcloud/qgspointcloudrenderer.sip.in @@ -197,7 +197,7 @@ Abstract base class for 2d point cloud renderers. Circle, }; - enum DrawOrder + enum class DrawOrder { Default, BottomToTop, diff --git a/src/core/pointcloud/qgspointcloudlayerrenderer.cpp b/src/core/pointcloud/qgspointcloudlayerrenderer.cpp index 0811571c90d..4059dd292a2 100644 --- a/src/core/pointcloud/qgspointcloudlayerrenderer.cpp +++ b/src/core/pointcloud/qgspointcloudlayerrenderer.cpp @@ -446,13 +446,21 @@ int QgsPointCloudLayerRenderer::renderNodesSorted( const QVector a, QPair b ) { return a.second < b.second; } ); - else if ( order == QgsPointCloudRenderer::DrawOrder::TopToBottom ) - std::sort( allPairs.begin(), allPairs.end(), []( QPair a, QPair b ) { return a.second > b.second; } ); + switch ( order ) + { + case QgsPointCloudRenderer::DrawOrder::BottomToTop: + std::sort( allPairs.begin(), allPairs.end(), []( QPair a, QPair b ) { return a.second < b.second; } ); + break; + case QgsPointCloudRenderer::DrawOrder::TopToBottom: + std::sort( allPairs.begin(), allPairs.end(), []( QPair a, QPair b ) { return a.second > b.second; } ); + break; + case QgsPointCloudRenderer::DrawOrder::Default: + break; + } // Now we can reconstruct a byte array sorted by Z value QByteArray sortedByteArray; + sortedByteArray.reserve( allPairs.size() ); for ( QPair pair : allPairs ) sortedByteArray.append( allByteArrays.mid( pair.first * recordSize, recordSize ) ); diff --git a/src/core/pointcloud/qgspointcloudrenderer.cpp b/src/core/pointcloud/qgspointcloudrenderer.cpp index becb0525f7f..4c8c6c02901 100644 --- a/src/core/pointcloud/qgspointcloudrenderer.cpp +++ b/src/core/pointcloud/qgspointcloudrenderer.cpp @@ -186,7 +186,7 @@ void QgsPointCloudRenderer::saveCommonProperties( QDomElement &element, const Qg element.setAttribute( QStringLiteral( "maximumScreenError" ), qgsDoubleToString( mMaximumScreenError ) ); element.setAttribute( QStringLiteral( "maximumScreenErrorUnit" ), QgsUnitTypes::encodeUnit( mMaximumScreenErrorUnit ) ); element.setAttribute( QStringLiteral( "pointSymbol" ), QString::number( mPointSymbol ) ); - element.setAttribute( QStringLiteral( "drawOrder2d" ), QString::number( mDrawOrder2d ) ); + element.setAttribute( QStringLiteral( "drawOrder2d" ), QString::number( static_cast< int >( mDrawOrder2d ) ) ); } QgsPointCloudRenderer::PointSymbol QgsPointCloudRenderer::pointSymbol() const diff --git a/src/core/pointcloud/qgspointcloudrenderer.h b/src/core/pointcloud/qgspointcloudrenderer.h index a9d3a5e07c3..57a3b8f6b06 100644 --- a/src/core/pointcloud/qgspointcloudrenderer.h +++ b/src/core/pointcloud/qgspointcloudrenderer.h @@ -276,7 +276,7 @@ class CORE_EXPORT QgsPointCloudRenderer * Pointcloud rendering order for 2d views * /since QGIS 3.24 */ - enum DrawOrder + enum class DrawOrder : int { Default, //!< Draw points in the order they are stored BottomToTop, //!< Draw points with larger Z values last diff --git a/src/gui/pointcloud/qgspointcloudrendererpropertieswidget.cpp b/src/gui/pointcloud/qgspointcloudrendererpropertieswidget.cpp index dc9af1d3c31..d474ff07ae5 100644 --- a/src/gui/pointcloud/qgspointcloudrendererpropertieswidget.cpp +++ b/src/gui/pointcloud/qgspointcloudrendererpropertieswidget.cpp @@ -101,9 +101,9 @@ QgsPointCloudRendererPropertiesWidget::QgsPointCloudRendererPropertiesWidget( Qg connect( mPointSizeSpinBox, qOverload( &QgsDoubleSpinBox::valueChanged ), this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged ); connect( mPointSizeUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsPointCloudRendererPropertiesWidget::emitWidgetChanged ); - mDrawOrderComboBox->addItem( tr( "Default" ), QgsPointCloudRenderer::DrawOrder::Default ); - mDrawOrderComboBox->addItem( tr( "Bottom to top" ), QgsPointCloudRenderer::DrawOrder::BottomToTop ); - mDrawOrderComboBox->addItem( tr( "Top to bottom" ), QgsPointCloudRenderer::DrawOrder::TopToBottom ); + mDrawOrderComboBox->addItem( tr( "Default" ), static_cast< int >( QgsPointCloudRenderer::DrawOrder::Default ) ); + mDrawOrderComboBox->addItem( tr( "Bottom to Top" ), static_cast< int >( QgsPointCloudRenderer::DrawOrder::BottomToTop ) ); + mDrawOrderComboBox->addItem( tr( "Top to Bottom" ), static_cast< int >( QgsPointCloudRenderer::DrawOrder::TopToBottom ) ); mMaxErrorUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches ); @@ -152,7 +152,7 @@ void QgsPointCloudRendererPropertiesWidget::syncToLayer( QgsMapLayer *layer ) mPointSizeUnitWidget->setMapUnitScale( mLayer->renderer()->pointSizeMapUnitScale() ); mPointStyleComboBox->setCurrentIndex( mPointStyleComboBox->findData( mLayer->renderer()->pointSymbol() ) ); - mDrawOrderComboBox->setCurrentIndex( mDrawOrderComboBox->findData( mLayer->renderer()->drawOrder2d() ) ); + mDrawOrderComboBox->setCurrentIndex( mDrawOrderComboBox->findData( static_cast< int >( mLayer->renderer()->drawOrder2d() ) ) ); mMaxErrorSpinBox->setValue( mLayer->renderer()->maximumScreenError() ); mMaxErrorUnitWidget->setUnit( mLayer->renderer()->maximumScreenErrorUnit() );