QGIS API Documentation 4.3.0-Master (4ecdf0f3f59)
Loading...
Searching...
No Matches
qgsmeshlayer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmeshlayer.h
3 --------------
4 begin : April 2018
5 copyright : (C) 2018 by Peter Petrik
6 email : zilolv at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSMESHLAYER_H
19#define QGSMESHLAYER_H
20
21#include <memory>
22
23#include "qgis_core.h"
26#include "qgsinterval.h"
27#include "qgsmaplayer.h"
28#include "qgsmeshdataprovider.h"
31#include "qgsmeshtimesettings.h"
32
33#include <QString>
34
35using namespace Qt::StringLiterals;
36
38struct QgsMeshLayerRendererCache;
39class QgsSymbol;
42struct QgsMesh;
46class QgsMeshEditor;
50
104class CORE_EXPORT QgsMeshLayer : public QgsMapLayer, public QgsAbstractProfileSource
105{
106 Q_OBJECT
107 public:
147
161 explicit QgsMeshLayer(
162 const QString &path = QString(), const QString &baseName = QString(), const QString &providerLib = u"mesh_memory"_s, const QgsMeshLayer::LayerOptions &options = QgsMeshLayer::LayerOptions()
163 );
164
165 ~QgsMeshLayer() override;
166
167 QgsMeshLayer( const QgsMeshLayer &rhs ) = delete;
168 QgsMeshLayer &operator=( QgsMeshLayer const &rhs ) = delete;
169
170#ifdef SIP_RUN
171 // clang-format off
172 SIP_PYOBJECT __repr__();
173 % MethodCode
174 QString str = u"<QgsMeshLayer: '%1' (%2)>"_s.arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : u"Invalid"_s );
175 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
176 % End
177// clang-format on
178#endif
179
181 const QgsMeshDataProvider *dataProvider() const override SIP_SKIP;
182 QgsMeshLayer *clone() const override SIP_FACTORY;
183 QgsRectangle extent() const override;
185 QgsAbstractProfileSource *profileSource() override { return this; }
186 QString profileSourceId() const override { return id(); }
187 QString profileSourceName() const override { return name(); }
189 bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
190 bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
191 bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) const override;
192 bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) override;
193 QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
194 QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
195 bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
196 bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
199 void reload() override;
200 QStringList subLayers() const override;
201 QString htmlMetadata() const override;
202 bool isEditable() const override;
203 bool supportsEditing() const override;
204 QString loadDefaultStyle( bool &resultFlag SIP_OUT ) final;
205
215 bool addDatasets( const QString &path, const QDateTime &defaultReferenceTime = QDateTime() );
216
225 bool removeDatasets( const QString &name );
226
235 bool addDatasets( QgsMeshDatasetGroup *datasetGroup SIP_TRANSFER );
236
247 bool saveDataset( const QString &path, int datasetGroupIndex, QString driver );
248
254 QgsMesh *nativeMesh() SIP_SKIP;
255
261 const QgsMesh *nativeMesh() const SIP_SKIP;
262
275 QgsTriangularMesh *triangularMesh( double minimumTriangleSize = 0 ) const SIP_SKIP;
276
283 int triangularMeshLevelOfDetailCount() const SIP_SKIP;
284
295 QgsTriangularMesh *triangularMeshByLodIndex( int lodIndex ) const SIP_SKIP;
296
304 void updateTriangularMesh( const QgsCoordinateTransform &transform = QgsCoordinateTransform() );
305
311 QgsMeshLayerRendererCache *rendererCache() SIP_SKIP;
312
314 QgsMeshRendererSettings rendererSettings() const;
315
322 void setRendererSettings( const QgsMeshRendererSettings &settings, const bool repaint = true );
323
330 void invalidateRendererCache();
331
337 QgsMeshTimeSettings timeSettings() const;
338
344 void setTimeSettings( const QgsMeshTimeSettings &settings );
345
351 QgsMeshSimplificationSettings meshSimplificationSettings() const SIP_SKIP;
352
358 void setMeshSimplificationSettings( const QgsMeshSimplificationSettings &meshSimplificationSettings ) SIP_SKIP;
359
366 QString formatTime( double hours );
367
373 int datasetGroupCount() const;
374
380 int extraDatasetGroupCount() const;
381
390 QList<int> datasetGroupsIndexes() const;
391
400 QList<int> enabledDatasetGroupsIndexes() const;
401
410 QgsMeshDatasetGroupMetadata datasetGroupMetadata( const QgsMeshDatasetIndex &index ) const;
411
422 int datasetCount( const QgsMeshDatasetIndex &index ) const;
423
434 QgsMeshDatasetMetadata datasetMetadata( const QgsMeshDatasetIndex &index ) const;
435
453 QgsMeshDatasetValue datasetValue( const QgsMeshDatasetIndex &index, int valueIndex ) const;
454
473 QgsMeshDataBlock datasetValues( const QgsMeshDatasetIndex &index, int valueIndex, int count ) const;
474
491 QgsMesh3DDataBlock dataset3dValues( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
492
500 bool isFaceActive( const QgsMeshDatasetIndex &index, int faceIndex ) const;
501
514 QgsMeshDataBlock areFacesActive( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
515
538 QgsMeshDatasetValue datasetValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point, double searchRadius = 0 ) const;
539
559 QgsMesh3DDataBlock dataset3dValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point ) const;
560
580 QgsMeshDatasetValue dataset1dValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point, double searchRadius ) const;
581
597 QgsMeshDatasetIndex datasetIndexAtTime( const QgsDateTimeRange &timeRange, int datasetGroupIndex ) const;
598
614 QgsMeshDatasetIndex datasetIndexAtRelativeTime( const QgsInterval &relativeTime, int datasetGroupIndex ) const;
615
630 QList<QgsMeshDatasetIndex> datasetIndexInRelativeTimeInterval( const QgsInterval &startRelativeTime, const QgsInterval &endRelativeTime, int datasetGroupIndex ) const;
631
643 QgsMeshDatasetIndex activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const;
644
656 QgsMeshDatasetIndex activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const;
657
667 void setStaticScalarDatasetIndex( const QgsMeshDatasetIndex &staticScalarDatasetIndex );
668
678 void setStaticVectorDatasetIndex( const QgsMeshDatasetIndex &staticVectorDatasetIndex );
679
688 QgsMeshDatasetIndex staticScalarDatasetIndex( int group = -1 ) const;
689
698 QgsMeshDatasetIndex staticVectorDatasetIndex( int group = -1 ) const;
699
707 void setReferenceTime( const QDateTime &referenceTime );
708
716 void setTemporalMatchingMethod( const QgsMeshDataProviderTemporalCapabilities::MatchingTemporalDatasetMethod &matchingMethod );
717
739 QgsPointXY snapOnElement( QgsMesh::ElementType elementType, const QgsPointXY &point, double searchRadius );
740
767 int closestElement( QgsMesh::ElementType elementType, const QgsPointXY &point, double searchRadius, QgsPointXY &projectedPoint SIP_OUT ) const;
768
777 QList<int> selectVerticesByExpression( QgsExpression expression );
778
787 QList<int> selectFacesByExpression( QgsExpression expression );
788
796 QgsMeshDatasetGroupTreeItem *datasetGroupTreeRootItem() const;
797
811 void setDatasetGroupTreeRootItem( QgsMeshDatasetGroupTreeItem *rootItem );
812
818 void resetDatasetGroupTreeItem();
819
825 QgsInterval firstValidTimeStep() const;
826
832 QgsInterval datasetRelativeTime( const QgsMeshDatasetIndex &index );
833
839 qint64 datasetRelativeTimeInMilliseconds( const QgsMeshDatasetIndex &index );
840
848 Q_DECL_DEPRECATED bool startFrameEditing( const QgsCoordinateTransform &transform );
849
860 bool startFrameEditing( const QgsCoordinateTransform &transform, QgsMeshEditingError &error SIP_OUT, bool fixErrors );
861
862
871 bool commitFrameEditing( const QgsCoordinateTransform &transform, bool continueEditing = true );
872
881 bool rollBackFrameEditing( const QgsCoordinateTransform &transform, bool continueEditing = true );
882
890 void stopFrameEditing( const QgsCoordinateTransform &transform );
891
901 bool reindex( const QgsCoordinateTransform &transform, bool renumber );
902
908 QgsMeshEditor *meshEditor();
909
915 bool isModified() const override;
916
921 bool contains( const QgsMesh::ElementType &type ) const;
922
930 int meshVertexCount() const;
931
939 int meshFaceCount() const;
940
946 int meshEdgeCount() const;
947
956 bool labelsEnabled() const;
957
968 void setLabelsEnabled( bool enabled );
969
978 const QgsAbstractMeshLayerLabeling *labeling() const SIP_SKIP { return mLabeling.get(); }
979
986 QgsAbstractMeshLayerLabeling *labeling() { return mLabeling.get(); }
987
992 void setLabeling( QgsAbstractMeshLayerLabeling *labeling SIP_TRANSFER );
993
1003 bool minimumMaximumActiveScalarDataset( const QgsRectangle &extent, const QgsMeshDatasetIndex &datasetIndex, double &min SIP_OUT, double &max SIP_OUT );
1004
1010 QgsMeshDatasetIndex activeScalarDatasetIndex( QgsRenderContext &rendererContext );
1011
1021 bool datasetsPathUnique( const QString &path );
1022
1028 QStringList extraDatasetUris() const { return mExtraDatasetUri; }
1029
1031 QString loadNamedStyle(
1032 const QString &uri, bool &resultFlag SIP_OUT, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories, Qgis::LoadStyleFlags flags = Qgis::LoadStyleFlags()
1033 ) override;
1034
1035 public slots:
1036
1042 void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
1043
1044 signals:
1045
1052
1059
1066
1072 void reloaded();
1073
1074 private: // Private methods
1078 bool isReadOnly() const override { return true; }
1079
1086 bool setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() );
1087#ifdef SIP_RUN
1088 QgsMeshLayer( const QgsMeshLayer &rhs );
1089#endif
1090
1091 void fillNativeMesh();
1092 void assignDefaultStyleToDatasetGroup( int groupIndex );
1093 void createSimplifiedMeshes();
1094 int levelsOfDetailsIndex( double partOfMeshInView ) const;
1095
1096 bool hasSimplifiedMeshes() const;
1097
1099 void applyClassificationOnScalarSettings( const QgsMeshDatasetGroupMetadata &meta, QgsMeshRendererScalarSettings &scalarSettings ) const;
1100
1101 private slots:
1102 void onDatasetGroupsAdded( const QList<int> &datasetGroupIndexes );
1103 void onMeshEdited();
1104
1105 private:
1107 std::unique_ptr<QgsMeshDataProvider> mDataProvider;
1108
1110 QStringList mExtraDatasetUri;
1111
1112 std::unique_ptr<QgsMeshDatasetGroupStore> mDatasetGroupStore;
1113
1115 std::unique_ptr<QgsMesh> mNativeMesh;
1116
1118 std::vector<std::unique_ptr<QgsTriangularMesh>> mTriangularMeshes;
1119
1121 std::unique_ptr<QgsMeshLayerRendererCache> mRendererCache;
1122
1124 QgsMeshRendererSettings mRendererSettings;
1125
1127 QgsMeshTimeSettings mTimeSettings;
1128
1130 QgsMeshSimplificationSettings mSimplificationSettings;
1131
1132 QgsMeshLayerTemporalProperties *mTemporalProperties = nullptr;
1133 QgsMeshLayerElevationProperties *mElevationProperties = nullptr;
1134
1137
1138 int mStaticScalarDatasetIndex = 0;
1139 int mStaticVectorDatasetIndex = 0;
1140
1141 QgsMeshEditor *mMeshEditor = nullptr;
1142
1144 bool mLabelsEnabled = false;
1145
1147 std::unique_ptr<QgsAbstractMeshLayerLabeling> mLabeling;
1148
1150 int closestEdge( const QgsPointXY &point, double searchRadius, QgsPointXY &projectedPoint ) const;
1151
1153 int closestVertex( const QgsPointXY &point, double searchRadius, QgsPointXY &projectedPoint ) const;
1154
1156 int closestFace( const QgsPointXY &point, double searchRadius, QgsPointXY &projectedPoint ) const;
1157
1158 void updateActiveDatasetGroups();
1159
1160 QgsMeshRendererSettings accordSymbologyWithGroupName( const QgsMeshRendererSettings &settings, const QMap<QString, int> &nameToIndex );
1161 void checkSymbologyConsistency();
1162
1163 void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags ) final;
1164};
1165
1166#endif //QGSMESHLAYER_H
TemporalUnit
Temporal units.
Definition qgis.h:5734
@ Hours
Hours.
Definition qgis.h:5738
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:532
QFlags< LoadStyleFlag > LoadStyleFlags
Flags for loading layer styles.
Definition qgis.h:283
Abstract base class - its implementations define different approaches to the labeling of a mesh layer...
Abstract base class for objects which generate elevation profiles.
Interface for classes which can generate elevation profiles.
virtual QgsAbstractProfileGenerator * createProfileGenerator(const QgsProfileRequest &request)=0
Given a profile request, returns a new profile generator ready for generating elevation profiles.
Contains information about the context in which a coordinate transform is executed.
Handles coordinate transforms between two coordinate systems.
Handles parsing and evaluation of expressions (formerly called "search strings").
A representation of the interval between two datetime values.
Definition qgsinterval.h:52
Base class for storage of map layer elevation properties.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
Base class for storage of map layer temporal properties.
QString name
Definition qgsmaplayer.h:87
virtual bool writeSymbology(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories) const =0
Write the style for the layer into the document provided.
virtual QString loadNamedStyle(const QString &theURI, bool &resultFlag, bool loadFromLocalDb, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories, Qgis::LoadStyleFlags flags=Qgis::LoadStyleFlags())
Loads a named style from file/local db/datasource db.
virtual QString encodedSource(const QString &source, const QgsReadWriteContext &context) const
Called by writeLayerXML(), used by derived classes to encode provider's specific data source to proje...
virtual bool readXml(const QDomNode &layer_node, QgsReadWriteContext &context)
Called by readLayerXML(), used by children to read state specific to them from project files.
virtual QString loadDefaultStyle(bool &resultFlag)
Retrieve the default style for this layer if one exists (either as a .qml file on disk or as a record...
virtual bool writeXml(QDomNode &layer_node, QDomDocument &document, const QgsReadWriteContext &context) const
Called by writeLayerXML(), used by children to write state specific to them to project files.
QString id
Definition qgsmaplayer.h:86
QgsMapLayer(Qgis::LayerType type=Qgis::LayerType::Vector, const QString &name=QString(), const QString &source=QString())
Constructor for QgsMapLayer.
virtual bool readStyle(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories)
Read the style for the current layer from the DOM node supplied.
virtual bool supportsEditing() const
Returns whether the layer supports editing or not.
QFlags< StyleCategory > StyleCategories
virtual bool isEditable() const
Returns true if the layer can be edited.
virtual QgsMapLayerTemporalProperties * temporalProperties()
Returns the layer's temporal properties.
virtual QStringList subLayers() const
Returns the sublayers of this layer.
virtual QString htmlMetadata() const
Obtain a formatted HTML string containing assorted metadata for this layer.
virtual bool readSymbology(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories)=0
Read the symbology for the current layer from the DOM node supplied.
virtual QgsMapLayerElevationProperties * elevationProperties()
Returns the layer's elevation properties.
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext)=0
Sets the coordinate transform context to transformContext.
virtual QString decodedSource(const QString &source, const QString &dataProvider, const QgsReadWriteContext &context) const
Called by readLayerXML(), used by derived classes to decode provider's specific data source from proj...
virtual bool writeStyle(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories) const
Write just the symbology information for the layer into the document.
virtual Q_INVOKABLE QgsDataProvider * dataProvider()
Returns the layer's data provider, it may be nullptr.
virtual Q_INVOKABLE void reload()
Synchronises with changes in the datasource.
Abstract class for interpolating 3d stacked mesh data to 2d data.
A block of 3d stacked mesh data related N faces defined on base mesh frame.
A block of integers/doubles from a mesh dataset.
Handles properties relating to a mesh data provider's temporal capabilities.
Base class for providing data for QgsMeshLayer.
A collection of dataset group metadata such as whether the data is vector or scalar,...
Registers and accesses all the dataset groups related to a mesh layer.
Tree item for display of the mesh dataset groups.
Abstract class that represents a dataset group.
An index that identifies the dataset group (e.g.
Represents mesh dataset metadata, such as whether the data is valid or the associated time.
Represents a single mesh dataset value.
Represents an error which occurred during mesh editing.
Handles edit operations on a mesh layer.
Mesh layer specific subclass of QgsMapLayerElevationProperties.
Implementation of map layer temporal properties for mesh layers.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
QString profileSourceName() const override
Returns a name for displaying this profile source in the elevation profile layer tree.
QgsRectangle extent() const override
Returns the extent of the layer.
QgsAbstractProfileSource * profileSource() override
Returns the layer's profile source if it has profile capabilities.
void activeScalarDatasetGroupChanged(int index)
Emitted when active scalar group dataset is changed.
void activeVectorDatasetGroupChanged(int index)
Emitted when active vector group dataset is changed.
const QgsAbstractMeshLayerLabeling * labeling() const
Access to const labeling configuration.
QgsMeshLayer * clone() const override
Returns a new instance equivalent to this one except for the id which is still unique.
void timeSettingsChanged()
Emitted when time format is changed.
QgsMeshLayer & operator=(QgsMeshLayer const &rhs)=delete
QStringList extraDatasetUris() const
Returns the list of extra dataset URIs associated with this layer.
QgsMeshLayer(const QgsMeshLayer &rhs)=delete
QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext) override
Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context.
QString profileSourceId() const override
Returns a unique identifier for this profile source.
QgsMeshLayer(const QString &path=QString(), const QString &baseName=QString(), const QString &providerLib=u"mesh_memory"_s, const QgsMeshLayer::LayerOptions &options=QgsMeshLayer::LayerOptions())
Constructor - creates a mesh layer.
QgsAbstractMeshLayerLabeling * labeling()
Access to labeling configuration.
void reloaded()
Emitted when the mesh layer is reloaded, see reload().
Represents a mesh renderer settings for scalar datasets.
Represents all mesh renderer settings.
Represents an overview renderer settings.
Represents a mesh time settings for mesh datasets.
Represents a 2D point.
Definition qgspointxy.h:62
Encapsulates properties and constraints relating to fetching elevation profiles from different source...
A container for the context for various read/write operations on objects.
A rectangle specified with double values.
Contains information about the context of a rendering operation.
Abstract base class for all rendered symbols.
Definition qgssymbol.h:227
A triangular/derived mesh with vertices in map coordinates.
#define SIP_SKIP
Definition qgis_sip.h:138
#define SIP_TRANSFER
Definition qgis_sip.h:35
#define SIP_OUT
Definition qgis_sip.h:57
#define SIP_FACTORY
Definition qgis_sip.h:83
QgsTemporalRange< QDateTime > QgsDateTimeRange
QgsRange which stores a range of date times.
Definition qgsrange.h:764
Setting options for creating vector data providers.
Setting options for loading mesh layers.
QgsCoordinateTransformContext transformContext
Coordinate transform context.
bool loadDefaultStyle
Set to true if the default layer style should be loaded.
bool skipCrsValidation
Controls whether the layer is allowed to have an invalid/unknown CRS.
LayerOptions(const QgsCoordinateTransformContext &transformContext=QgsCoordinateTransformContext())
Constructor for LayerOptions with optional transformContext.
Mesh - vertices, edges and faces.