From 03abfec7c6950bfe36c18a0f6f0156d966af3cc4 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Sun, 28 Feb 2016 13:35:46 +0100 Subject: [PATCH] Add precipitation and cloud type to CCloudLayer refs #579 --- src/blackmisc/weather/cloudlayer.cpp | 16 ++++++- src/blackmisc/weather/cloudlayer.h | 60 ++++++++++++++++++++++++-- src/blackmisc/weather/metardecoder.cpp | 2 +- 3 files changed, 72 insertions(+), 6 deletions(-) diff --git a/src/blackmisc/weather/cloudlayer.cpp b/src/blackmisc/weather/cloudlayer.cpp index 71d211950..445bf112d 100644 --- a/src/blackmisc/weather/cloudlayer.cpp +++ b/src/blackmisc/weather/cloudlayer.cpp @@ -22,8 +22,20 @@ namespace BlackMisc namespace Weather { - CCloudLayer::CCloudLayer(CAltitude ceiling, Coverage coverage) : - m_ceiling(ceiling), m_coverage(coverage) + CCloudLayer::CCloudLayer(BlackMisc::Aviation::CAltitude base, + BlackMisc::Aviation::CAltitude ceiling, + Coverage coverage) : + m_ceiling(ceiling), m_base(base), m_coverage(coverage) + { } + + CCloudLayer::CCloudLayer(BlackMisc::Aviation::CAltitude base, + BlackMisc::Aviation::CAltitude ceiling, + int precipitationRate, + Precipitation precipitation, + Clouds clouds, + Coverage coverage) : + m_ceiling(ceiling), m_base(base), m_precipitationRate(precipitationRate), + m_precipitation(precipitation), m_clouds(clouds), m_coverage(coverage) { } CVariant CCloudLayer::propertyByIndex(const BlackMisc::CPropertyIndex &index) const diff --git a/src/blackmisc/weather/cloudlayer.h b/src/blackmisc/weather/cloudlayer.h index 407e11be6..2bc0473e5 100644 --- a/src/blackmisc/weather/cloudlayer.h +++ b/src/blackmisc/weather/cloudlayer.h @@ -38,6 +38,24 @@ namespace BlackMisc Overcast }; + //! Cloud type + enum Clouds + { + NoClouds, + Cirrus, + Stratus, + Cumulus, + Thunderstorm + }; + + //! Precipitation Type + enum Precipitation + { + NoPrecipitation, + Rain, + Snow + }; + //! Properties by index enum ColumnIndex { @@ -50,7 +68,17 @@ namespace BlackMisc CCloudLayer() = default; //! Constructor - CCloudLayer(BlackMisc::Aviation::CAltitude ceiling, Coverage coverage); + CCloudLayer(BlackMisc::Aviation::CAltitude base, + BlackMisc::Aviation::CAltitude ceiling, + Coverage coverage); + + //! Constructor + CCloudLayer(BlackMisc::Aviation::CAltitude base, + BlackMisc::Aviation::CAltitude ceiling, + int precipitationRate, + Precipitation precipitation, + Clouds clouds, + Coverage coverage); //! Set base void setBase(const BlackMisc::Aviation::CAltitude &base) { m_base = base; } @@ -64,6 +92,24 @@ namespace BlackMisc //! Get ceiling BlackMisc::Aviation::CAltitude getCeiling() const { return m_ceiling; } + //! Set precipitation rate + void setPrecipitationRate(int rate) { m_precipitationRate = rate; } + + //! Get precipitation rate + int getPrecipitationRate() const { return m_precipitationRate; } + + //! Set precipitation + void setPrecipitation(Precipitation type) { m_precipitation = type; } + + //! Get precipitation + Precipitation getPrecipitation() const { return m_precipitation; } + + //! Set cloud type + void setClouds(Clouds type) { m_clouds = type; } + + //! Get cloud type + Clouds getClouds() const { return m_clouds; } + //! Set coverage void setCoverage(Coverage coverage) { m_coverage = coverage; } @@ -89,6 +135,9 @@ namespace BlackMisc BLACK_ENABLE_TUPLE_CONVERSION(CCloudLayer) BlackMisc::Aviation::CAltitude m_base; BlackMisc::Aviation::CAltitude m_ceiling; + int m_precipitationRate = 0; + Precipitation m_precipitation = NoPrecipitation; + Clouds m_clouds = NoClouds; Coverage m_coverage; int m_coveragePercent; }; @@ -98,8 +147,13 @@ namespace BlackMisc Q_DECLARE_METATYPE(BlackMisc::Weather::CCloudLayer) Q_DECLARE_METATYPE(BlackMisc::Weather::CCloudLayer::Coverage) BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::Weather::CCloudLayer, ( - attr(o.m_ceiling), - attr(o.m_coverage) + attr(o.m_base), + attr(o.m_ceiling), + attr(o.m_precipitationRate), + attr(o.m_precipitation), + attr(o.m_clouds), + attr(o.m_coverage), + attr(o.m_coveragePercent) )) #endif // guard diff --git a/src/blackmisc/weather/metardecoder.cpp b/src/blackmisc/weather/metardecoder.cpp index 638e8608e..24083cb0f 100644 --- a/src/blackmisc/weather/metardecoder.cpp +++ b/src/blackmisc/weather/metardecoder.cpp @@ -590,7 +590,7 @@ namespace BlackMisc ceiling *= 100; if (!ok) return false; - CCloudLayer cloudLayer(CAltitude(ceiling, CAltitude::AboveGround, CLengthUnit::ft()), getCoverage().value(coverageAsString)); + CCloudLayer cloudLayer(CAltitude(ceiling, CAltitude::AboveGround, CLengthUnit::ft()), {}, getCoverage().value(coverageAsString)); metar.addCloudLayer(cloudLayer); QString cb_tcu = match.captured("cb_tcu"); if (!cb_tcu.isEmpty()) { }