void QgsMeshRendererActiveDatasetWidget::syncToLayer() { setEnabled( mMeshLayer ); whileBlocking( mDatasetGroupTreeView )->syncToLayer(); if ( mMeshLayer ) { const QgsMeshRendererSettings rendererSettings = mMeshLayer->rendererSettings(); mActiveDatasetGroup = mDatasetGroupTreeView->activeGroup(); mActiveScalarDataset = rendererSettings.activeScalarDataset(); mActiveVectorDataset = rendererSettings.activeVectorDataset(); } else { mActiveDatasetGroup = -1; mActiveScalarDataset = QgsMeshDatasetIndex(); mActiveVectorDataset = QgsMeshDatasetIndex(); } int val = 0; if ( mActiveScalarDataset.isValid() ) val = mActiveScalarDataset.dataset(); mDatasetSlider->setValue( val ); setSliderRange(); onActiveDatasetChanged( val ); }
void QgsMeshRendererActiveDatasetWidget::onActiveDatasetChanged( int value ) { int groupIndex = mDatasetGroupTreeView->activeGroup(); mActiveScalarDataset = QgsMeshDatasetIndex(); mActiveVectorDataset = QgsMeshDatasetIndex(); QgsMeshDatasetIndex datasetIndex( groupIndex, value ); if ( mMeshLayer && mMeshLayer->dataProvider() && datasetIndex.isValid() && mMeshLayer->dataProvider()->datasetCount( groupIndex ) > value ) { const QgsMeshDatasetGroupMetadata meta = mMeshLayer->dataProvider()->datasetGroupMetadata( datasetIndex ); mActiveScalarDataset = datasetIndex; if ( meta.isVector() ) mActiveVectorDataset = datasetIndex; } updateMetadata( datasetIndex ); emit activeScalarDatasetChanged( activeScalarDataset() ); emit activeVectorDatasetChanged( activeVectorDataset() ); emit widgetChanged(); }
QgsMeshDatasetIndex QgsMeshRendererActiveDatasetWidget::datasetIndex() const { int value = mDatasetSlider->value(); int groupIndex = mDatasetGroupTreeView->activeGroup(); if ( mMeshLayer && mMeshLayer->dataProvider() && groupIndex != -1 && mMeshLayer->dataProvider()->datasetCount( groupIndex ) > value ) return QgsMeshDatasetIndex( groupIndex, value ); else return QgsMeshDatasetIndex(); }
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 ); }
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 ); } }