Skip to content

Commit ebdb7ba

Browse files
committedMar 10, 2021
Correctly store absolute/relative paths for point clouds in projects
Fixes #42114
1 parent 03edd71 commit ebdb7ba

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed
 

‎python/core/auto_generated/pointcloud/qgspointcloudlayer.sip.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ QgsPointCloudLayer cannot be copied.
9898

9999
virtual void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false );
100100

101+
virtual QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const;
102+
103+
virtual QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const;
104+
101105
virtual QString loadDefaultStyle( bool &resultFlag /Out/ ) ${SIP_FINAL};
102106

103107
virtual QString htmlMetadata() const;

‎src/core/pointcloud/qgspointcloudlayer.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,34 @@ void QgsPointCloudLayer::setDataSource( const QString &dataSource, const QString
360360
triggerRepaint();
361361
}
362362

363+
QString QgsPointCloudLayer::encodedSource( const QString &source, const QgsReadWriteContext &context ) const
364+
{
365+
QVariantMap parts = QgsProviderRegistry::instance()->decodeUri( providerType(), source );
366+
if ( parts.contains( QStringLiteral( "path" ) ) )
367+
{
368+
parts.insert( QStringLiteral( "path" ), context.pathResolver().writePath( parts.value( QStringLiteral( "path" ) ).toString() ) );
369+
return QgsProviderRegistry::instance()->encodeUri( providerType(), parts );
370+
}
371+
else
372+
{
373+
return source;
374+
}
375+
}
376+
377+
QString QgsPointCloudLayer::decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const
378+
{
379+
QVariantMap parts = QgsProviderRegistry::instance()->decodeUri( dataProvider, source );
380+
if ( parts.contains( QStringLiteral( "path" ) ) )
381+
{
382+
parts.insert( QStringLiteral( "path" ), context.pathResolver().readPath( parts.value( QStringLiteral( "path" ) ).toString() ) );
383+
return QgsProviderRegistry::instance()->encodeUri( dataProvider, parts );
384+
}
385+
else
386+
{
387+
return source;
388+
}
389+
}
390+
363391
void QgsPointCloudLayer::onPointCloudIndexGenerationStateChanged( QgsPointCloudDataProvider::PointCloudIndexGenerationState state )
364392
{
365393
if ( state == QgsPointCloudDataProvider::Indexed )

‎src/core/pointcloud/qgspointcloudlayer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ class CORE_EXPORT QgsPointCloudLayer : public QgsMapLayer
129129

130130
void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
131131
void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false ) override;
132+
QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
133+
QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const override;
132134
QString loadDefaultStyle( bool &resultFlag SIP_OUT ) FINAL;
133135
QString htmlMetadata() const override;
134136
QgsMapLayerElevationProperties *elevationProperties() override;

0 commit comments

Comments
 (0)
Please sign in to comment.