std::unique_ptr<QgsMeshCalculator> QgsMeshCalculatorDialog::calculator() const { std::unique_ptr<QgsMeshCalculator> calc; if ( useExtentCb->isChecked() ) { calc.reset( new QgsMeshCalculator( formulaString(), outputFile(), outputExtent(), startTime(), endTime(), meshLayer() ) ); } else { calc.reset( new QgsMeshCalculator( formulaString(), outputFile(), maskGeometry(), startTime(), endTime(), meshLayer() ) ); } return calc; }
void QgsMeshCalculatorDialog::getDatasetGroupNames() { if ( !meshLayer() || !meshLayer()->dataProvider() ) return; const QgsMeshDataProvider *dp = meshLayer()->dataProvider(); Q_ASSERT( dp ); for ( int i = 0; i < dp->datasetGroupCount(); ++i ) { const QgsMeshDatasetGroupMetadata meta = dp->datasetGroupMetadata( i ); mDatasetsListWidget->addItem( meta.name() ); } }
bool QgsMeshCalculatorDialog::expressionValid() const { QString errorString; QgsMeshCalculator::Result result = QgsMeshCalculator::expression_valid( formulaString(), meshLayer() ); return ( result == QgsMeshCalculator::Success ); }
void QgsMeshCalculatorDialog::useFullLayerExtent() { QgsMeshLayer *layer = meshLayer(); if ( !layer ) return; const QgsRectangle layerExtent = layer->extent(); mXMinSpinBox->setValue( layerExtent.xMinimum() ); mXMaxSpinBox->setValue( layerExtent.xMaximum() ); mYMinSpinBox->setValue( layerExtent.yMinimum() ); mYMaxSpinBox->setValue( layerExtent.yMaximum() ); }
QgsMapLayer *QgsProcessingUtils::loadMapLayerFromString( const QString &string, LayerHint typeHint ) { QStringList components = string.split( '|' ); if ( components.isEmpty() ) return nullptr; QFileInfo fi; if ( QFileInfo::exists( string ) ) fi = QFileInfo( string ); else if ( QFileInfo::exists( components.at( 0 ) ) ) fi = QFileInfo( components.at( 0 ) ); else return nullptr; // TODO - remove when there is a cleaner way to block the unknown projection dialog! ProjectionSettingRestorer restorer; ( void )restorer; // no warnings QString name = fi.baseName(); // brute force attempt to load a matching layer if ( typeHint == LayerHint::UnknownType || typeHint == LayerHint::Vector ) { QgsVectorLayer::LayerOptions options; options.loadDefaultStyle = false; std::unique_ptr< QgsVectorLayer > layer( new QgsVectorLayer( string, name, QStringLiteral( "ogr" ), options ) ); if ( layer->isValid() ) { return layer.release(); } } if ( typeHint == LayerHint::UnknownType || typeHint == LayerHint::Raster ) { QgsRasterLayer::LayerOptions rasterOptions; rasterOptions.loadDefaultStyle = false; std::unique_ptr< QgsRasterLayer > rasterLayer( new QgsRasterLayer( string, name, QStringLiteral( "gdal" ), rasterOptions ) ); if ( rasterLayer->isValid() ) { return rasterLayer.release(); } } if ( typeHint == LayerHint::UnknownType || typeHint == LayerHint::Mesh ) { QgsMeshLayer::LayerOptions meshOptions; std::unique_ptr< QgsMeshLayer > meshLayer( new QgsMeshLayer( string, name, QStringLiteral( "mdal" ), meshOptions ) ); if ( meshLayer->isValid() ) { return meshLayer.release(); } } return nullptr; }
void QgsMeshCalculatorDialog::repopulateTimeCombos() { QgsMeshLayer *layer = meshLayer(); if ( !layer || !layer->dataProvider() ) return; const QgsMeshDataProvider *dp = layer->dataProvider(); // extract all times from all datasets QMap<QString, double> times; for ( int groupIndex = 0; groupIndex < dp->datasetGroupCount(); ++groupIndex ) { for ( int datasetIndex = 0; datasetIndex < dp->datasetCount( groupIndex ); ++datasetIndex ) { const QgsMeshDatasetMetadata meta = dp->datasetMetadata( QgsMeshDatasetIndex( groupIndex, datasetIndex ) ); const double time = meta.time(); const QString timestr = QgsMeshRendererActiveDatasetWidget::formatTime( time ); // the format is "HH:mm:ss" times[timestr] = time; } } // sort by text auto keys = times.keys(); keys.sort(); mStartTimeComboBox->blockSignals( true ); mEndTimeComboBox->blockSignals( true ); mStartTimeComboBox->clear(); mEndTimeComboBox->clear(); // populate combos for ( const QString &key : keys ) { mStartTimeComboBox->addItem( key, times[key] ); mEndTimeComboBox->addItem( key, times[key] ); } mStartTimeComboBox->blockSignals( false ); mEndTimeComboBox->blockSignals( false ); if ( !times.empty() ) { mStartTimeComboBox->setCurrentIndex( 0 ); mEndTimeComboBox->setCurrentIndex( times.size() - 1 ); } }
void QgsMeshCalculatorDialog::setTimesByDatasetGroupName( const QString group ) { QgsMeshLayer *layer = meshLayer(); if ( !layer || !layer->dataProvider() ) return; const QgsMeshDataProvider *dp = layer->dataProvider(); // find group index from group name int groupIndex = -1; for ( int i = 0; i < dp->datasetGroupCount(); ++i ) { const QgsMeshDatasetGroupMetadata meta = dp->datasetGroupMetadata( i ); if ( meta.name() == group ) { groupIndex = i; break; } } if ( groupIndex < 0 ) return; //not found int datasetCount = dp->datasetCount( groupIndex ); if ( datasetCount < 1 ) return; // group without datasets // find maximum and minimum time in this group double minTime = dp->datasetMetadata( QgsMeshDatasetIndex( groupIndex, 0 ) ).time(); int idx = mStartTimeComboBox->findData( minTime ); if ( idx >= 0 ) mStartTimeComboBox->setCurrentIndex( idx ); double maxTime = dp->datasetMetadata( QgsMeshDatasetIndex( groupIndex, datasetCount - 1 ) ).time(); idx = mEndTimeComboBox->findData( maxTime ); if ( idx >= 0 ) mEndTimeComboBox->setCurrentIndex( idx ); }