Skip to content

Commit

Permalink
adjust screen space error from UI
Browse files Browse the repository at this point in the history
  • Loading branch information
NEDJIMAbelgacem authored and wonder-sk committed Dec 7, 2020
1 parent b915c7a commit 85e0e76
Show file tree
Hide file tree
Showing 9 changed files with 75 additions and 4 deletions.
18 changes: 18 additions & 0 deletions python/3d/auto_generated/qgspointcloudlayer3drenderer.sip.in
Expand Up @@ -62,6 +62,24 @@ Returns 3D symbol associated with the renderer
virtual void resolveReferences( const QgsProject &project );


double maximumScreenError() const;
%Docstring
Returns the maximum screen error allowed when rendering the point cloud.

Larger values result in a faster render with less points rendered.

.. seealso:: :py:func:`setMaximumScreenError`
%End

void setMaximumScreenError( double error );
%Docstring
Sets the maximum screen ``error`` allowed when rendering the point cloud.

Larger values result in a faster render with less points rendered.

.. seealso:: :py:func:`maximumScreenError`
%End

private:
QgsPointCloudLayer3DRenderer( const QgsPointCloudLayer3DRenderer & );
QgsPointCloudLayer3DRenderer &operator=( const QgsPointCloudLayer3DRenderer & );
Expand Down
12 changes: 11 additions & 1 deletion src/3d/qgspointcloudlayer3drenderer.cpp
Expand Up @@ -99,7 +99,7 @@ Qt3DCore::QEntity *QgsPointCloudLayer3DRenderer::createEntity( const Qgs3DMapSet
if ( !mSymbol )
return nullptr;

return new QgsPointCloudLayerChunkedEntity( pcl->dataProvider()->index(), map, dynamic_cast<QgsPointCloud3DSymbol *>( mSymbol->clone() ) );
return new QgsPointCloudLayerChunkedEntity( pcl->dataProvider()->index(), map, dynamic_cast<QgsPointCloud3DSymbol *>( mSymbol->clone() ), maximumScreenError() );
}

void QgsPointCloudLayer3DRenderer::setSymbol( QgsPointCloud3DSymbol *symbol )
Expand Down Expand Up @@ -148,3 +148,13 @@ void QgsPointCloudLayer3DRenderer::resolveReferences( const QgsProject &project
{
mLayerRef.setLayer( project.mapLayer( mLayerRef.layerId ) );
}

double QgsPointCloudLayer3DRenderer::maximumScreenError() const
{
return mMaximumScreenError;
}

void QgsPointCloudLayer3DRenderer::setMaximumScreenError( double error )
{
mMaximumScreenError = error;
}
19 changes: 19 additions & 0 deletions src/3d/qgspointcloudlayer3drenderer.h
Expand Up @@ -178,9 +178,28 @@ class _3D_EXPORT QgsPointCloudLayer3DRenderer : public QgsAbstract3DRenderer
void readXml( const QDomElement &elem, const QgsReadWriteContext &context ) override;
void resolveReferences( const QgsProject &project ) override;

/**
* Returns the maximum screen error allowed when rendering the point cloud.
*
* Larger values result in a faster render with less points rendered.
*
* \see setMaximumScreenError()
*/
double maximumScreenError() const;

/**
* Sets the maximum screen \a error allowed when rendering the point cloud.
*
* Larger values result in a faster render with less points rendered.
*
* \see maximumScreenError()
*/
void setMaximumScreenError( double error );

private:
QgsMapLayerRef mLayerRef; //!< Layer used to extract mesh data from
std::unique_ptr< QgsPointCloud3DSymbol > mSymbol;
double mMaximumScreenError = 1.0;

private:
#ifdef SIP_RUN
Expand Down
4 changes: 2 additions & 2 deletions src/3d/qgspointcloudlayerchunkloader_p.cpp
Expand Up @@ -190,8 +190,8 @@ QgsAABB nodeBoundsToAABB( QgsPointCloudDataBounds nodeBounds, QgsVector3D offset
}


QgsPointCloudLayerChunkedEntity::QgsPointCloudLayerChunkedEntity( QgsPointCloudIndex *pc, const Qgs3DMapSettings &map, QgsPointCloud3DSymbol *symbol )
: QgsChunkedEntity( 5, // max. allowed screen error (in pixels) -- // TODO
QgsPointCloudLayerChunkedEntity::QgsPointCloudLayerChunkedEntity( QgsPointCloudIndex *pc, const Qgs3DMapSettings &map, QgsPointCloud3DSymbol *symbol, float maxScreenError )
: QgsChunkedEntity( maxScreenError,
new QgsPointCloudLayerChunkLoaderFactory( map, pc, symbol ), true )
{
setUsingAdditiveStrategy( true );
Expand Down
2 changes: 1 addition & 1 deletion src/3d/qgspointcloudlayerchunkloader_p.h
Expand Up @@ -115,7 +115,7 @@ class QgsPointCloudLayerChunkedEntity : public QgsChunkedEntity
{
Q_OBJECT
public:
explicit QgsPointCloudLayerChunkedEntity( QgsPointCloudIndex *pc, const Qgs3DMapSettings &map, QgsPointCloud3DSymbol *symbol );
explicit QgsPointCloudLayerChunkedEntity( QgsPointCloudIndex *pc, const Qgs3DMapSettings &map, QgsPointCloud3DSymbol *symbol, float maxScreenError );

~QgsPointCloudLayerChunkedEntity();
};
Expand Down
5 changes: 5 additions & 0 deletions src/app/3d/qgspointcloud3dsymbolwidget.cpp
Expand Up @@ -527,3 +527,8 @@ void QgsPointCloud3DSymbolWidget::blueAttributeChanged()
}
}
}

double QgsPointCloud3DSymbolWidget::maximumScreenError() const
{
return mMaxScreenErrorSpinBox->value();
}
1 change: 1 addition & 0 deletions src/app/3d/qgspointcloud3dsymbolwidget.h
Expand Up @@ -32,6 +32,7 @@ class QgsPointCloud3DSymbolWidget : public QWidget, private Ui::QgsPointCloud3DS
void setSymbol( QgsPointCloud3DSymbol *symbol );

QgsPointCloud3DSymbol *symbol() const;
double maximumScreenError() const;

private slots:
void reloadColorRampShaderMinMax();
Expand Down
1 change: 1 addition & 0 deletions src/app/3d/qgspointcloudlayer3drendererwidget.cpp
Expand Up @@ -50,6 +50,7 @@ QgsPointCloudLayer3DRenderer *QgsPointCloudLayer3DRendererWidget::renderer()
QgsPointCloud3DSymbol *sym = mWidgetPointCloudSymbol->symbol();
renderer->setSymbol( sym );
renderer->setLayer( qobject_cast<QgsPointCloudLayer *>( mLayer ) );
renderer->setMaximumScreenError( mWidgetPointCloudSymbol->maximumScreenError() );
return renderer;
}

Expand Down
17 changes: 17 additions & 0 deletions src/ui/3d/qgspointcloud3dsymbolwidget.ui
Expand Up @@ -58,6 +58,23 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="mMaxScreenErrorSpinBox">
<property name="maximum">
<double>100000.000000000000000</double>
</property>
<property name="value">
<double>5.000000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Maximum screen space error</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
Expand Down

0 comments on commit 85e0e76

Please sign in to comment.