コード例 #1
0
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;
}
コード例 #2
0
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() );
  }
}
コード例 #3
0
bool QgsMeshCalculatorDialog::expressionValid() const
{
  QString errorString;
  QgsMeshCalculator::Result result = QgsMeshCalculator::expression_valid(
                                       formulaString(),
                                       meshLayer()
                                     );
  return ( result == QgsMeshCalculator::Success );
}
コード例 #4
0
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() );
}
コード例 #5
0
ファイル: qgsprocessingutils.cpp プロジェクト: dmarteau/QGIS
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;
}
コード例 #6
0
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 );
  }
}
コード例 #7
0
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 );
}