QGIS API Documentation 3.39.0-Master (47f7b3a4989)
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"
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
165 QgsMeshLayer( const QgsMeshLayer &rhs ) = delete;
167 QgsMeshLayer &operator=( QgsMeshLayer const &rhs ) = delete;
168
169#ifdef SIP_RUN
170 SIP_PYOBJECT __repr__();
171 % MethodCode
172 QString str = QStringLiteral( "<QgsMeshLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
173 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
174 % End
175#endif
176
178 const QgsMeshDataProvider *dataProvider() const override SIP_SKIP;
179 QgsMeshLayer *clone() const override SIP_FACTORY;
180 QgsRectangle extent() const override;
181 QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
182 QgsAbstractProfileGenerator *createProfileGenerator( const QgsProfileRequest &request ) override SIP_FACTORY;
183 bool readSymbology( const QDomNode &node, QString &errorMessage,
184 QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
185 bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage,
186 const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
187 bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) const override;
188 bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) override;
189 QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
190 QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
191 bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
192 bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
193 QgsMapLayerTemporalProperties *temporalProperties() override;
194 QgsMapLayerElevationProperties *elevationProperties() override;
195 void reload() override;
196 QStringList subLayers() const override;
197 QString htmlMetadata() const override;
198 bool isEditable() const override;
199 bool supportsEditing() const override;
200 QString loadDefaultStyle( bool &resultFlag SIP_OUT ) FINAL;
201
203 QString providerType() const;
204
214 bool addDatasets( const QString &path, const QDateTime &defaultReferenceTime = QDateTime() );
215
224 bool addDatasets( QgsMeshDatasetGroup *datasetGroup SIP_TRANSFER );
225
236 bool saveDataset( const QString &path, int datasetGroupIndex, QString driver );
237
243 QgsMesh *nativeMesh() SIP_SKIP;
244
250 const QgsMesh *nativeMesh() const SIP_SKIP;
251
264 QgsTriangularMesh *triangularMesh( double minimumTriangleSize = 0 ) const SIP_SKIP;
265
272 int triangularMeshLevelOfDetailCount() const SIP_SKIP;
273
284 QgsTriangularMesh *triangularMeshByLodIndex( int lodIndex ) const SIP_SKIP;
285
293 void updateTriangularMesh( const QgsCoordinateTransform &transform = QgsCoordinateTransform() );
294
300 QgsMeshLayerRendererCache *rendererCache() SIP_SKIP;
301
303 QgsMeshRendererSettings rendererSettings() const;
305 void setRendererSettings( const QgsMeshRendererSettings &settings );
306
312 QgsMeshTimeSettings timeSettings() const;
313
319 void setTimeSettings( const QgsMeshTimeSettings &settings );
320
326 QgsMeshSimplificationSettings meshSimplificationSettings() const SIP_SKIP;
327
333 void setMeshSimplificationSettings( const QgsMeshSimplificationSettings &meshSimplificationSettings ) SIP_SKIP;
334
341 QString formatTime( double hours );
342
348 int datasetGroupCount() const;
349
355 int extraDatasetGroupCount() const;
356
365 QList<int> datasetGroupsIndexes() const;
366
375 QList<int> enabledDatasetGroupsIndexes() const;
376
385 QgsMeshDatasetGroupMetadata datasetGroupMetadata( const QgsMeshDatasetIndex &index ) const;
386
397 int datasetCount( const QgsMeshDatasetIndex &index ) const;
398
409 QgsMeshDatasetMetadata datasetMetadata( const QgsMeshDatasetIndex &index ) const;
410
428 QgsMeshDatasetValue datasetValue( const QgsMeshDatasetIndex &index, int valueIndex ) const;
429
448 QgsMeshDataBlock datasetValues( const QgsMeshDatasetIndex &index, int valueIndex, int count ) const;
449
466 QgsMesh3DDataBlock dataset3dValues( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
467
475 bool isFaceActive( const QgsMeshDatasetIndex &index, int faceIndex ) const;
476
489 QgsMeshDataBlock areFacesActive( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
490
513 QgsMeshDatasetValue datasetValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point, double searchRadius = 0 ) const;
514
534 QgsMesh3DDataBlock dataset3dValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point ) const;
535
555 QgsMeshDatasetValue dataset1dValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point, double searchRadius ) const;
556
572 QgsMeshDatasetIndex datasetIndexAtTime( const QgsDateTimeRange &timeRange, int datasetGroupIndex ) const;
573
589 QgsMeshDatasetIndex datasetIndexAtRelativeTime( const QgsInterval &relativeTime, int datasetGroupIndex ) const;
590
605 QList<QgsMeshDatasetIndex> datasetIndexInRelativeTimeInterval( const QgsInterval &startRelativeTime, const QgsInterval &endRelativeTime, int datasetGroupIndex ) const;
606
618 QgsMeshDatasetIndex activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const;
619
631 QgsMeshDatasetIndex activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const;
632
640 void setStaticScalarDatasetIndex( const QgsMeshDatasetIndex &staticScalarDatasetIndex ) SIP_SKIP;
641
649 void setStaticVectorDatasetIndex( const QgsMeshDatasetIndex &staticVectorDatasetIndex ) SIP_SKIP;
650
659 QgsMeshDatasetIndex staticScalarDatasetIndex( int group = -1 ) const;
660
669 QgsMeshDatasetIndex staticVectorDatasetIndex( int group = -1 ) const;
670
678 void setReferenceTime( const QDateTime &referenceTime );
679
687 void setTemporalMatchingMethod( const QgsMeshDataProviderTemporalCapabilities::MatchingTemporalDatasetMethod &matchingMethod );
688
710 QgsPointXY snapOnElement( QgsMesh::ElementType elementType, const QgsPointXY &point, double searchRadius );
711
720 QList<int> selectVerticesByExpression( QgsExpression expression );
721
730 QList<int> selectFacesByExpression( QgsExpression expression );
731
739 QgsMeshDatasetGroupTreeItem *datasetGroupTreeRootItem() const;
740
754 void setDatasetGroupTreeRootItem( QgsMeshDatasetGroupTreeItem *rootItem );
755
761 void resetDatasetGroupTreeItem();
762
768 QgsInterval firstValidTimeStep() const;
769
775 QgsInterval datasetRelativeTime( const QgsMeshDatasetIndex &index );
776
782 qint64 datasetRelativeTimeInMilliseconds( const QgsMeshDatasetIndex &index );
783
791 Q_DECL_DEPRECATED bool startFrameEditing( const QgsCoordinateTransform &transform );
792
803 bool startFrameEditing( const QgsCoordinateTransform &transform, QgsMeshEditingError &error SIP_OUT, bool fixErrors );
804
805
814 bool commitFrameEditing( const QgsCoordinateTransform &transform, bool continueEditing = true );
815
824 bool rollBackFrameEditing( const QgsCoordinateTransform &transform, bool continueEditing = true );
825
833 void stopFrameEditing( const QgsCoordinateTransform &transform );
834
844 bool reindex( const QgsCoordinateTransform &transform, bool renumber );
845
851 QgsMeshEditor *meshEditor();
852
858 bool isModified() const override;
859
864 bool contains( const QgsMesh::ElementType &type ) const;
865
873 int meshVertexCount() const;
874
882 int meshFaceCount() const;
883
889 int meshEdgeCount() const;
890
899 bool labelsEnabled() const;
900
911 void setLabelsEnabled( bool enabled );
912
921 const QgsAbstractMeshLayerLabeling *labeling() const SIP_SKIP { return mLabeling; }
922
929 QgsAbstractMeshLayerLabeling *labeling() { return mLabeling; }
930
935 void setLabeling( QgsAbstractMeshLayerLabeling *labeling SIP_TRANSFER );
936
937
938 public slots:
939
945 void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
946
947 signals:
948
955
962
969
975 void reloaded();
976
977 private: // Private methods
978
982 bool isReadOnly() const override {return true;}
983
990 bool setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
991
992#ifdef SIP_RUN
993 QgsMeshLayer( const QgsMeshLayer &rhs );
994#endif
995
996 void fillNativeMesh();
997 void assignDefaultStyleToDatasetGroup( int groupIndex );
998 void createSimplifiedMeshes();
999 int levelsOfDetailsIndex( double partOfMeshInView ) const;
1000
1001 bool hasSimplifiedMeshes() const;
1002
1004 void applyClassificationOnScalarSettings( const QgsMeshDatasetGroupMetadata &meta, QgsMeshRendererScalarSettings &scalarSettings ) const;
1005
1006 private slots:
1007 void onDatasetGroupsAdded( const QList<int> &datasetGroupIndexes );
1008 void onMeshEdited();
1009
1010 private:
1012 QgsMeshDataProvider *mDataProvider = nullptr;
1013
1015 QStringList mExtraDatasetUri;
1016
1017 std::unique_ptr<QgsMeshDatasetGroupStore> mDatasetGroupStore;
1018
1020 std::unique_ptr<QgsMesh> mNativeMesh;
1021
1023 std::vector<std::unique_ptr<QgsTriangularMesh>> mTriangularMeshes;
1024
1026 std::unique_ptr<QgsMeshLayerRendererCache> mRendererCache;
1027
1029 QgsMeshRendererSettings mRendererSettings;
1030
1032 QgsMeshTimeSettings mTimeSettings;
1033
1035 QgsMeshSimplificationSettings mSimplificationSettings;
1036
1037 QgsMeshLayerTemporalProperties *mTemporalProperties = nullptr;
1038 QgsMeshLayerElevationProperties *mElevationProperties = nullptr;
1039
1042
1043 int mStaticScalarDatasetIndex = 0;
1044 int mStaticVectorDatasetIndex = 0;
1045
1046 QgsMeshEditor *mMeshEditor = nullptr;
1047
1049 bool mLabelsEnabled = false;
1050
1052 QgsAbstractMeshLayerLabeling *mLabeling = nullptr;
1053
1054 int closestEdge( const QgsPointXY &point, double searchRadius, QgsPointXY &projectedPoint ) const;
1055
1057 QgsPointXY snapOnVertex( const QgsPointXY &point, double searchRadius );
1058
1060 QgsPointXY snapOnEdge( const QgsPointXY &point, double searchRadius );
1061
1063 QgsPointXY snapOnFace( const QgsPointXY &point, double searchRadius );
1064
1065 void updateActiveDatasetGroups();
1066
1067 QgsMeshRendererSettings accordSymbologyWithGroupName( const QgsMeshRendererSettings &settings, const QMap<QString, int> &nameToIndex );
1068 void checkSymbologyConsistency();
1069
1070 void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider,
1072};
1073
1074#endif //QGSMESHLAYER_H
TemporalUnit
Temporal units.
Definition qgis.h:4470
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.
Class for doing transforms between two map coordinate systems.
QFlags< ReadFlag > ReadFlags
Class for 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:75
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 to interpolate 3d stacked mesh data to 2d data.
QgsMesh3DDataBlock is a block of 3d stacked mesh data related N faces defined on base mesh frame.
QgsMeshDataBlock is a block of integers/doubles that can be used to retrieve: active flags (e....
Class for handling properties relating to a mesh data provider's temporal capabilities.
Base class for providing data for QgsMeshLayer.
QgsMeshDatasetGroupMetadata is a collection of dataset group metadata such as whether the data is vec...
Class used to register and access 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.
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
QgsMeshDatasetMetadata is a collection of mesh dataset metadata such as whether the data is valid or ...
QgsMeshDatasetValue represents single dataset value.
Class that represents an error during mesh editing.
Class that makes edit operation on a mesh.
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 cannot be copied.
QgsMeshLayer(const QgsMeshLayer &rhs)=delete
QgsMeshLayer cannot be copied.
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.
A class to represent a 2D point.
Definition qgspointxy.h:60
Encapsulates properties and constraints relating to fetching elevation profiles from different source...
The class is used as a container of context for various read/write operations on other 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:94
Triangular/Derived Mesh is mesh with vertices in map coordinates.
#define str(x)
Definition qgis.cpp:38
#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.