Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix crash in point cloud layer properties
Don't assume that 3d renderer has a layer ref -- this is usually
only set by Qgs3DMapScene

Fixes #41722
  • Loading branch information
nyalldawson committed Feb 27, 2021
1 parent 9ef1976 commit bf0f812
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
9 changes: 5 additions & 4 deletions src/app/3d/qgspointcloudlayer3drendererwidget.cpp
Expand Up @@ -40,16 +40,17 @@ QgsPointCloudLayer3DRendererWidget::QgsPointCloudLayer3DRendererWidget( QgsPoint
connect( mWidgetPointCloudSymbol, &QgsPointCloud3DSymbolWidget::changed, this, &QgsPointCloudLayer3DRendererWidget::widgetChanged );
}

void QgsPointCloudLayer3DRendererWidget::setRenderer( const QgsPointCloudLayer3DRenderer *renderer )
void QgsPointCloudLayer3DRendererWidget::setRenderer( const QgsPointCloudLayer3DRenderer *renderer, QgsPointCloudLayer *layer )
{
if ( renderer != nullptr )
{
mWidgetPointCloudSymbol->setSymbol( const_cast<QgsPointCloud3DSymbol *>( renderer->symbol() ) );
mWidgetPointCloudSymbol->setPointBudget( renderer->pointRenderingBudget() );
mWidgetPointCloudSymbol->setMaximumScreenError( renderer->maximumScreenError() );
mWidgetPointCloudSymbol->setShowBoundingBoxes( renderer->showBoundingBoxes() );
mWidgetPointCloudSymbol->setPointCloudSize( renderer->layer()->pointCount() );
}
if ( layer )
mWidgetPointCloudSymbol->setPointCloudSize( layer->pointCount() );
}

QgsPointCloudLayer3DRenderer *QgsPointCloudLayer3DRendererWidget::renderer()
Expand Down Expand Up @@ -84,7 +85,7 @@ void QgsPointCloudLayer3DRendererWidget::syncToLayer( QgsMapLayer *layer )
pointCloudRenderer = static_cast<QgsPointCloudLayer3DRenderer *>( r );
pointCloudRenderer->setSymbol( mWidgetPointCloudSymbol->symbol() );
}
setRenderer( pointCloudRenderer );
setRenderer( pointCloudRenderer, qobject_cast< QgsPointCloudLayer * >( layer ) );
mWidgetPointCloudSymbol->setEnabled( true );
}

Expand All @@ -111,7 +112,7 @@ QgsMapLayerConfigWidget *QgsPointCloudLayer3DRendererWidgetFactory::createWidget
return nullptr;
QgsPointCloudLayer3DRendererWidget *widget = new QgsPointCloudLayer3DRendererWidget( pointCloudLayer, canvas, parent );
if ( pointCloudLayer )
widget->setRenderer( dynamic_cast<QgsPointCloudLayer3DRenderer *>( pointCloudLayer->renderer3D() ) );
widget->setRenderer( dynamic_cast<QgsPointCloudLayer3DRenderer *>( pointCloudLayer->renderer3D() ), pointCloudLayer );
return widget;
}

Expand Down
2 changes: 1 addition & 1 deletion src/app/3d/qgspointcloudlayer3drendererwidget.h
Expand Up @@ -40,7 +40,7 @@ class QgsPointCloudLayer3DRendererWidget : public QgsMapLayerConfigWidget
void setDockMode( bool dockMode ) override;

//! no transfer of ownership
void setRenderer( const QgsPointCloudLayer3DRenderer *renderer );
void setRenderer( const QgsPointCloudLayer3DRenderer *renderer, QgsPointCloudLayer *layer );
//! no transfer of ownership
QgsPointCloudLayer3DRenderer *renderer();

Expand Down

0 comments on commit bf0f812

Please sign in to comment.