Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmeshvirtualdatasetgroup.h 3 : : --------------------- 4 : : begin : June 2020 5 : : copyright : (C) 2020 by Vincent Cloarec 6 : : email : vcloarec 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 QGSMESHVIRTUALDATASETGROUP_H 19 : : #define QGSMESHVIRTUALDATASETGROUP_H 20 : : 21 : : #include "qgsmeshdataset.h" 22 : : #include "qgsmeshcalcnode.h" 23 : : 24 : : #include "qgsmeshlayertemporalproperties.h" 25 : : 26 : : #define SIP_NO_FILE 27 : : 28 : : /** 29 : : * \ingroup core 30 : : * \class QgsMeshVirtualDatasetGroup 31 : : * \brief Represents a dataset group calculated from a formula string. 32 : : * 33 : : * The calculation is done by the QgsMeshCalcUtils class from a QgsMeshCalcNode created from the formula 34 : : * Each dataset is calculted when needed, so there is only one dataset store in this class all the time. 35 : : * 36 : : * \since QGIS 3.16 37 : : */ 38 : 0 : class CORE_EXPORT QgsMeshVirtualDatasetGroup: public QgsMeshDatasetGroup 39 : : { 40 : : public: 41 : : 42 : : /** 43 : : * Constructor 44 : : * \param name name of the dataset group 45 : : * \param formulaString formula use to define the dataset group 46 : : * \param layer mesh layer that contains dataset group 47 : : * \param relativeStartTime relative time start, in mimliseconds, from the mesh layer provider reference time 48 : : * \param relativeEndTime relative time end, in mimliseconds, from the mesh layer provider reference time 49 : : */ 50 : : QgsMeshVirtualDatasetGroup( const QString &name, 51 : : const QString &formulaString, 52 : : QgsMeshLayer *layer, 53 : : qint64 relativeStartTime, 54 : : qint64 relativeEndTime ); 55 : : 56 : : void initialize() override; 57 : : int datasetCount() const override; 58 : : QgsMeshDataset *dataset( int index ) const override; 59 : : QgsMeshDatasetMetadata datasetMetadata( int datasetIndex ) const override; 60 : : QStringList datasetGroupNamesDependentOn() const override; 61 : : QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const override; 62 : : QString description() const override; 63 : 0 : QgsMeshDatasetGroup::Type type() const override {return QgsMeshDatasetGroup::Virtual;} 64 : : 65 : : private: 66 : : QString mFormula; 67 : : std::unique_ptr<QgsMeshCalcNode> mCalcNode; 68 : : QgsMeshLayer *mLayer = nullptr; 69 : : qint64 mStartTime = 0.0; 70 : : qint64 mEndTime = 0.0; 71 : : QStringList mDatasetGroupNameUsed; 72 : : QList<qint64> mDatasetTimes; 73 : : 74 : : mutable std::shared_ptr<QgsMeshMemoryDataset> mCacheDataset; 75 : : mutable QVector<QgsMeshDatasetMetadata> mDatasetMetaData; 76 : : mutable int mCurrentDatasetIndex = -1; 77 : : 78 : : bool calculateDataset() const; 79 : : }; 80 : : 81 : : #endif // QGSMESHVIRTUALDATASETGROUP_H