37 const QString &outputFile,
42 : mFormulaString( formulaString )
43 , mOutputDriver( u
"DAT"_s )
44 , mOutputFile( outputFile )
45 , mOutputExtent( outputExtent )
46 , mStartTime( startTime )
50 if ( !mOutputFile.isEmpty() )
51 mOutputGroupName = QFileInfo( mOutputFile ).baseName();
55 const QString &outputFile,
60 : mFormulaString( formulaString )
61 , mOutputDriver( u
"DAT"_s )
62 , mOutputFile( outputFile )
63 , mOutputMask( outputMask )
65 , mStartTime( startTime )
69 if ( !mOutputFile.isEmpty() )
70 mOutputGroupName = QFileInfo( mOutputFile ).baseName();
75 const QString &outputDriver,
76 const QString &outputGroupName,
77 const QString &outputFile,
82 : mFormulaString( formulaString )
83 , mOutputDriver( outputDriver )
84 , mOutputGroupName( outputGroupName )
85 , mOutputFile( outputFile )
86 , mOutputExtent( outputExtent )
87 , mStartTime( startTime )
94 const QString &outputDriver,
95 const QString &outputGroupName,
96 const QString &outputFile,
101 : mFormulaString( formulaString )
102 , mOutputDriver( outputDriver )
103 , mOutputGroupName( outputGroupName )
104 , mOutputFile( outputFile )
105 , mOutputMask( outputMask )
107 , mStartTime( startTime )
108 , mEndTime( endTime )
109 , mMeshLayer( layer )
114 const QString &outputGroupName,
120 : mFormulaString( formulaString )
121 , mOutputGroupName( outputGroupName )
122 , mOutputExtent( outputExtent )
123 , mDestination( destination )
124 , mStartTime( startTime )
125 , mEndTime( endTime )
126 , mMeshLayer( layer )
131 const QString &outputGroupName,
137 : mFormulaString( formulaString )
138 , mOutputGroupName( outputGroupName )
139 , mOutputMask( outputMask )
141 , mDestination( destination )
142 , mStartTime( startTime )
143 , mEndTime( endTime )
144 , mMeshLayer( layer )
186 !mMeshLayer->dataProvider() ||
187 mMeshLayer->providerType() != u
"mdal"_s
195 std::unique_ptr< QgsMeshCalcNode > calcNode( QgsMeshCalcNode::parseMeshCalcString( mFormulaString, errorString ) );
205 std::unique_ptr<QgsMeshDatasetGroup> virtualDatasetGroup =
206 std::make_unique<QgsMeshVirtualDatasetGroup> ( mOutputGroupName, mFormulaString, mMeshLayer, mStartTime * 3600 * 1000, mEndTime * 3600 * 1000 );
207 virtualDatasetGroup->initialize();
209 err = !mMeshLayer->addDatasets( virtualDatasetGroup.release() );
223 const QgsMeshCalcUtils dsu( mMeshLayer, calcNode->usedDatasetGroupNames(), mStartTime, mEndTime );
224 if ( !dsu.isValid() )
229 auto outputGroup = std::make_unique<QgsMeshMemoryDatasetGroup> ( mOutputGroupName, dsu.outputType() );
232 const bool ok = calcNode->calculate( dsu, *outputGroup );
250 dsu.filter( *outputGroup, mOutputMask );
254 dsu.filter( *outputGroup, mOutputExtent );
256 outputGroup->setIsScalar(
true );
269 QVector<QgsMeshDataBlock> datasetValues;
270 QVector<QgsMeshDataBlock> datasetActive;
271 QVector<double> times;
273 const auto datasize = outputGroup->datasetCount();
274 datasetValues.reserve( datasize );
275 times.reserve( datasize );
277 for (
int i = 0; i < datasize; ++i )
279 const std::shared_ptr<QgsMeshMemoryDataset> dataset = outputGroup->memoryDatasets.at( i );
281 times.push_back( dataset->time );
282 datasetValues.push_back(
283 dataset->datasetValues( outputGroup->isScalar(),
285 dataset->values.size() )
287 if ( !dataset->active.isEmpty() )
289 datasetActive.push_back(
290 dataset->areFacesActive(
292 dataset->active.size() )
298 outputGroup->initialize();
305 err = !mMeshLayer->addDatasets( outputGroup.release() );
309 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.