34 const QString &outputFile,
39 : mFormulaString( formulaString )
40 , mOutputDriver( QStringLiteral(
"DAT" ) )
41 , mOutputFile( outputFile )
42 , mOutputExtent( outputExtent )
43 , mStartTime( startTime )
47 if ( !mOutputFile.isEmpty() )
48 mOutputGroupName = QFileInfo( mOutputFile ).baseName();
52 const QString &outputFile,
57 : mFormulaString( formulaString )
58 , mOutputDriver( QStringLiteral(
"DAT" ) )
59 , mOutputFile( outputFile )
60 , mOutputMask( outputMask )
62 , mStartTime( startTime )
66 if ( !mOutputFile.isEmpty() )
67 mOutputGroupName = QFileInfo( mOutputFile ).baseName();
72 const QString &outputDriver,
73 const QString &outputGroupName,
74 const QString &outputFile,
79 : mFormulaString( formulaString )
80 , mOutputDriver( outputDriver )
81 , mOutputGroupName( outputGroupName )
82 , mOutputFile( outputFile )
83 , mOutputExtent( outputExtent )
84 , mStartTime( startTime )
91 const QString &outputDriver,
92 const QString &outputGroupName,
93 const QString &outputFile,
98 : mFormulaString( formulaString )
99 , mOutputDriver( outputDriver )
100 , mOutputGroupName( outputGroupName )
101 , mOutputFile( outputFile )
102 , mOutputMask( outputMask )
104 , mStartTime( startTime )
105 , mEndTime( endTime )
106 , mMeshLayer( layer )
111 const QString &outputGroupName,
117 : mFormulaString( formulaString )
118 , mOutputGroupName( outputGroupName )
119 , mOutputExtent( outputExtent )
120 , mDestination( destination )
121 , mStartTime( startTime )
122 , mEndTime( endTime )
123 , mMeshLayer( layer )
128 const QString &outputGroupName,
134 : mFormulaString( formulaString )
135 , mOutputGroupName( outputGroupName )
136 , mOutputMask( outputMask )
138 , mDestination( destination )
139 , mStartTime( startTime )
140 , mEndTime( endTime )
141 , mMeshLayer( layer )
183 !mMeshLayer->dataProvider() ||
184 mMeshLayer->providerType() != QStringLiteral(
"mdal" )
192 std::unique_ptr< QgsMeshCalcNode > calcNode( QgsMeshCalcNode::parseMeshCalcString( mFormulaString, errorString ) );
202 std::unique_ptr<QgsMeshDatasetGroup> virtualDatasetGroup =
203 std::make_unique<QgsMeshVirtualDatasetGroup> ( mOutputGroupName, mFormulaString, mMeshLayer, mStartTime * 3600 * 1000, mEndTime * 3600 * 1000 );
204 virtualDatasetGroup->initialize();
206 err = !mMeshLayer->addDatasets( virtualDatasetGroup.release() );
220 const QgsMeshCalcUtils dsu( mMeshLayer, calcNode->usedDatasetGroupNames(), mStartTime, mEndTime );
221 if ( !dsu.isValid() )
226 auto outputGroup = std::make_unique<QgsMeshMemoryDatasetGroup> ( mOutputGroupName, dsu.outputType() );
229 const bool ok = calcNode->calculate( dsu, *outputGroup );
247 dsu.filter( *outputGroup, mOutputMask );
251 dsu.filter( *outputGroup, mOutputExtent );
253 outputGroup->setIsScalar(
true );
266 QVector<QgsMeshDataBlock> datasetValues;
267 QVector<QgsMeshDataBlock> datasetActive;
268 QVector<double> times;
270 const auto datasize = outputGroup->datasetCount();
271 datasetValues.reserve( datasize );
272 times.reserve( datasize );
274 for (
int i = 0; i < datasize; ++i )
276 const std::shared_ptr<QgsMeshMemoryDataset> dataset = outputGroup->memoryDatasets.at( i );
278 times.push_back( dataset->time );
279 datasetValues.push_back(
280 dataset->datasetValues( outputGroup->isScalar(),
282 dataset->values.size() )
284 if ( !dataset->active.isEmpty() )
286 datasetActive.push_back(
287 dataset->areFacesActive(
289 dataset->active.size() )
295 outputGroup->initialize();
302 err = !mMeshLayer->addDatasets( outputGroup.release() );
306 err = mMeshLayer->dataProvider()->persistDatasetGroup(
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 Result expressionIsValid(const QString &formulaString, QgsMeshLayer *layer, QgsMeshDriverMetadata::MeshDriverCapability &requiredCapability)
Returns whether formula is valid for particular mesh layer.