Add precipitation and cloud type to CCloudLayer

refs #579
This commit is contained in:
Roland Winklmeier
2016-02-28 13:35:46 +01:00
parent af3b8f7f0c
commit 03abfec7c6
3 changed files with 72 additions and 6 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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()) { }