diff --git a/agrolib/meteo/meteo.cpp b/agrolib/meteo/meteo.cpp index 12eb08024..d96851afe 100644 --- a/agrolib/meteo/meteo.cpp +++ b/agrolib/meteo/meteo.cpp @@ -764,9 +764,6 @@ bool setColorScale(meteoVariable variable, Crit3DColorScale *colorScale) { if (colorScale == nullptr) return false; - colorScale->setFixedRange(false); - colorScale->setHideOutliers(false); - switch(variable) { case airTemperature: case dailyAirTemperatureAvg: case dailyAirTemperatureMax: diff --git a/bin/CRITERIA3D/mainwindow.cpp b/bin/CRITERIA3D/mainwindow.cpp index 73c489254..e8183f3b4 100644 --- a/bin/CRITERIA3D/mainwindow.cpp +++ b/bin/CRITERIA3D/mainwindow.cpp @@ -2356,7 +2356,8 @@ void MainWindow::on_actionCriteria3D_run_models_triggered() } -void MainWindow::showCriteria3DVariable(criteria3DVariable var, int layerIndex, bool isFixedRange, double minimum, double maximum) +void MainWindow::showCriteria3DVariable(criteria3DVariable var, int layerIndex, bool isFixedRange, + bool isHideOutliers, double minimum, double maximum) { if (! myProject.isCriteria3DInitialized) { @@ -2412,27 +2413,26 @@ void MainWindow::showCriteria3DVariable(criteria3DVariable var, int layerIndex, ui->labelOutputRaster->setText("Factor of safety [-]"); } - // set range + myProject.criteria3DMap.colorScale->setFixedRange(false); + myProject.criteria3DMap.colorScale->setHideOutliers(false); + + // range fixed if (isFixedRange) { myProject.criteria3DMap.colorScale->setRange(minimum, maximum); myProject.criteria3DMap.colorScale->setFixedRange(true); - myProject.criteria3DMap.colorScale->setHideOutliers(true); } - else + // hide outliers + if (isHideOutliers) { - myProject.criteria3DMap.colorScale->setFixedRange(false); - myProject.criteria3DMap.colorScale->setHideOutliers(false); - if (! isEqual(minimum, NODATA) || ! isEqual(maximum, NODATA)) { if (! isEqual(minimum, NODATA)) myProject.criteria3DMap.colorScale->setMinimum(minimum); if (! isEqual(maximum, NODATA)) - myProject.criteria3DMap.colorScale->setMaximum(maximum); - - myProject.criteria3DMap.colorScale->setHideOutliers(true); + myProject.criteria3DMap.colorScale->setMaximum(maximum); } + myProject.criteria3DMap.colorScale->setHideOutliers(true); } setCurrentRasterOutput(&(myProject.criteria3DMap)); @@ -3226,7 +3226,7 @@ void MainWindow::on_actionHide_Geomap_triggered() void MainWindow::on_actionView_SurfaceWaterContent_automatic_range_triggered() { - showCriteria3DVariable(volumetricWaterContent, 0, false, 0.1, NODATA); + showCriteria3DVariable(volumetricWaterContent, 0, false, true, 0.0, NODATA); } @@ -3244,41 +3244,41 @@ void MainWindow::on_actionView_SurfaceWaterContent_fixed_range_triggered() if (valueStr == "") return; maximum = valueStr.toFloat(); - showCriteria3DVariable(volumetricWaterContent, 0, true, minimum, maximum); + showCriteria3DVariable(volumetricWaterContent, 0, true, false, minimum, maximum); } void MainWindow::on_actionView_SoilMoisture_triggered() { int layerIndex = std::max(1, ui->layerNrEdit->value()); - showCriteria3DVariable(volumetricWaterContent, layerIndex, false, NODATA, NODATA); + showCriteria3DVariable(volumetricWaterContent, layerIndex, false, false, NODATA, NODATA); } void MainWindow::on_actionView_DegreeOfSaturation_automatic_range_triggered() { int layerIndex = ui->layerNrEdit->value(); - showCriteria3DVariable(degreeOfSaturation, layerIndex, false, NODATA, NODATA); + showCriteria3DVariable(degreeOfSaturation, layerIndex, false, false, NODATA, NODATA); } void MainWindow::on_actionView_DegreeOfSaturation_fixed_range_triggered() { int layerIndex = ui->layerNrEdit->value(); - showCriteria3DVariable(degreeOfSaturation, layerIndex, true, 0.2, 1.0); + showCriteria3DVariable(degreeOfSaturation, layerIndex, true, false, 0.1, 1.0); } void MainWindow::on_actionView_Factor_of_safety_triggered() { int layerIndex = std::max(1, ui->layerNrEdit->value()); - showCriteria3DVariable(factorOfSafety, layerIndex, true, 0, 4); + showCriteria3DVariable(factorOfSafety, layerIndex, true, true, 0, 4); } void MainWindow::on_actionView_Factor_of_safety_minimum_triggered() { - showCriteria3DVariable(minimumFactorOfSafety, NODATA, true, 0, 4); + showCriteria3DVariable(minimumFactorOfSafety, NODATA, true, true, 0, 4); } @@ -3314,19 +3314,13 @@ void MainWindow::on_layerNrEdit_valueChanged(int layerIndex) QString depthStr = QString::number(myProject.layerDepth[layerIndex],'f',2); ui->layerDepthEdit->setText(depthStr + " m"); - if (view3DVariable && current3DlayerIndex != 0) - { - if (myProject.criteria3DMap.colorScale->isFixedRange()) - { - showCriteria3DVariable(current3DVariable, layerIndex, true, - myProject.criteria3DMap.colorScale->minimum(), - myProject.criteria3DMap.colorScale->maximum()); - } - else - { - showCriteria3DVariable(current3DVariable, layerIndex, false, NODATA, NODATA); - } - } + bool isRangeFixed = myProject.criteria3DMap.colorScale->isFixedRange(); + bool isHideOutliers = myProject.criteria3DMap.colorScale->isHideOutliers(); + + showCriteria3DVariable(current3DVariable, layerIndex, isRangeFixed, isHideOutliers, + myProject.criteria3DMap.colorScale->minimum(), + myProject.criteria3DMap.colorScale->maximum()); + } diff --git a/bin/CRITERIA3D/mainwindow.h b/bin/CRITERIA3D/mainwindow.h index 857a88eb1..36c56723b 100644 --- a/bin/CRITERIA3D/mainwindow.h +++ b/bin/CRITERIA3D/mainwindow.h @@ -337,7 +337,8 @@ void showMeteoVariable(meteoVariable var); void showSnowVariable(meteoVariable var); - void showCriteria3DVariable(criteria3DVariable var, int layerIndex, bool isFixedRange, double minimum, double maximum); + void showCriteria3DVariable(criteria3DVariable var, int layerIndex, bool isFixedRange, + bool isHideOutliers, double minimum, double maximum); bool setRadiationAsCurrentVariable(); bool startModels(QDateTime firstTime, QDateTime lastTime); diff --git a/bin/CRITERIA3D/shared/project3D.cpp b/bin/CRITERIA3D/shared/project3D.cpp index b3c43870c..ce569ce53 100644 --- a/bin/CRITERIA3D/shared/project3D.cpp +++ b/bin/CRITERIA3D/shared/project3D.cpp @@ -911,8 +911,8 @@ void Project3D::computeWaterBalance3D(double totalTimeStep) soilFluxes3D::initializeBalance(); - currentSeconds = 0; // [s] - double showTime = 30; // [s] + currentSeconds = 0; // [s] + double minimumShowTime = 10; // [s] int currentStep = 0; while (currentSeconds < totalTimeStep) { @@ -920,13 +920,15 @@ void Project3D::computeWaterBalance3D(double totalTimeStep) if (showEachTimeStep) { - if (currentSeconds < totalTimeStep && int(currentSeconds / showTime) > currentStep) + if (currentSeconds < totalTimeStep && int(currentSeconds / minimumShowTime) > currentStep) { - currentStep = int(currentSeconds / showTime); + currentStep = int(currentSeconds / minimumShowTime); emit updateOutputSignal(); } } } + + // refresh emit updateOutputSignal(); double runoff = soilFluxes3D::getBoundaryWaterSumFlow(BOUNDARY_RUNOFF);