37 : mFormulaString( formulaString )
38 , mOutputDriver( u
"DAT"_s )
39 , mOutputFile( outputFile )
40 , mOutputExtent( outputExtent )
41 , mStartTime( startTime )
45 if ( !mOutputFile.isEmpty() )
46 mOutputGroupName = QFileInfo( mOutputFile ).baseName();
50 : mFormulaString( formulaString )
51 , mOutputDriver( u
"DAT"_s )
52 , mOutputFile( outputFile )
53 , mOutputMask( outputMask )
55 , mStartTime( startTime )
59 if ( !mOutputFile.isEmpty() )
60 mOutputGroupName = QFileInfo( mOutputFile ).baseName();
65 const QString &formulaString,
const QString &outputDriver,
const QString &outputGroupName,
const QString &outputFile,
const QgsRectangle &outputExtent,
double startTime,
double endTime,
QgsMeshLayer *layer
67 : mFormulaString( formulaString )
68 , mOutputDriver( outputDriver )
69 , mOutputGroupName( outputGroupName )
70 , mOutputFile( outputFile )
71 , mOutputExtent( outputExtent )
72 , mStartTime( startTime )
78 const QString &formulaString,
const QString &outputDriver,
const QString &outputGroupName,
const QString &outputFile,
const QgsGeometry &outputMask,
double startTime,
double endTime,
QgsMeshLayer *layer
80 : mFormulaString( formulaString )
81 , mOutputDriver( outputDriver )
82 , mOutputGroupName( outputGroupName )
83 , mOutputFile( outputFile )
84 , mOutputMask( outputMask )
86 , mStartTime( startTime )
94 : mFormulaString( formulaString )
95 , mOutputGroupName( outputGroupName )
96 , mOutputExtent( outputExtent )
97 , mDestination( destination )
98 , mStartTime( startTime )
100 , mMeshLayer( layer )
106 : mFormulaString( formulaString )
107 , mOutputGroupName( outputGroupName )
108 , mOutputMask( outputMask )
110 , mDestination( destination )
111 , mStartTime( startTime )
112 , mEndTime( endTime )
113 , mMeshLayer( layer )
148 if ( !mMeshLayer || !mMeshLayer->dataProvider() || mMeshLayer->providerType() !=
"mdal"_L1 )
155 std::unique_ptr< QgsMeshCalcNode > calcNode( QgsMeshCalcNode::parseMeshCalcString( mFormulaString, errorString ) );
165 std::unique_ptr<QgsMeshDatasetGroup> virtualDatasetGroup = std::make_unique<QgsMeshVirtualDatasetGroup>( mOutputGroupName, mFormulaString, mMeshLayer, mStartTime * 3600 * 1000, mEndTime * 3600 * 1000 );
166 virtualDatasetGroup->initialize();
168 err = !mMeshLayer->addDatasets( virtualDatasetGroup.release() );
182 const QgsMeshCalcUtils dsu( mMeshLayer, calcNode->usedDatasetGroupNames(), mStartTime, mEndTime );
183 if ( !dsu.isValid() )
188 auto outputGroup = std::make_unique<QgsMeshMemoryDatasetGroup>( mOutputGroupName, dsu.outputType() );
191 const bool ok = calcNode->calculate( dsu, *outputGroup );
209 dsu.filter( *outputGroup, mOutputMask );
213 dsu.filter( *outputGroup, mOutputExtent );
215 outputGroup->setIsScalar(
true );
228 QVector<QgsMeshDataBlock> datasetValues;
229 QVector<QgsMeshDataBlock> datasetActive;
230 QVector<double> times;
232 const auto datasize = outputGroup->datasetCount();
233 datasetValues.reserve( datasize );
234 times.reserve( datasize );
236 for (
int i = 0; i < datasize; ++i )
238 const std::shared_ptr<QgsMeshMemoryDataset> dataset = outputGroup->memoryDatasets.at( i );
240 times.push_back( dataset->time );
241 datasetValues.push_back( dataset->datasetValues( outputGroup->isScalar(), 0, dataset->values.size() ) );
242 if ( !dataset->active.isEmpty() )
244 datasetActive.push_back( dataset->areFacesActive( 0, dataset->active.size() ) );
249 outputGroup->initialize();
256 err = !mMeshLayer->addDatasets( outputGroup.release() );
260 err = mMeshLayer->dataProvider()->persistDatasetGroup( mOutputFile, mOutputDriver, meta, datasetValues, datasetActive, times );
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.