25 #include "qgsmeshmemorydataprovider.h" 29 const QString &outputFile,
34 : mFormulaString( formulaString )
35 , mOutputDriver( QStringLiteral(
"DAT" ) )
36 , mOutputFile( outputFile )
37 , mOutputExtent( outputExtent )
39 , mStartTime( startTime )
43 if ( !mOutputFile.isEmpty() )
44 mOutputGroupName = QFileInfo( mOutputFile ).baseName();
48 const QString &outputFile,
53 : mFormulaString( formulaString )
54 , mOutputDriver( QStringLiteral(
"DAT" ) )
55 , mOutputFile( outputFile )
56 , mOutputMask( outputMask )
58 , mStartTime( startTime )
62 if ( !mOutputFile.isEmpty() )
63 mOutputGroupName = QFileInfo( mOutputFile ).baseName();
68 const QString &outputDriver,
69 const QString &outputGroupName,
70 const QString &outputFile,
75 : mFormulaString( formulaString )
76 , mOutputDriver( outputDriver )
77 , mOutputGroupName( outputGroupName )
78 , mOutputFile( outputFile )
79 , mOutputExtent( outputExtent )
81 , mStartTime( startTime )
88 const QString &outputDriver,
89 const QString &outputGroupName,
90 const QString &outputFile,
95 : mFormulaString( formulaString )
96 , mOutputDriver( outputDriver )
97 , mOutputGroupName( outputGroupName )
98 , mOutputFile( outputFile )
99 , mOutputMask( outputMask )
101 , mStartTime( startTime )
102 , mEndTime( endTime )
103 , mMeshLayer( layer )
108 const QString &formulaString,
116 const QString &formulaString,
121 std::unique_ptr< QgsMeshCalcNode > calcNode( QgsMeshCalcNode::parseMeshCalcString( formulaString, errorString ) );
131 QgsMeshDriverMetadata::MeshDriverCapability::CanWriteVertexDatasets;
139 if ( mOutputFile.isEmpty() )
154 std::unique_ptr< QgsMeshCalcNode > calcNode( QgsMeshCalcNode::parseMeshCalcString( mFormulaString, errorString ) );
160 QgsMeshCalcUtils dsu( mMeshLayer, calcNode->usedDatasetGroupNames(), mStartTime, mEndTime );
161 if ( !dsu.isValid() )
167 std::unique_ptr<QgsMeshMemoryDatasetGroup> outputGroup = qgis::make_unique<QgsMeshMemoryDatasetGroup> ( mOutputFile, dsu.outputType() );
170 bool ok = calcNode->calculate( dsu, *outputGroup );
188 dsu.filter( *outputGroup, mOutputMask );
192 dsu.filter( *outputGroup, mOutputExtent );
194 outputGroup->isScalar =
true;
195 outputGroup->name = mOutputGroupName;
208 QVector<QgsMeshDataBlock> datasetValues;
209 QVector<QgsMeshDataBlock> datasetActive;
210 QVector<double> times;
212 const auto datasize = outputGroup->datasets.size();
213 datasetValues.reserve( datasize );
214 times.reserve( datasize );
216 for (
int i = 0; i < datasize; ++i )
218 const std::shared_ptr<QgsMeshMemoryDataset> dataset = outputGroup->datasets.at( i );
220 times.push_back( dataset->time );
221 datasetValues.push_back(
222 dataset->datasetValues( outputGroup->isScalar,
224 dataset->values.size() )
226 if ( !dataset->active.isEmpty() )
228 datasetActive.push_back(
229 dataset->areFacesActive(
231 dataset->active.size() )
238 mOutputDriver +
':' + mOutputFile,
Result
Result of the calculation.
A rectangle specified with double values.
Result processCalculation(QgsFeedback *feedback=nullptr)
Starts the calculation, writes new dataset group to file and adds it to the mesh layer.
virtual bool persistDatasetGroup(const QString &path, const QgsMeshDatasetGroupMetadata &meta, const QVector< QgsMeshDataBlock > &datasetValues, const QVector< QgsMeshDataBlock > &datasetActive, const QVector< double > ×)=0
Creates a new dataset group from a data and persists it into a destination path.
void setProgress(double progress)
Sets the current progress for the feedback object.
A geometry is the spatial representation of a feature.
Q_DECL_DEPRECATED QgsMeshCalculator(const QString &formulaString, const QString &outputFile, const QgsRectangle &outputExtent, double startTime, double endTime, QgsMeshLayer *layer)
Creates calculator with bounding box (rectangular) mask.
static Q_DECL_DEPRECATED Result expression_valid(const QString &formulaString, QgsMeshLayer *layer)
Returns whether formula is valid for particular mesh layer.
Base class for feedback objects to be used for cancellation of something running in a worker thread...
QString providerType() const
Returns the provider type for this layer.
static Result expressionIsValid(const QString &formulaString, QgsMeshLayer *layer, QgsMeshDriverMetadata::MeshDriverCapability &requiredCapability)
Returns whether formula is valid for particular mesh layer.
Datasets with different time outputs or not part of the mesh.
QgsMeshDataProvider * dataProvider() override
Returns the layer's data provider, it may be nullptr.
bool isCanceled() const
Tells whether the operation has been canceled already.
Error reading input layer.
Error creating output data file.
Represents a mesh layer supporting display of data on structured or unstructured meshes.