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 );
  }
}
Beispiel #2
0
void QgsMeshLayer::setActiveVectorDataset( int index )
{
  if ( index == mActiveVectorDataset )
    return;

  if ( ( index < 0 ) || ( index >= dataProvider()->datasetCount() ) )
  {
    mActiveVectorDataset = NO_ACTIVE_MESH_DATASET;
  }
  else
  {
    const QgsMeshDatasetMetadata metadata = dataProvider()->datasetMetadata( index );
    if ( metadata.isVector() )
      mActiveVectorDataset = index;
    else
      mActiveVectorDataset = NO_ACTIVE_MESH_DATASET;
  }

  triggerRepaint();
}
void QgsMeshRendererActiveDatasetWidget::updateMetadata( QgsMeshDatasetIndex datasetIndex )
{
  if ( !mMeshLayer ||
       !mMeshLayer->dataProvider() ||
       !datasetIndex.isValid() )
  {
    mActiveDatasetMetadata->setText( tr( "No dataset selected" ) );
  }
  else
  {
    QString msg;
    msg += QStringLiteral( "<table>" );

    const QgsMeshDatasetMetadata meta = mMeshLayer->dataProvider()->datasetMetadata( datasetIndex );
    msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" )
           .arg( tr( "Is valid" ) )
           .arg( meta.isValid() ? tr( "Yes" ) : tr( "No" ) );

    msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" )
           .arg( tr( "Time" ) )
           .arg( meta.time() );

    const QgsMeshDatasetGroupMetadata gmeta = mMeshLayer->dataProvider()->datasetGroupMetadata( datasetIndex );
    msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" )
           .arg( tr( "Data Type" ) )
           .arg( gmeta.dataType() == QgsMeshDatasetGroupMetadata::DataOnVertices ? tr( "Defined on vertices" ) : tr( "Defined on faces" ) );

    msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" )
           .arg( tr( "Is vector" ) )
           .arg( gmeta.isVector() ? tr( "Yes" ) : tr( "No" ) );

    for ( auto it = gmeta.extraOptions().constBegin(); it != gmeta.extraOptions().constEnd(); ++it )
    {
      msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" ).arg( it.key() ).arg( it.value() );
    }

    msg += QStringLiteral( "</table>" );
    mActiveDatasetMetadata->setText( msg );
  }

}
void QgsMeshDatasetGroupTreeView::extractGroups()
{
  // TODO replace with MDAL groups when introduced
  mGroups.clear();

  if ( !mMeshLayer || !mMeshLayer->dataProvider() )
    return;

  for ( int i = 0; i < mMeshLayer->dataProvider()->datasetCount(); ++i )
  {
    const QgsMeshDatasetMetadata meta = mMeshLayer->dataProvider()->datasetMetadata( i );
    QString name = meta.extraOptions()["name"];
    if ( mGroups.constFind( name ) == mGroups.constEnd() )
    {
      QVector<int> datasets;
      datasets.append( i );
      mGroups[name] = datasets;
    }
    else
    {
      mGroups[name].append( i );
    }
  }
}