add some basic skelet for point cloud data providers

This commit is contained in:
Peter Petrik 2020-10-21 16:10:23 +02:00 committed by Nyall Dawson
parent 9039aadf6f
commit b796dbb07b
30 changed files with 310 additions and 44 deletions

View File

@ -0,0 +1,63 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/pointcloud/qgspointclouddataprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
class QgsPointCloudDataProvider: QgsDataProvider
{
%Docstring
Base class for providing data for QgsPointCloudLayer
Responsible for reading native point cloud data and returning the indexed data?
.. note::
The API is considered EXPERIMENTAL and can be changed without a notice
.. versionadded:: 3.18
%End
%TypeHeaderCode
#include "qgspointclouddataprovider.h"
%End
public:
QgsPointCloudDataProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
%Docstring
Ctor
%End
~QgsPointCloudDataProvider();
virtual QgsCoordinateReferenceSystem crs() const;
virtual QgsRectangle extent() const;
virtual bool isValid() const;
virtual QString name() const;
virtual QString description() const;
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/pointcloud/qgspointclouddataprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

View File

@ -47,6 +47,9 @@ QgsPointCloudLayer cannot be copied.
virtual QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) /Factory/;
virtual QgsPointCloudDataProvider *dataProvider();
virtual bool readXml( const QDomNode &layerNode, QgsReadWriteContext &context );
@ -64,7 +67,6 @@ QgsPointCloudLayer cannot be copied.
virtual QString loadDefaultStyle( bool &resultFlag /Out/ );
private: // Private methods
QgsPointCloudLayer( const QgsPointCloudLayer &rhs );
};

View File

@ -35,12 +35,8 @@ Represents a 2D renderer of point cloud data
explicit QgsPointCloudRenderer( QgsPointCloudLayer *layer, QgsRenderContext &context );
~QgsPointCloudRenderer();
virtual bool render();
%Docstring
QgsPointCloudRenderer cannot be copied.
%End
void writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const;
void readXml( const QDomElement &elem, const QgsReadWriteContext &context );

View File

@ -33,6 +33,10 @@ Abstract base class for spatial data provider implementations.
{
sipType = sipType_QgsMeshDataProvider;
}
else if ( qobject_cast<QgsPointCloudDataProvider *>( sipCpp ) )
{
sipType = sipType_QgsPointCloudDataProvider;
}
else
{
sipType = 0;

View File

@ -439,6 +439,7 @@
%Include auto_generated/mesh/qgsmeshcalculator.sip
%Include auto_generated/pointcloud/qgspointcloudlayer.sip
%Include auto_generated/pointcloud/qgspointcloudrenderer.sip
%Include auto_generated/pointcloud/qgspointclouddataprovider.sip
%Include auto_generated/metadata/qgsabstractmetadatabase.sip
%Include auto_generated/metadata/qgslayermetadata.sip
%Include auto_generated/metadata/qgslayermetadataformatter.sip

View File

@ -807,7 +807,7 @@ Adds a vector tile layer to the current project.
.. versionadded:: 3.14
%End
virtual QgsPointCloudLayer *addPointCloudLayer( const QString &url, const QString &baseName ) = 0;
virtual QgsPointCloudLayer *addPointCloudLayer( const QString &url, const QString &baseName, const QString &providerKey ) = 0;
%Docstring
Adds a point cloud layer to the current project.

View File

@ -101,7 +101,7 @@ Emitted when a vector tile layer has been selected for addition.
.. versionadded:: 3.14
%End
void addPointCloudLayer( const QString &url, const QString &baseName );
void addPointCloudLayer( const QString &url, const QString &baseName, const QString &providerKey );
%Docstring
Emitted when a point cloud layer has been selected for addition.

View File

@ -222,7 +222,7 @@ QgsPointCloudLayerChunkLoader::QgsPointCloudLayerChunkLoader( const QgsPointClou
QgsPointCloud3DSymbolHandler *handler = new QgsPointCloud3DSymbolHandler;
mHandler.reset( handler );
QgsPointCloudIndex *pc = layer->pointCloudIndex();
QgsPointCloudIndex *pc = layer->dataProvider()->index();
//QgsExpressionContext exprContext( Qgs3DUtils::globalProjectLayerExpressionContext( layer ) );
//exprContext.setFields( layer->fields() );

View File

@ -178,6 +178,12 @@ QVariantMap QgsPackageAlgorithm::processAlgorithm( const QVariantMap &parameters
errored = true;
break;
case QgsMapLayerType::PointCloudLayer:
//not supported
feedback->pushDebugInfo( QObject::tr( "Packaging point cloud layers is not supported." ) );
errored = true;
break;
case QgsMapLayerType::VectorTileLayer:
//not supported
feedback->pushDebugInfo( QObject::tr( "Packaging vector tile layers is not supported." ) );

View File

@ -2096,7 +2096,7 @@ void QgisApp::handleDropUriList( const QgsMimeDataUtils::UriList &lst )
}
else if ( u.layerType == QLatin1String( "pointcloud" ) )
{
addPointCloudLayer( uri, u.name );
addPointCloudLayer( uri, u.name, u.providerKey );
}
else if ( u.layerType == QLatin1String( "vector-tile" ) )
{
@ -5709,9 +5709,9 @@ QgsVectorTileLayer *QgisApp::addVectorTileLayer( const QString &url, const QStri
return addVectorTileLayerPrivate( url, baseName );
}
QgsPointCloudLayer *QgisApp::addPointCloudLayer( const QString &url, const QString &baseName )
QgsPointCloudLayer *QgisApp::addPointCloudLayer( const QString &url, const QString &baseName, const QString &providerKey )
{
return addPointCloudLayerPrivate( url, baseName );
return addPointCloudLayerPrivate( url, baseName, providerKey );
}
QgsVectorTileLayer *QgisApp::addVectorTileLayerPrivate( const QString &url, const QString &baseName, const bool guiWarning )
@ -5756,7 +5756,7 @@ QgsVectorTileLayer *QgisApp::addVectorTileLayerPrivate( const QString &url, cons
return layer.release();
}
QgsPointCloudLayer *QgisApp::addPointCloudLayerPrivate( const QString &uri, const QString &baseName, bool guiWarning )
QgsPointCloudLayer *QgisApp::addPointCloudLayerPrivate( const QString &uri, const QString &baseName, const QString &providerKey, bool guiWarning )
{
QgsCanvasRefreshBlocker refreshBlocker;
QgsSettings settings;
@ -5771,7 +5771,7 @@ QgsPointCloudLayer *QgisApp::addPointCloudLayerPrivate( const QString &uri, cons
QgsDebugMsgLevel( "completeBaseName: " + base, 2 );
// create the layer
std::unique_ptr<QgsPointCloudLayer> layer( new QgsPointCloudLayer( uri, base ) );
std::unique_ptr<QgsPointCloudLayer> layer( new QgsPointCloudLayer( uri, base, providerKey ) );
if ( !layer || !layer->isValid() )
{
@ -7623,7 +7623,7 @@ bool QgisApp::openLayer( const QString &fileName, bool allowInteractive )
// Try to load as point cloud layer after raster & vector & mesh
if ( !ok )
{
ok = static_cast< bool >( addPointCloudLayerPrivate( fileName, fileInfo.completeBaseName(), false ) );
ok = static_cast< bool >( addPointCloudLayerPrivate( fileName, fileInfo.completeBaseName(), QStringLiteral( "pointcloud" ), false ) );
}
if ( !ok )

View File

@ -1165,7 +1165,7 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
* in the Map Legend so it should be formed in a meaningful way.
* \since QGIS 3.18
*/
QgsPointCloudLayer *addPointCloudLayer( const QString &url, const QString &baseName );
QgsPointCloudLayer *addPointCloudLayer( const QString &url, const QString &baseName, const QString &providerKey );
/**
* \brief overloaded version of the private addLayer method that takes a list of
@ -2095,7 +2095,10 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
QgsVectorTileLayer *addVectorTileLayerPrivate( const QString &uri, const QString &baseName, bool guiWarning = true );
//! Open a point cloyd layer - this is the generic function which takes all parameters
QgsPointCloudLayer *addPointCloudLayerPrivate( const QString &uri, const QString &baseName, bool guiWarning = true );
QgsPointCloudLayer *addPointCloudLayerPrivate( const QString &uri,
const QString &baseName,
const QString &providerKey,
bool guiWarning = true );
bool addVectorLayersPrivate( const QStringList &layerQStringList, const QString &enc, const QString &dataSourceType, bool guiWarning = true );
QgsVectorLayer *addVectorLayerPrivate( const QString &vectorLayerPath, const QString &baseName, const QString &providerKey, bool guiWarning = true );

View File

@ -167,9 +167,9 @@ QgsVectorTileLayer *QgisAppInterface::addVectorTileLayer( const QString &url, co
return qgis->addVectorTileLayer( url, baseName );
}
QgsPointCloudLayer *QgisAppInterface::addPointCloudLayer( const QString &url, const QString &baseName )
QgsPointCloudLayer *QgisAppInterface::addPointCloudLayer( const QString &url, const QString &baseName, const QString &providerKey )
{
return qgis->addPointCloudLayer( url, baseName );
return qgis->addPointCloudLayer( url, baseName, providerKey );
}
bool QgisAppInterface::addProject( const QString &projectName )

View File

@ -71,7 +71,7 @@ class APP_EXPORT QgisAppInterface : public QgisInterface
QgsRasterLayer *addRasterLayer( const QString &url, const QString &baseName, const QString &providerKey ) override;
QgsMeshLayer *addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ) override;
QgsVectorTileLayer *addVectorTileLayer( const QString &url, const QString &baseName ) override;
QgsPointCloudLayer *addPointCloudLayer( const QString &url, const QString &baseName ) override;
QgsPointCloudLayer *addPointCloudLayer( const QString &url, const QString &baseName, const QString &providerKey ) override;
bool addProject( const QString &projectName ) override;
bool newProject( bool promptToSaveFlag = false ) override;
void reloadConnections( ) override;

View File

@ -627,6 +627,7 @@ SET(QGIS_CORE_SRCS
pointcloud/qgspointclouddataitems.cpp
pointcloud/qgspointcloudprovidermetadata.cpp
pointcloud/qgspointclouddecoder.cpp
pointcloud/qgspointclouddataprovider.cpp
labeling/qgslabelfeature.cpp
labeling/qgslabelingengine.cpp
@ -1303,6 +1304,7 @@ SET(QGIS_CORE_HDRS
pointcloud/qgspointclouddataitems.h
pointcloud/qgspointcloudprovidermetadata.h
pointcloud/qgspointclouddecoder.h
pointcloud/qgspointclouddataprovider.h
metadata/qgsabstractmetadatabase.h
metadata/qgslayermetadata.h

View File

@ -5150,6 +5150,8 @@ static QVariant fcnGetLayerProperty( const QVariantList &values, const QgsExpres
return QCoreApplication::translate( "expressions", "Plugin" );
case QgsMapLayerType::AnnotationLayer:
return QCoreApplication::translate( "expressions", "Annotation" );
case QgsMapLayerType::PointCloudLayer:
return QCoreApplication::translate( "expressions", "Point Cloud" );
}
}
else

View File

@ -3580,6 +3580,7 @@ bool QgsPalLabeling::staticWillUseLayer( const QgsMapLayer *layer )
case QgsMapLayerType::RasterLayer:
case QgsMapLayerType::PluginLayer:
case QgsMapLayerType::MeshLayer:
case QgsMapLayerType::PointCloudLayer:
case QgsMapLayerType::AnnotationLayer:
return false;
}

View File

@ -0,0 +1,62 @@
/***************************************************************************
qgspointclouddataprovider.cpp
-----------------------
begin : October 2020
copyright : (C) 2020 by Peter Petrik
email : zilolv at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgis.h"
#include "qgspointclouddataprovider.h"
#include "qgspointcloudindex.h"
QgsPointCloudDataProvider::QgsPointCloudDataProvider(
const QString &uri,
const QgsDataProvider::ProviderOptions &options,
QgsDataProvider::ReadFlags flags )
: QgsDataProvider( uri, options, flags )
, mIndex( new QgsPointCloudIndex )
{
mIsValid = mIndex->load( uri );
}
QgsPointCloudDataProvider::~QgsPointCloudDataProvider() = default;
QgsCoordinateReferenceSystem QgsPointCloudDataProvider::crs() const
{
return QgsCoordinateReferenceSystem::fromWkt( mIndex->wkt() );
}
QgsRectangle QgsPointCloudDataProvider::extent() const
{
return mIndex->extent();
}
bool QgsPointCloudDataProvider::isValid() const
{
return mIsValid;
}
QString QgsPointCloudDataProvider::name() const
{
return QStringLiteral( "pointclouds" );
}
QString QgsPointCloudDataProvider::description() const
{
return QStringLiteral( "Point Clouds" );
}
QgsPointCloudIndex *QgsPointCloudDataProvider::index()
{
return mIndex.get();
}

View File

@ -0,0 +1,64 @@
/***************************************************************************
qgspointclouddataprovider.h
---------------------
begin : October 2020
copyright : (C) 2020 by Peter Petrik
email : zilolv at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSPOINTCLOUDDATAPROVIDER_H
#define QGSPOINTCLOUDDATAPROVIDER_H
#include "qgis_core.h"
#include "qgsdataprovider.h"
#include <memory>
class QgsPointCloudIndex;
/**
* \ingroup core
* Base class for providing data for QgsPointCloudLayer
*
* Responsible for reading native point cloud data and returning the indexed data?
*
* \note The API is considered EXPERIMENTAL and can be changed without a notice
*
* \since QGIS 3.18
*/
class CORE_EXPORT QgsPointCloudDataProvider: public QgsDataProvider
{
Q_OBJECT
public:
//! Ctor
QgsPointCloudDataProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
~QgsPointCloudDataProvider();
QgsCoordinateReferenceSystem crs() const override;
QgsRectangle extent() const override;
bool isValid() const override;
QString name() const override;
QString description() const override;
QgsPointCloudIndex *index() SIP_SKIP;
private:
std::unique_ptr<QgsPointCloudIndex> mIndex;
bool mIsValid = false;
};
#endif // QGSMESHDATAPROVIDER_H

View File

@ -19,10 +19,16 @@
#include "qgspointcloudrenderer.h"
#include "qgspointcloudindex.h"
#include "qgsrectangle.h"
#include "qgspointclouddataprovider.h"
QgsPointCloudLayer::QgsPointCloudLayer( const QString &path, const QString &baseName )
QgsPointCloudLayer::QgsPointCloudLayer( const QString &path,
const QString &baseName,
const QString &providerLib,
const QgsPointCloudLayer::LayerOptions &options )
: QgsMapLayer( QgsMapLayerType::PointCloudLayer, baseName, path )
{
Q_UNUSED(providerLib)
Q_UNUSED(options)
setValid( loadDataSource() );
}
@ -37,10 +43,10 @@ QgsPointCloudLayer *QgsPointCloudLayer::clone() const
QgsRectangle QgsPointCloudLayer::extent() const
{
if ( !mPointCloudIndex )
if ( !mDataProvider )
return QgsRectangle();
return mPointCloudIndex->extent();
return mDataProvider->index()->extent();
}
QgsMapLayerRenderer *QgsPointCloudLayer::createMapRenderer( QgsRenderContext &rendererContext )
@ -48,6 +54,16 @@ QgsMapLayerRenderer *QgsPointCloudLayer::createMapRenderer( QgsRenderContext &re
return new QgsPointCloudRenderer( this, rendererContext );
}
QgsPointCloudDataProvider *QgsPointCloudLayer::dataProvider()
{
return mDataProvider.get();
}
const QgsPointCloudDataProvider *QgsPointCloudLayer::dataProvider() const
{
return mDataProvider.get();
}
bool QgsPointCloudLayer::readXml( const QDomNode &layerNode, QgsReadWriteContext &context )
{
setValid( loadDataSource() );
@ -96,18 +112,14 @@ QString QgsPointCloudLayer::loadDefaultStyle( bool &resultFlag )
return QString();
}
QgsPointCloudIndex *QgsPointCloudLayer::pointCloudIndex() const
{
return mPointCloudIndex.get();
}
bool QgsPointCloudLayer::loadDataSource()
{
mPointCloudIndex.reset( new QgsPointCloudIndex() );
bool success = mPointCloudIndex->load( source() );
if ( success )
setCrs( QgsCoordinateReferenceSystem::fromWkt( mPointCloudIndex->wkt() ) );
mDataProvider.reset( new QgsPointCloudDataProvider( source(), QgsDataProvider::ProviderOptions() ) );
return success;
if ( mDataProvider->isValid() )
setCrs( mDataProvider->crs() );
return mDataProvider->isValid();
}

View File

@ -18,9 +18,9 @@
#ifndef QGSPOINTCLOUDLAYER_H
#define QGSPOINTCLOUDLAYER_H
class QgsPointCloudIndex;
class QgsPointCloudRenderer;
#include "qgspointclouddataprovider.h"
#include "qgsmaplayer.h"
#include "qgis_core.h"
@ -41,10 +41,44 @@ class CORE_EXPORT QgsPointCloudLayer : public QgsMapLayer
Q_OBJECT
public:
/**
* Setting options for loading point cloud layers.
*/
struct LayerOptions
{
/**
* Constructor for LayerOptions with optional \a transformContext.
* \note transformContext argument was added in QGIS 3.8
*/
explicit LayerOptions( const QgsCoordinateTransformContext &transformContext = QgsCoordinateTransformContext( ) )
: transformContext( transformContext )
{}
QgsCoordinateTransformContext transformContext;
/**
* Controls whether the layer is allowed to have an invalid/unknown CRS.
*
* If TRUE, then no validation will be performed on the layer's CRS and the layer
* layer's crs() may be invalid() (i.e. the layer will have no georeferencing available
* and will be treated as having purely numerical coordinates).
*
* If FALSE (the default), the layer's CRS will be validated using QgsCoordinateReferenceSystem::validate(),
* which may cause a blocking, user-facing dialog asking users to manually select the correct CRS for the
* layer.
*/
bool skipCrsValidation = false;
};
/**
* Constructor - creates a point cloud layer
*/
explicit QgsPointCloudLayer( const QString &path = QString(), const QString &baseName = QString() );
explicit QgsPointCloudLayer( const QString &path = QString(),
const QString &baseName = QString(),
const QString &providerLib = QStringLiteral( "pointcloud" ),
const QgsPointCloudLayer::LayerOptions &options = QgsPointCloudLayer::LayerOptions());
~QgsPointCloudLayer() override;
@ -57,6 +91,9 @@ class CORE_EXPORT QgsPointCloudLayer : public QgsMapLayer
QgsRectangle extent() const override;
QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
QgsPointCloudDataProvider *dataProvider() override;
const QgsPointCloudDataProvider *dataProvider() const override SIP_SKIP;
bool readXml( const QDomNode &layerNode, QgsReadWriteContext &context ) override;
bool writeXml( QDomNode &layerNode, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
@ -70,8 +107,6 @@ class CORE_EXPORT QgsPointCloudLayer : public QgsMapLayer
void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
QString loadDefaultStyle( bool &resultFlag SIP_OUT ) override;
QgsPointCloudIndex *pointCloudIndex() const SIP_SKIP;
private: // Private methods
bool loadDataSource();
@ -84,7 +119,7 @@ class CORE_EXPORT QgsPointCloudLayer : public QgsMapLayer
QgsPointCloudLayer( const QgsPointCloudLayer &rhs );
#endif
std::unique_ptr<QgsPointCloudIndex> mPointCloudIndex;
std::unique_ptr<QgsPointCloudDataProvider> mDataProvider;
//! Renderer assigned to the layer to draw map
std::unique_ptr<QgsPointCloudRenderer> mRenderer;

View File

@ -100,7 +100,7 @@ static QList<IndexedPointCloudNode> _traverseTree( QgsPointCloudIndex *pc, const
bool QgsPointCloudRenderer::render()
{
// TODO cache!?
QgsPointCloudIndex *pc = mLayer->pointCloudIndex();
QgsPointCloudIndex *pc = mLayer->dataProvider()->index();
QgsRenderContext &context = *renderContext();
@ -154,8 +154,8 @@ void QgsPointCloudRenderer::readXml( const QDomElement &elem, const QgsReadWrite
void QgsPointCloudRenderer::drawData( QPainter *painter, const QVector<qint32> &data, const QgsPointCloudRendererConfig &config )
{
const QgsMapToPixel mapToPixel = renderContext()->mapToPixel();
const QgsVector3D scale = mLayer->pointCloudIndex()->scale();
const QgsVector3D offset = mLayer->pointCloudIndex()->offset();
const QgsVector3D scale = mLayer->dataProvider()->index()->scale();
const QgsVector3D offset = mLayer->dataProvider()->index()->offset();
QgsRectangle mapExtent = renderContext()->mapExtent();

View File

@ -176,6 +176,8 @@ QgsMapLayer *QgsProcessingUtils::mapLayerFromStore( const QString &string, QgsMa
return !canUseLayer( qobject_cast< QgsVectorTileLayer * >( layer ) );
case QgsMapLayerType::AnnotationLayer:
return true;
case QgsMapLayerType::PointCloudLayer:
return true;
}
return true;
} ), layers.end() );

View File

@ -55,6 +55,10 @@ class CORE_EXPORT QgsDataProvider : public QObject
{
sipType = sipType_QgsMeshDataProvider;
}
else if ( qobject_cast<QgsPointCloudDataProvider *>( sipCpp ) )
{
sipType = sipType_QgsPointCloudDataProvider;
}
else
{
sipType = 0;

View File

@ -149,6 +149,7 @@ QPainterPath QgsMapClippingUtils::calculatePainterClipRegion( const QList<QgsMap
case QgsMapLayerType::MeshLayer:
case QgsMapLayerType::RasterLayer:
case QgsMapLayerType::PluginLayer:
case QgsMapLayerType::PointCloudLayer:
case QgsMapLayerType::AnnotationLayer:
// for these layer types, we ignore the region's featureClip behavior.
break;

View File

@ -123,6 +123,7 @@ bool QgsMapRendererJob::prepareLabelCache() const
case QgsMapLayerType::AnnotationLayer:
case QgsMapLayerType::PluginLayer:
case QgsMapLayerType::MeshLayer:
case QgsMapLayerType::PointCloudLayer:
break;
}
@ -960,6 +961,7 @@ bool QgsMapRendererJob::needTemporaryImage( QgsMapLayer *ml )
}
case QgsMapLayerType::MeshLayer:
case QgsMapLayerType::PointCloudLayer:
case QgsMapLayerType::VectorTileLayer:
case QgsMapLayerType::PluginLayer:
break;

View File

@ -90,7 +90,11 @@ QgsMimeDataUtils::Uri::Uri( QgsMapLayer *layer )
layerType = QStringLiteral( "mesh" );
break;
}
case QgsMapLayerType::PointCloudLayer:
{
layerType = QStringLiteral( "pointcloud" );
break;
}
case QgsMapLayerType::VectorTileLayer:
{
layerType = QStringLiteral( "vector-tile" );

View File

@ -48,6 +48,6 @@ void QgsPointCloudSourceSelect::addButtonClicked()
for ( const QString &path : QgsFileWidget::splitFilePaths( mPath ) )
{
emit addPointCloudLayer( path, QFileInfo( path ).baseName() ) ;
emit addPointCloudLayer( path, QFileInfo( path ).baseName(), QStringLiteral( "pointcloud" ) ) ;
}
}

View File

@ -712,7 +712,7 @@ class GUI_EXPORT QgisInterface : public QObject
* Adds a point cloud layer to the current project.
* \since QGIS 3.18
*/
virtual QgsPointCloudLayer *addPointCloudLayer( const QString &url, const QString &baseName ) = 0;
virtual QgsPointCloudLayer *addPointCloudLayer( const QString &url, const QString &baseName, const QString &providerKey ) = 0;
//! Adds (opens) a project
virtual bool addProject( const QString &project ) = 0;

View File

@ -116,7 +116,7 @@ class GUI_EXPORT QgsAbstractDataSourceWidget : public QDialog
* Emitted when a point cloud layer has been selected for addition.
* \since QGIS 3.18
*/
void addPointCloudLayer( const QString &url, const QString &baseName );
void addPointCloudLayer( const QString &url, const QString &baseName, const QString &providerKey );
/**
* Emitted when one or more OGR supported layers are selected for addition

View File

@ -126,7 +126,7 @@ class GUI_EXPORT QgsDataSourceManagerDialog : public QgsOptionsDialogBase, priva
* Emitted when a point cloud layer was selected for addition: for signal forwarding to QgisApp
* \since QGIS 3.18
*/
void addPointCloudLayer( const QString &pointCloudLayerPath, const QString &baseName );
void addPointCloudLayer( const QString &pointCloudLayerPath, const QString &baseName, const QString &providerKey );
//! Replace the selected layer by a vector layer defined by uri, layer name, data source uri
void replaceSelectedVectorLayer( const QString &oldId, const QString &uri, const QString &layerName, const QString &provider );