diff --git a/agrolib/gis/color.cpp b/agrolib/gis/color.cpp index 41a3b634..bbcead0a 100644 --- a/agrolib/gis/color.cpp +++ b/agrolib/gis/color.cpp @@ -54,7 +54,8 @@ Crit3DColorScale::Crit3DColorScale() _minimum = NODATA; _maximum = NODATA; - _isRangeBlocked = false; + _isFixedRange = false; + _isHideOutliers = false; _classification = classificationMethod::EqualInterval; } @@ -179,11 +180,12 @@ bool setDTMScale(Crit3DColorScale* myScale) bool setLAIScale(Crit3DColorScale* myScale) { - myScale->initialize(3, 256); + myScale->initialize(4, 256); - myScale->keyColor[0] = Crit3DColor(200, 150, 0); /*!< ocra */ - myScale->keyColor[1] = Crit3DColor(32, 150, 32); /*!< dark green */ - myScale->keyColor[2] = Crit3DColor(0, 255, 0); /*!< green */ + myScale->keyColor[0] = Crit3DColor(200, 160, 0); /*!< ocra */ + myScale->keyColor[1] = Crit3DColor(160, 160, 0); /*!< yellow */ + myScale->keyColor[2] = Crit3DColor(32, 160, 32); /*!< dark green */ + myScale->keyColor[3] = Crit3DColor(0, 255, 0); /*!< green */ return(myScale->classify()); } @@ -205,19 +207,13 @@ bool setTemperatureScale(Crit3DColorScale* myScale) bool setSlopeStabilityScale(Crit3DColorScale* myScale) { - myScale->initialize(11, 220); + myScale->initialize(5, 256); myScale->keyColor[0] = Crit3DColor(128, 0, 128); /*!< violet */ myScale->keyColor[1] = Crit3DColor(255, 0, 0); /*!< red */ myScale->keyColor[2] = Crit3DColor(255, 255, 0); /*!< yellow */ - myScale->keyColor[3] = Crit3DColor(128, 196, 0); /*!< yellow/green */ - myScale->keyColor[4] = Crit3DColor(64, 196, 64); /*!< green */ - myScale->keyColor[5] = Crit3DColor(64, 196, 64); /*!< green */ - myScale->keyColor[6] = Crit3DColor(64, 196, 64); /*!< green */ - myScale->keyColor[7] = Crit3DColor(64, 196, 64); /*!< green */ - myScale->keyColor[8] = Crit3DColor(64, 196, 64); /*!< green */ - myScale->keyColor[9] = Crit3DColor(64, 196, 64); /*!< green */ - myScale->keyColor[10] = Crit3DColor(64, 196, 64); /*!< green */ + myScale->keyColor[3] = Crit3DColor(196, 196, 32); /*!< yellow/green */ + myScale->keyColor[4] = Crit3DColor(64, 196, 64); /*!< green */ return(myScale->classify()); } @@ -239,7 +235,7 @@ bool setAnomalyScale(Crit3DColorScale* myScale) bool setPrecipitationScale(Crit3DColorScale* myScale) { - myScale->initialize(6, 256); + myScale->initialize(6, 252); myScale->keyColor[0] = Crit3DColor(255, 255, 255); /*!< white */ myScale->keyColor[1] = Crit3DColor(0, 0, 255); /*!< blue */ diff --git a/agrolib/gis/color.h b/agrolib/gis/color.h index 57b4d125..526313e2 100644 --- a/agrolib/gis/color.h +++ b/agrolib/gis/color.h @@ -23,8 +23,9 @@ private: unsigned int _nrColors, _nrKeyColors; std::vector color; - float _minimum, _maximum; - bool _isRangeBlocked; + double _minimum, _maximum; + bool _isFixedRange; + bool _isHideOutliers; int _classification; public: @@ -38,18 +39,22 @@ unsigned int nrColors() { return _nrColors; } unsigned int nrKeyColors() { return _nrKeyColors; } - float minimum() { return _minimum; } - void setMinimum(float min) { _minimum = min; } + double minimum() { return _minimum; } + void setMinimum(double min) { _minimum = min; } - float maximum() { return _maximum; } - void setMaximum(float max) { _maximum = max; } + double maximum() { return _maximum; } + void setMaximum(double max) { _maximum = max; } Crit3DColor* getColor(float myValue); unsigned int getColorIndex(float myValue); bool setRange(float minimum, float maximum); - void setRangeBlocked(bool blocked) { _isRangeBlocked = blocked; } - bool isRangeBlocked() { return _isRangeBlocked; } + + void setFixedRange(bool fixedRange) { _isFixedRange = fixedRange; } + bool isFixedRange() { return _isFixedRange; } + + void setHideOutliers(bool hideOutliers) { _isHideOutliers = hideOutliers; } + bool isHideOutliers() { return _isHideOutliers; } }; bool setDefaultScale(Crit3DColorScale* myScale); diff --git a/agrolib/gis/gis.cpp b/agrolib/gis/gis.cpp index 799eab10..a1282e57 100644 --- a/agrolib/gis/gis.cpp +++ b/agrolib/gis/gis.cpp @@ -628,7 +628,7 @@ namespace gis myGrid->maximum = maximum; myGrid->minimum = minimum; - if (! myGrid->colorScale->isRangeBlocked()) + if (! myGrid->colorScale->isFixedRange()) { myGrid->colorScale->setRange(minimum, maximum); } @@ -1355,7 +1355,9 @@ namespace gis c = -1; float valueBoundary = rasterRef.getValueFromRowCol(row + r, col + c); - return isEqual(valueBoundary, rasterRef.header->flag); + bool isBoundary = isEqual(valueBoundary, rasterRef.header->flag); + + return isBoundary; } diff --git a/agrolib/graphics/colorLegend.cpp b/agrolib/graphics/colorLegend.cpp index ef0f42ff..93c5a1fb 100644 --- a/agrolib/graphics/colorLegend.cpp +++ b/agrolib/graphics/colorLegend.cpp @@ -22,9 +22,12 @@ void ColorLegend::paintEvent(QPaintEvent *event) { Q_UNUSED(event) - if (this->colorScale == nullptr) return; + // check + if (this->colorScale == nullptr) + return; if (isEqual(this->colorScale->minimum(), NODATA) - || isEqual(this->colorScale->maximum(), NODATA)) return; + || isEqual(this->colorScale->maximum(), NODATA)) + return; QPainter painter(this); Crit3DColor* myColor; @@ -36,14 +39,14 @@ void ColorLegend::paintEvent(QPaintEvent *event) const int BLANK_DX = 16; int legendWidth = painter.window().width() - BLANK_DX*2; unsigned int nrStep = this->colorScale->nrColors(); - float step = (colorScale->maximum() - colorScale->minimum()) / float(nrStep); + double step = (colorScale->maximum() - colorScale->minimum()) / double(nrStep); double dx = double(legendWidth) / double(nrStep+1); unsigned int stepText = MAXVALUE(nrStep / 4, 1); QString valueStr; int nrDigits; double dblValue, shiftFatctor; - float value = this->colorScale->minimum(); + double value = this->colorScale->minimum(); for (unsigned int i = 0; i <= nrStep; i++) { dblValue = double(value); @@ -53,13 +56,13 @@ void ColorLegend::paintEvent(QPaintEvent *event) if ((i % stepText) == 0) { - if (isEqual(dblValue, 0)) + if (fabs(dblValue) <= 1) { nrDigits = 1; } else { - nrDigits = int(ceil(log10(abs(dblValue)))); + nrDigits = int(ceil(log10(fabs(dblValue)))); } // negative numbers diff --git a/agrolib/graphics/mapGraphicsRasterObject.cpp b/agrolib/graphics/mapGraphicsRasterObject.cpp index 1ca41644..24a42877 100644 --- a/agrolib/graphics/mapGraphicsRasterObject.cpp +++ b/agrolib/graphics/mapGraphicsRasterObject.cpp @@ -1,7 +1,7 @@ /*! \file mapGraphicsRasterObject.cpp - \abstract draw raster in MapGraphics widget + \abstract draws a lat-lon raster in the MapGraphics widget This file is part of CRITERIA-3D distribution. @@ -73,16 +73,6 @@ void RasterObject::clear() } -void RasterObject::setRaster(gis::Crit3DRasterGrid* rasterPtr) -{ - rasterPointer = rasterPtr; -} - -gis::Crit3DRasterGrid* RasterObject::getRaster() -{ - return rasterPointer; -} - void RasterObject::setDrawing(bool value) { isDrawing = value; @@ -381,7 +371,7 @@ bool RasterObject::drawRaster(gis::Crit3DRasterGrid *myRaster, QPainter* myPaint } // dynamic color scale - if (! myRaster->colorScale->isRangeBlocked()) + if (! myRaster->colorScale->isFixedRange()) { if (this->isLatLon) { diff --git a/agrolib/graphics/mapGraphicsRasterObject.h b/agrolib/graphics/mapGraphicsRasterObject.h index bcfa7187..da44166f 100644 --- a/agrolib/graphics/mapGraphicsRasterObject.h +++ b/agrolib/graphics/mapGraphicsRasterObject.h @@ -79,8 +79,10 @@ const gis::Crit3DLatLonHeader& latLonHeader, bool isGrid_); float getRasterMaxSize(); gis::Crit3DGeoPoint* getRasterCenter(); - void setRaster(gis::Crit3DRasterGrid* rasterPtr); - gis::Crit3DRasterGrid* getRaster(); + + void setRaster(gis::Crit3DRasterGrid* rasterPtr) { rasterPointer = rasterPtr; } + gis::Crit3DRasterGrid* getRasterPointer() { return rasterPointer; } + void updateCenter(); Position getCurrentCenter(); diff --git a/agrolib/graphics/mapGraphicsRasterUtm.cpp b/agrolib/graphics/mapGraphicsRasterUtm.cpp index ca92733b..402a6d1d 100644 --- a/agrolib/graphics/mapGraphicsRasterUtm.cpp +++ b/agrolib/graphics/mapGraphicsRasterUtm.cpp @@ -1,7 +1,7 @@ /*! - \file mapGraphicsRasterObject.cpp + \file mapGraphicsRasterUtm.cpp - \abstract draw raster in MapGraphics widget + \abstract draws a UTM raster in the MapGraphics widget This file is part of CRITERIA-3D distribution. @@ -29,6 +29,7 @@ #include "commonConstants.h" #include "mapGraphicsRasterUtm.h" #include "basicMath.h" +#include "color.h" #include #include @@ -326,7 +327,7 @@ bool RasterUtmObject::drawRaster(QPainter* painter) } // dynamic color scale - if (! _rasterPointer->colorScale->isRangeBlocked()) + if (! _rasterPointer->colorScale->isFixedRange()) { gis::updateColorScale(_rasterPointer, rasterWindow); roundColorScale(_rasterPointer->colorScale, 4, true); @@ -362,10 +363,17 @@ bool RasterUtmObject::drawRaster(QPainter* painter) // raster value float value = _rasterPointer->value[rowCenter][colCenter]; - // skip the NODATA value + // check NODATA value (transparent) if (isEqual(value, _rasterPointer->header->flag) || isEqual(value, NODATA)) continue; + // check outliers (transparent) + if (_rasterPointer->colorScale->isHideOutliers()) + { + if (value < _rasterPointer->colorScale->minimum() || value > _rasterPointer->colorScale->maximum()) + continue; + } + // set color myColor = _rasterPointer->colorScale->getColor(value); myQColor = QColor(myColor->red, myColor->green, myColor->blue); diff --git a/agrolib/graphics/mapGraphicsRasterUtm.h b/agrolib/graphics/mapGraphicsRasterUtm.h index 2a67e962..ec679ef6 100644 --- a/agrolib/graphics/mapGraphicsRasterUtm.h +++ b/agrolib/graphics/mapGraphicsRasterUtm.h @@ -70,7 +70,7 @@ void setColorLegend(ColorLegend* colorLegendPtr) {_colorLegendPointer = colorLegendPtr;} void setRaster(gis::Crit3DRasterGrid* rasterPtr) {_rasterPointer = rasterPtr;} - gis::Crit3DRasterGrid* getRaster() {return _rasterPointer;} + gis::Crit3DRasterGrid* getRasterPointer() {return _rasterPointer;} float getValue(Position& pos); float getRasterMaxSize(); diff --git a/agrolib/interpolation/interpolation.cpp b/agrolib/interpolation/interpolation.cpp index 4e5f930c..19cea4be 100644 --- a/agrolib/interpolation/interpolation.cpp +++ b/agrolib/interpolation/interpolation.cpp @@ -1625,7 +1625,7 @@ bool multipleDetrendingMain(std::vector &myPoints if (otherParameters[0].size() > 2) { - for (int i = 0; i < (paramSize - 1); i++) + for (int i = 0; i < (int(paramSize) - 1); i++) otherParameters[i] = otherParameters[i+1]; otherParameters.pop_back(); } @@ -1771,7 +1771,7 @@ bool multipleDetrendingElevation(Crit3DProxyCombination elevationCombination, st } } - if (mySettings->getUseLocalDetrending() && elevationPoints.size() < mySettings->getMinPointsLocalDetrending()) + if (mySettings->getUseLocalDetrending() && int(elevationPoints.size()) < mySettings->getMinPointsLocalDetrending()) { elevationProxy->setIsSignificant(false); Crit3DProxyCombination myCombination = mySettings->getSelectedCombination(); @@ -1999,7 +1999,7 @@ bool multipleDetrending(Crit3DProxyCombination othersCombination, std::vectorgetUseLocalDetrending() && othersPoints.size() < mySettings->getMinPointsLocalDetrending()) + if (mySettings->getUseLocalDetrending() && int(othersPoints.size()) < mySettings->getMinPointsLocalDetrending()) { Crit3DProxyCombination myCombination = mySettings->getCurrentCombination(); for (int pos = 1; pos < proxyNr; pos++) diff --git a/agrolib/interpolation/interpolationSettings.cpp b/agrolib/interpolation/interpolationSettings.cpp index 2cc0a65b..92f65984 100644 --- a/agrolib/interpolation/interpolationSettings.cpp +++ b/agrolib/interpolation/interpolationSettings.cpp @@ -316,7 +316,7 @@ void Crit3DInterpolationSettings::setFittingFunction(const std::vector &)> > &newFittingFunction) { - for (int i = 0; i < newFittingFunction.size(); i ++) + for (int i = 0; i < int(newFittingFunction.size()); i ++) fittingFunction.push_back(newFittingFunction[i]); } @@ -482,7 +482,7 @@ Crit3DProxy* Crit3DInterpolationSettings::getProxy(unsigned pos) int Crit3DInterpolationSettings::getProxyPosFromName(TProxyVar name) { - for (int i = 0; i < getProxyNr(); i++) + for (int i = 0; i < int(getProxyNr()); i++) { if (getProxyPragaName(getProxyName(i)) == name) return i; diff --git a/agrolib/proxyWidget/localProxyWidget.cpp b/agrolib/proxyWidget/localProxyWidget.cpp index 50a67dd4..f703ebca 100644 --- a/agrolib/proxyWidget/localProxyWidget.cpp +++ b/agrolib/proxyWidget/localProxyWidget.cpp @@ -538,7 +538,7 @@ void Crit3DLocalProxyWidget::modelLRClicked(int toggled) for (int m = xMin; m < xMax; m += 5) xVector.push_back(m); - for (int p = 0; p < xVector.size(); p++) + for (int p = 0; p < int(xVector.size()); p++) { point.setX(xVector[p]); point.setY(lapseRatePiecewiseThree_withSlope(xVector[p], parameters[proxyPos])); @@ -575,7 +575,7 @@ void Crit3DLocalProxyWidget::modelLRClicked(int toggled) for (int m = xMin; m < xMax; m += 5) xVector.push_back(m); - for (int p = 0; p < xVector.size(); p++) + for (int p = 0; p < int(xVector.size()); p++) { point.setX(xVector[p]); point.setY(lapseRatePiecewiseFree(xVector[p], parameters[proxyPos])); diff --git a/agrolib/waterTable/importData.cpp b/agrolib/waterTable/importData.cpp index 633abc47..31b242d0 100644 --- a/agrolib/waterTable/importData.cpp +++ b/agrolib/waterTable/importData.cpp @@ -173,7 +173,7 @@ bool loadWaterTableDepthCsv(const QString &csvFileName, std::vector &wellL QString id = items[posId].remove(QChar('"')); bool found = false; int index = NODATA; - for (int i = 0; i < wellList.size(); i++) + for (int i = 0; i < int(wellList.size()); i++) { if (wellList[i].getId() == id) { diff --git a/agrolib/waterTable/waterTable.cpp b/agrolib/waterTable/waterTable.cpp index 01660c96..12eafbf0 100644 --- a/agrolib/waterTable/waterTable.cpp +++ b/agrolib/waterTable/waterTable.cpp @@ -142,7 +142,7 @@ bool WaterTable::setMeteoData(QDate myDate, float tmin, float tmax, float prec) { int index = firstMeteoDate.daysTo(myDate); - if (index < etpValues.size() && index < precValues.size()) + if (index < int(etpValues.size()) && index < int(precValues.size())) { Crit3DDate date = Crit3DDate(myDate.day(), myDate.month(), myDate.year()); etpValues[index] = dailyEtpHargreaves(tmin, tmax, date, well.getLatitude(), &meteoSettings); @@ -283,7 +283,7 @@ double WaterTable::computeCWB(QDate myDate, int nrDays) { actualDate = myDate.addDays(-shift); int index = firstMeteoDate.daysTo(actualDate); - if (index >= 0 && index < precValues.size()) + if (index >= 0 && index < int(precValues.size())) { float etp = etpValues[index]; float prec = precValues[index];