diff --git a/python/core/auto_additions/qgis.py b/python/core/auto_additions/qgis.py index 342659f849b..0bd9e9eb397 100644 --- a/python/core/auto_additions/qgis.py +++ b/python/core/auto_additions/qgis.py @@ -1027,7 +1027,10 @@ QgsProviderMetadata.FilterPointCloud.__doc__ = "Point clouds (since QGIS 3.18)" QgsProviderMetadata.VectorTile = Qgis.FileFilterType.VectorTile QgsProviderMetadata.VectorTile.is_monkey_patched = True QgsProviderMetadata.VectorTile.__doc__ = "Vector tile layers (since QGIS 3.32)" -Qgis.FileFilterType.__doc__ = 'Type of file filters\n\nPrior to QGIS 3.32 this was available as :py:class:`QgsProviderMetadata`.FilterType\n\n.. versionadded:: 3.32\n\n' + '* ``FilterVector``: ' + Qgis.FileFilterType.Vector.__doc__ + '\n' + '* ``FilterRaster``: ' + Qgis.FileFilterType.Raster.__doc__ + '\n' + '* ``FilterMesh``: ' + Qgis.FileFilterType.Mesh.__doc__ + '\n' + '* ``FilterMeshDataset``: ' + Qgis.FileFilterType.MeshDataset.__doc__ + '\n' + '* ``FilterPointCloud``: ' + Qgis.FileFilterType.PointCloud.__doc__ + '\n' + '* ``VectorTile``: ' + Qgis.FileFilterType.VectorTile.__doc__ +QgsProviderMetadata.TiledMesh = Qgis.FileFilterType.TiledMesh +QgsProviderMetadata.TiledMesh.is_monkey_patched = True +QgsProviderMetadata.TiledMesh.__doc__ = "Tiled mesh layers (since QGIS 3.34)" +Qgis.FileFilterType.__doc__ = 'Type of file filters\n\nPrior to QGIS 3.32 this was available as :py:class:`QgsProviderMetadata`.FilterType\n\n.. versionadded:: 3.32\n\n' + '* ``FilterVector``: ' + Qgis.FileFilterType.Vector.__doc__ + '\n' + '* ``FilterRaster``: ' + Qgis.FileFilterType.Raster.__doc__ + '\n' + '* ``FilterMesh``: ' + Qgis.FileFilterType.Mesh.__doc__ + '\n' + '* ``FilterMeshDataset``: ' + Qgis.FileFilterType.MeshDataset.__doc__ + '\n' + '* ``FilterPointCloud``: ' + Qgis.FileFilterType.PointCloud.__doc__ + '\n' + '* ``VectorTile``: ' + Qgis.FileFilterType.VectorTile.__doc__ + '\n' + '* ``TiledMesh``: ' + Qgis.FileFilterType.TiledMesh.__doc__ # -- Qgis.FileFilterType.baseClass = Qgis # monkey patching scoped based enum diff --git a/python/core/auto_generated/providers/qgsproviderregistry.sip.in b/python/core/auto_generated/providers/qgsproviderregistry.sip.in index 0a558209b25..b5dd771a0d8 100644 --- a/python/core/auto_generated/providers/qgsproviderregistry.sip.in +++ b/python/core/auto_generated/providers/qgsproviderregistry.sip.in @@ -619,6 +619,8 @@ supported by all data providers. .. seealso:: :py:func:`filePointCloudFilters` .. seealso:: :py:func:`fileVectorTileFilters` + +.. seealso:: :py:func:`fileTiledMeshFilters` %End QString fileRasterFilters() const; @@ -639,6 +641,8 @@ supported by all data providers. .. seealso:: :py:func:`filePointCloudFilters` .. seealso:: :py:func:`fileVectorTileFilters` + +.. seealso:: :py:func:`fileTiledMeshFilters` %End QString fileMeshFilters() const; @@ -658,6 +662,8 @@ supported by all data providers. .. seealso:: :py:func:`fileVectorTileFilters` +.. seealso:: :py:func:`fileTiledMeshFilters` + .. versionadded:: 3.6 %End @@ -688,6 +694,8 @@ supported by all data providers. .. seealso:: :py:func:`fileVectorTileFilters` +.. seealso:: :py:func:`fileTiledMeshFilters` + .. versionadded:: 3.18 %End @@ -706,7 +714,29 @@ supported by all data providers. .. seealso:: :py:func:`filePointCloudFilters` +.. seealso:: :py:func:`fileTiledMeshFilters` + .. versionadded:: 3.32 +%End + + QString fileTiledMeshFilters() const; +%Docstring +Returns a file filter string for supported tiled mesh files. + +Returns a string suitable for a QFileDialog of tiled mesh file formats +supported by all data providers. + +.. seealso:: :py:func:`fileMeshFilters` + +.. seealso:: :py:func:`fileRasterFilters` + +.. seealso:: :py:func:`fileVectorFilters` + +.. seealso:: :py:func:`filePointCloudFilters` + +.. seealso:: :py:func:`fileVectorTileFilters` + +.. versionadded:: 3.34 %End QString databaseDrivers() const; diff --git a/python/core/auto_generated/qgis.sip.in b/python/core/auto_generated/qgis.sip.in index ca6e8b01d16..2198fec4482 100644 --- a/python/core/auto_generated/qgis.sip.in +++ b/python/core/auto_generated/qgis.sip.in @@ -576,6 +576,7 @@ The development version MeshDataset, PointCloud, VectorTile, + TiledMesh, }; enum class SublayerQueryFlag diff --git a/src/core/providers/copc/qgscopcprovider.cpp b/src/core/providers/copc/qgscopcprovider.cpp index 8456a1051fc..2ed32daa965 100644 --- a/src/core/providers/copc/qgscopcprovider.cpp +++ b/src/core/providers/copc/qgscopcprovider.cpp @@ -211,6 +211,7 @@ QString QgsCopcProviderMetadata::filters( Qgis::FileFilterType type ) case Qgis::FileFilterType::Mesh: case Qgis::FileFilterType::MeshDataset: case Qgis::FileFilterType::VectorTile: + case Qgis::FileFilterType::TiledMesh: return QString(); case Qgis::FileFilterType::PointCloud: diff --git a/src/core/providers/ept/qgseptprovider.cpp b/src/core/providers/ept/qgseptprovider.cpp index 66fb9848981..5519e0039e4 100644 --- a/src/core/providers/ept/qgseptprovider.cpp +++ b/src/core/providers/ept/qgseptprovider.cpp @@ -218,6 +218,7 @@ QString QgsEptProviderMetadata::filters( Qgis::FileFilterType type ) case Qgis::FileFilterType::Mesh: case Qgis::FileFilterType::MeshDataset: case Qgis::FileFilterType::VectorTile: + case Qgis::FileFilterType::TiledMesh: return QString(); case Qgis::FileFilterType::PointCloud: diff --git a/src/core/providers/gdal/qgsgdalprovider.cpp b/src/core/providers/gdal/qgsgdalprovider.cpp index fb4927d2284..c06aa000075 100644 --- a/src/core/providers/gdal/qgsgdalprovider.cpp +++ b/src/core/providers/gdal/qgsgdalprovider.cpp @@ -4001,6 +4001,7 @@ QString QgsGdalProviderMetadata::filters( Qgis::FileFilterType type ) case Qgis::FileFilterType::MeshDataset: case Qgis::FileFilterType::PointCloud: case Qgis::FileFilterType::VectorTile: + case Qgis::FileFilterType::TiledMesh: return QString(); } return QString(); diff --git a/src/core/providers/ogr/qgsogrprovidermetadata.cpp b/src/core/providers/ogr/qgsogrprovidermetadata.cpp index f33c3249999..566e683f189 100644 --- a/src/core/providers/ogr/qgsogrprovidermetadata.cpp +++ b/src/core/providers/ogr/qgsogrprovidermetadata.cpp @@ -1152,6 +1152,7 @@ QString QgsOgrProviderMetadata::filters( Qgis::FileFilterType type ) case Qgis::FileFilterType::MeshDataset: case Qgis::FileFilterType::PointCloud: case Qgis::FileFilterType::VectorTile: + case Qgis::FileFilterType::TiledMesh: return QString(); } return QString(); diff --git a/src/core/providers/qgsproviderregistry.cpp b/src/core/providers/qgsproviderregistry.cpp index 1713af97baa..7259a73fd08 100644 --- a/src/core/providers/qgsproviderregistry.cpp +++ b/src/core/providers/qgsproviderregistry.cpp @@ -360,6 +360,9 @@ void QgsProviderRegistry::init() QStringList vectorTileWildcards; QStringList vectorTileFilters; + QStringList tiledMeshWildcards; + QStringList tiledMeshFilters; + // now initialize all providers for ( Providers::const_iterator it = mProviders.begin(); it != mProviders.end(); ++it ) { @@ -438,6 +441,24 @@ void QgsProviderRegistry::init() } } + // now get tiled mesh file filters, if any + const QString fileTiledMeshFilters = meta->filters( Qgis::FileFilterType::TiledMesh ); + if ( !fileTiledMeshFilters.isEmpty() ) + { + QgsDebugMsgLevel( "tiled mesh filters: " + fileTiledMeshFilters, 2 ); + +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) + const QStringList filters = fileTiledMeshFilters.split( QStringLiteral( ";;" ), QString::SkipEmptyParts ); +#else + const QStringList filters = fileTiledMeshFilters.split( QStringLiteral( ";;" ), Qt::SkipEmptyParts ); +#endif + for ( const QString &filter : filters ) + { + tiledMeshFilters.append( filter ); + tiledMeshWildcards.append( QgsFileUtils::wildcardsFromFilter( filter ).split( ' ' ) ); + } + } + // call initProvider() - allows provider to register its services to QGIS meta->initProvider(); } @@ -456,6 +477,13 @@ void QgsProviderRegistry::init() mVectorTileFileFilters = vectorTileFilters.join( QLatin1String( ";;" ) ); } + if ( !tiledMeshFilters.empty() ) + { + tiledMeshFilters.insert( 0, QObject::tr( "All Supported Files" ) + QStringLiteral( " (%1)" ).arg( tiledMeshWildcards.join( ' ' ) ) ); + tiledMeshFilters.insert( 1, QObject::tr( "All Files" ) + QStringLiteral( " (*.*)" ) ); + mTiledMeshFileFilters = tiledMeshFilters.join( QLatin1String( ";;" ) ); + } + // load database drivers (only OGR) mDatabaseDrivers = QgsOgrProviderUtils::databaseDrivers(); @@ -927,6 +955,11 @@ QString QgsProviderRegistry::fileVectorTileFilters() const return mVectorTileFileFilters; } +QString QgsProviderRegistry::fileTiledMeshFilters() const +{ + return mTiledMeshFileFilters; +} + QString QgsProviderRegistry::databaseDrivers() const { return mDatabaseDrivers; diff --git a/src/core/providers/qgsproviderregistry.h b/src/core/providers/qgsproviderregistry.h index f3e0e5d3ae1..9fdb7641bfa 100644 --- a/src/core/providers/qgsproviderregistry.h +++ b/src/core/providers/qgsproviderregistry.h @@ -630,6 +630,7 @@ class CORE_EXPORT QgsProviderRegistry * \see fileMeshFilters() * \see filePointCloudFilters() * \see fileVectorTileFilters() + * \see fileTiledMeshFilters() */ QString fileVectorFilters() const; @@ -645,6 +646,7 @@ class CORE_EXPORT QgsProviderRegistry * \see fileMeshFilters() * \see filePointCloudFilters() * \see fileVectorTileFilters() + * \see fileTiledMeshFilters() */ QString fileRasterFilters() const; @@ -659,6 +661,7 @@ class CORE_EXPORT QgsProviderRegistry * \see fileVectorFilters() * \see filePointCloudFilters() * \see fileVectorTileFilters() + * \see fileTiledMeshFilters() * * \since QGIS 3.6 */ @@ -686,6 +689,7 @@ class CORE_EXPORT QgsProviderRegistry * \see fileRasterFilters() * \see fileVectorFilters() * \see fileVectorTileFilters() + * \see fileTiledMeshFilters() * * \since QGIS 3.18 */ @@ -701,11 +705,28 @@ class CORE_EXPORT QgsProviderRegistry * \see fileRasterFilters() * \see fileVectorFilters() * \see filePointCloudFilters() + * \see fileTiledMeshFilters() * * \since QGIS 3.32 */ QString fileVectorTileFilters() const; + /** + * Returns a file filter string for supported tiled mesh files. + * + * Returns a string suitable for a QFileDialog of tiled mesh file formats + * supported by all data providers. + * + * \see fileMeshFilters() + * \see fileRasterFilters() + * \see fileVectorFilters() + * \see filePointCloudFilters() + * \see fileVectorTileFilters() + * + * \since QGIS 3.34 + */ + QString fileTiledMeshFilters() const; + //! Returns a string containing the available database drivers QString databaseDrivers() const; //! Returns a string containing the available directory drivers @@ -782,6 +803,11 @@ class CORE_EXPORT QgsProviderRegistry */ QString mVectorTileFileFilters; + /** + * File filter string for tiled mesh files + */ + QString mTiledMeshFileFilters; + /** * Available database drivers string for vector databases * diff --git a/src/core/providers/vpc/qgsvirtualpointcloudprovider.cpp b/src/core/providers/vpc/qgsvirtualpointcloudprovider.cpp index 511e6923819..b403d234670 100644 --- a/src/core/providers/vpc/qgsvirtualpointcloudprovider.cpp +++ b/src/core/providers/vpc/qgsvirtualpointcloudprovider.cpp @@ -576,6 +576,7 @@ QString QgsVirtualPointCloudProviderMetadata::filters( Qgis::FileFilterType type case Qgis::FileFilterType::Mesh: case Qgis::FileFilterType::MeshDataset: case Qgis::FileFilterType::VectorTile: + case Qgis::FileFilterType::TiledMesh: return QString(); case Qgis::FileFilterType::PointCloud: diff --git a/src/core/qgis.h b/src/core/qgis.h index f063a147305..23a86b80bdb 100644 --- a/src/core/qgis.h +++ b/src/core/qgis.h @@ -945,6 +945,7 @@ class CORE_EXPORT Qgis MeshDataset SIP_MONKEYPATCH_COMPAT_NAME( FilterMeshDataset ), //!< Mesh datasets PointCloud SIP_MONKEYPATCH_COMPAT_NAME( FilterPointCloud ), //!< Point clouds (since QGIS 3.18) VectorTile, //!< Vector tile layers (since QGIS 3.32) + TiledMesh, //!< Tiled mesh layers (since QGIS 3.34) }; Q_ENUM( FileFilterType ) diff --git a/src/core/vectortile/qgsmbtilesvectortiledataprovider.cpp b/src/core/vectortile/qgsmbtilesvectortiledataprovider.cpp index 752db6c732e..5503c4d124f 100644 --- a/src/core/vectortile/qgsmbtilesvectortiledataprovider.cpp +++ b/src/core/vectortile/qgsmbtilesvectortiledataprovider.cpp @@ -254,6 +254,7 @@ QString QgsMbTilesVectorTileDataProviderMetadata::filters( Qgis::FileFilterType case Qgis::FileFilterType::Mesh: case Qgis::FileFilterType::MeshDataset: case Qgis::FileFilterType::PointCloud: + case Qgis::FileFilterType::TiledMesh: return QString(); case Qgis::FileFilterType::VectorTile: diff --git a/src/core/vectortile/qgsvtpkvectortiledataprovider.cpp b/src/core/vectortile/qgsvtpkvectortiledataprovider.cpp index d09da0fe95a..cf2b32916da 100644 --- a/src/core/vectortile/qgsvtpkvectortiledataprovider.cpp +++ b/src/core/vectortile/qgsvtpkvectortiledataprovider.cpp @@ -324,6 +324,7 @@ QString QgsVtpkVectorTileDataProviderMetadata::filters( Qgis::FileFilterType typ case Qgis::FileFilterType::Mesh: case Qgis::FileFilterType::MeshDataset: case Qgis::FileFilterType::PointCloud: + case Qgis::FileFilterType::TiledMesh: return QString(); case Qgis::FileFilterType::VectorTile: diff --git a/src/providers/mdal/qgsmdalprovider.cpp b/src/providers/mdal/qgsmdalprovider.cpp index 883b9cb827b..f20e9cf9cc9 100644 --- a/src/providers/mdal/qgsmdalprovider.cpp +++ b/src/providers/mdal/qgsmdalprovider.cpp @@ -1269,6 +1269,7 @@ QString QgsMdalProviderMetadata::filters( Qgis::FileFilterType type ) case Qgis::FileFilterType::Vector: case Qgis::FileFilterType::PointCloud: case Qgis::FileFilterType::VectorTile: + case Qgis::FileFilterType::TiledMesh: return QString(); } return QString(); diff --git a/src/providers/pdal/qgspdalprovider.cpp b/src/providers/pdal/qgspdalprovider.cpp index eef5d2c4da5..71aaa9ba68a 100644 --- a/src/providers/pdal/qgspdalprovider.cpp +++ b/src/providers/pdal/qgspdalprovider.cpp @@ -435,6 +435,7 @@ QString QgsPdalProviderMetadata::filters( Qgis::FileFilterType type ) case Qgis::FileFilterType::Mesh: case Qgis::FileFilterType::MeshDataset: case Qgis::FileFilterType::VectorTile: + case Qgis::FileFilterType::TiledMesh: return QString(); case Qgis::FileFilterType::PointCloud: