QGIS API Documentation 3.43.0-Master (1896cf2247d)
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"
24#include "qgsinterval.h"
25#include "qgsmaplayer.h"
26#include "qgsmeshdataprovider.h"
28#include "qgsmeshtimesettings.h"
32
34struct QgsMeshLayerRendererCache;
35class QgsSymbol;
38struct QgsMesh;
42class QgsMeshEditor;
46
100class CORE_EXPORT QgsMeshLayer : public QgsMapLayer, public QgsAbstractProfileSource
101{
102 Q_OBJECT
103 public:
104
109 {
110
116 : transformContext( transformContext )
117 {}
118
123
128 bool loadDefaultStyle = true;
129
143 bool skipCrsValidation = false;
144 };
145
159 explicit QgsMeshLayer( const QString &path = QString(), const QString &baseName = QString(), const QString &providerLib = QStringLiteral( "mesh_memory" ),
161
162 ~QgsMeshLayer() override;
163
164 QgsMeshLayer( const QgsMeshLayer &rhs ) = delete;
165 QgsMeshLayer &operator=( QgsMeshLayer const &rhs ) = delete;
166
167#ifdef SIP_RUN
168 SIP_PYOBJECT __repr__();
169 % MethodCode
170 QString str = QStringLiteral( "<QgsMeshLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
171 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
172 % End
173#endif
174
176 const QgsMeshDataProvider *dataProvider() const override SIP_SKIP;
177 QgsMeshLayer *clone() const override SIP_FACTORY;
178 QgsRectangle extent() const override;
179 QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
180 QgsAbstractProfileGenerator *createProfileGenerator( const QgsProfileRequest &request ) override SIP_FACTORY;
181 bool readSymbology( const QDomNode &node, QString &errorMessage,
182 QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
183 bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage,
184 const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
185 bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) const override;
186 bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) override;
187 QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
188 QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
189 bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
190 bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
191 QgsMapLayerTemporalProperties *temporalProperties() override;
192 QgsMapLayerElevationProperties *elevationProperties() override;
193 void reload() override;
194 QStringList subLayers() const override;
195 QString htmlMetadata() const override;
196 bool isEditable() const override;
197 bool supportsEditing() const override;
198 QString loadDefaultStyle( bool &resultFlag SIP_OUT ) FINAL;
199
209 bool addDatasets( const QString &path, const QDateTime &defaultReferenceTime = QDateTime() );
210
219 bool removeDatasets( const QString &name );
220
229 bool addDatasets( QgsMeshDatasetGroup *datasetGroup SIP_TRANSFER );
230
241 bool saveDataset( const QString &path, int datasetGroupIndex, QString driver );
242
248 QgsMesh *nativeMesh() SIP_SKIP;
249
255 const QgsMesh *nativeMesh() const SIP_SKIP;
256
269 QgsTriangularMesh *triangularMesh( double minimumTriangleSize = 0 ) const SIP_SKIP;
270
277 int triangularMeshLevelOfDetailCount() const SIP_SKIP;
278
289 QgsTriangularMesh *triangularMeshByLodIndex( int lodIndex ) const SIP_SKIP;
290
298 void updateTriangularMesh( const QgsCoordinateTransform &transform = QgsCoordinateTransform() );
299
305 QgsMeshLayerRendererCache *rendererCache() SIP_SKIP;
306
308 QgsMeshRendererSettings rendererSettings() const;
309
316 void setRendererSettings( const QgsMeshRendererSettings &settings, const bool repaint = true );
317
323 QgsMeshTimeSettings timeSettings() const;
324
330 void setTimeSettings( const QgsMeshTimeSettings &settings );
331
337 QgsMeshSimplificationSettings meshSimplificationSettings() const SIP_SKIP;
338
344 void setMeshSimplificationSettings( const QgsMeshSimplificationSettings &meshSimplificationSettings ) SIP_SKIP;
345
352 QString formatTime( double hours );
353
359 int datasetGroupCount() const;
360
366 int extraDatasetGroupCount() const;
367
376 QList<int> datasetGroupsIndexes() const;
377
386 QList<int> enabledDatasetGroupsIndexes() const;
387
396 QgsMeshDatasetGroupMetadata datasetGroupMetadata( const QgsMeshDatasetIndex &index ) const;
397
408 int datasetCount( const QgsMeshDatasetIndex &index ) const;
409
420 QgsMeshDatasetMetadata datasetMetadata( const QgsMeshDatasetIndex &index ) const;
421
439 QgsMeshDatasetValue datasetValue( const QgsMeshDatasetIndex &index, int valueIndex ) const;
440
459 QgsMeshDataBlock datasetValues( const QgsMeshDatasetIndex &index, int valueIndex, int count ) const;
460
477 QgsMesh3DDataBlock dataset3dValues( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
478
486 bool isFaceActive( const QgsMeshDatasetIndex &index, int faceIndex ) const;
487
500 QgsMeshDataBlock areFacesActive( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
501
524 QgsMeshDatasetValue datasetValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point, double searchRadius = 0 ) const;
525
545 QgsMesh3DDataBlock dataset3dValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point ) const;
546
566 QgsMeshDatasetValue dataset1dValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point, double searchRadius ) const;
567
583 QgsMeshDatasetIndex datasetIndexAtTime( const QgsDateTimeRange &timeRange, int datasetGroupIndex ) const;
584
600 QgsMeshDatasetIndex datasetIndexAtRelativeTime( const QgsInterval &relativeTime, int datasetGroupIndex ) const;
601
616 QList<QgsMeshDatasetIndex> datasetIndexInRelativeTimeInterval( const QgsInterval &startRelativeTime, const QgsInterval &endRelativeTime, int datasetGroupIndex ) const;
617
629 QgsMeshDatasetIndex activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const;
630
642 QgsMeshDatasetIndex activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const;
643
651 void setStaticScalarDatasetIndex( const QgsMeshDatasetIndex &staticScalarDatasetIndex ) SIP_SKIP;
652
660 void setStaticVectorDatasetIndex( const QgsMeshDatasetIndex &staticVectorDatasetIndex ) SIP_SKIP;
661
670 QgsMeshDatasetIndex staticScalarDatasetIndex( int group = -1 ) const;
671
680 QgsMeshDatasetIndex staticVectorDatasetIndex( int group = -1 ) const;
681
689 void setReferenceTime( const QDateTime &referenceTime );
690
698 void setTemporalMatchingMethod( const QgsMeshDataProviderTemporalCapabilities::MatchingTemporalDatasetMethod &matchingMethod );
699
721 QgsPointXY snapOnElement( QgsMesh::ElementType elementType, const QgsPointXY &point, double searchRadius );
722
749 int closestElement( QgsMesh::ElementType elementType, const QgsPointXY &point, double searchRadius, QgsPointXY &projectedPoint SIP_OUT ) const;
750
759 QList<int> selectVerticesByExpression( QgsExpression expression );
760
769 QList<int> selectFacesByExpression( QgsExpression expression );
770
778 QgsMeshDatasetGroupTreeItem *datasetGroupTreeRootItem() const;
779
793 void setDatasetGroupTreeRootItem( QgsMeshDatasetGroupTreeItem *rootItem );
794
800 void resetDatasetGroupTreeItem();
801
807 QgsInterval firstValidTimeStep() const;
808
814 QgsInterval datasetRelativeTime( const QgsMeshDatasetIndex &index );
815
821 qint64 datasetRelativeTimeInMilliseconds( const QgsMeshDatasetIndex &index );
822
830 Q_DECL_DEPRECATED bool startFrameEditing( const QgsCoordinateTransform &transform );
831
842 bool startFrameEditing( const QgsCoordinateTransform &transform, QgsMeshEditingError &error SIP_OUT, bool fixErrors );
843
844
853 bool commitFrameEditing( const QgsCoordinateTransform &transform, bool continueEditing = true );
854
863 bool rollBackFrameEditing( const QgsCoordinateTransform &transform, bool continueEditing = true );
864
872 void stopFrameEditing( const QgsCoordinateTransform &transform );
873
883 bool reindex( const QgsCoordinateTransform &transform, bool renumber );
884
890 QgsMeshEditor *meshEditor();
891
897 bool isModified() const override;
898
903 bool contains( const QgsMesh::ElementType &type ) const;
904
912 int meshVertexCount() const;
913
921 int meshFaceCount() const;
922
928 int meshEdgeCount() const;
929
938 bool labelsEnabled() const;
939
950 void setLabelsEnabled( bool enabled );
951
960 const QgsAbstractMeshLayerLabeling *labeling() const SIP_SKIP { return mLabeling; }
961
968 QgsAbstractMeshLayerLabeling *labeling() { return mLabeling; }
969
974 void setLabeling( QgsAbstractMeshLayerLabeling *labeling SIP_TRANSFER );
975
985 bool minimumMaximumActiveScalarDataset( const QgsRectangle &extent, const QgsMeshDatasetIndex &datasetIndex, double &min SIP_OUT, double &max SIP_OUT );
986
992 QgsMeshDatasetIndex activeScalarDatasetIndex( QgsRenderContext &rendererContext );
993
1003 bool datasetsPathUnique( const QString &path );
1004
1005 public slots:
1006
1012 void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
1013
1014 signals:
1015
1022
1029
1036
1042 void reloaded();
1043
1044 private: // Private methods
1045
1049 bool isReadOnly() const override {return true;}
1050
1057 bool setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() );
1058#ifdef SIP_RUN
1059 QgsMeshLayer( const QgsMeshLayer &rhs );
1060#endif
1061
1062 void fillNativeMesh();
1063 void assignDefaultStyleToDatasetGroup( int groupIndex );
1064 void createSimplifiedMeshes();
1065 int levelsOfDetailsIndex( double partOfMeshInView ) const;
1066
1067 bool hasSimplifiedMeshes() const;
1068
1070 void applyClassificationOnScalarSettings( const QgsMeshDatasetGroupMetadata &meta, QgsMeshRendererScalarSettings &scalarSettings ) const;
1071
1072 private slots:
1073 void onDatasetGroupsAdded( const QList<int> &datasetGroupIndexes );
1074 void onMeshEdited();
1075
1076 private:
1078 QgsMeshDataProvider *mDataProvider = nullptr;
1079
1081 QStringList mExtraDatasetUri;
1082
1083 std::unique_ptr<QgsMeshDatasetGroupStore> mDatasetGroupStore;
1084
1086 std::unique_ptr<QgsMesh> mNativeMesh;
1087
1089 std::vector<std::unique_ptr<QgsTriangularMesh>> mTriangularMeshes;
1090
1092 std::unique_ptr<QgsMeshLayerRendererCache> mRendererCache;
1093
1095 QgsMeshRendererSettings mRendererSettings;
1096
1098 QgsMeshTimeSettings mTimeSettings;
1099
1101 QgsMeshSimplificationSettings mSimplificationSettings;
1102
1103 QgsMeshLayerTemporalProperties *mTemporalProperties = nullptr;
1104 QgsMeshLayerElevationProperties *mElevationProperties = nullptr;
1105
1108
1109 int mStaticScalarDatasetIndex = 0;
1110 int mStaticVectorDatasetIndex = 0;
1111
1112 QgsMeshEditor *mMeshEditor = nullptr;
1113
1115 bool mLabelsEnabled = false;
1116
1118 QgsAbstractMeshLayerLabeling *mLabeling = nullptr;
1119
1121 int closestEdge( const QgsPointXY &point, double searchRadius, QgsPointXY &projectedPoint ) const;
1122
1124 int closestVertex( const QgsPointXY &point, double searchRadius, QgsPointXY &projectedPoint ) const;
1125
1127 int closestFace( const QgsPointXY &point, double searchRadius, QgsPointXY &projectedPoint ) const;
1128
1129 void updateActiveDatasetGroups();
1130
1131 QgsMeshRendererSettings accordSymbologyWithGroupName( const QgsMeshRendererSettings &settings, const QMap<QString, int> &nameToIndex );
1132 void checkSymbologyConsistency();
1133
1134 void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider,
1136};
1137
1138#endif //QGSMESHLAYER_H
TemporalUnit
Temporal units.
Definition qgis.h:5005
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:450
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.
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:46
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.
Base class for all map layer types.
Definition qgsmaplayer.h:77
QFlags< StyleCategory > StyleCategories
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext)=0
Sets the coordinate transform context to transformContext.
virtual Q_INVOKABLE QgsDataProvider * dataProvider()
Returns the layer's data provider, it may be nullptr.
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.
void activeScalarDatasetGroupChanged(int index)
Emitted when active scalar group dataset is changed.
void activeVectorDatasetGroupChanged(int index)
Emitted when active vector group dataset is changed.
void timeSettingsChanged()
Emitted when time format is changed.
QgsMeshLayer & operator=(QgsMeshLayer const &rhs)=delete
QgsMeshLayer(const QgsMeshLayer &rhs)=delete
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:60
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:231
A triangular/derived mesh with vertices in map coordinates.
#define SIP_SKIP
Definition qgis_sip.h:126
#define FINAL
Definition qgis_sip.h:242
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:76
Setting options for creating vector data providers.
Setting options for loading mesh layers.
QgsCoordinateTransformContext transformContext
Coordinate transform context.
LayerOptions(const QgsCoordinateTransformContext &transformContext=QgsCoordinateTransformContext())
Constructor for LayerOptions with optional transformContext.
Mesh - vertices, edges and faces.