Load color tables from settings

This commit is contained in:
Dan Paulat 2021-11-06 22:18:02 -05:00
parent bcae7d9825
commit b241703b40
16 changed files with 324 additions and 17 deletions

View file

@ -1,4 +1,5 @@
#include <scwx/common/color_table.hpp>
#include <scwx/util/streams.hpp>
#include <cmath>
#include <fstream>
@ -122,6 +123,11 @@ boost::gil::rgba8_pixel_t ColorTable::Color(float value) const
return color;
}
bool ColorTable::IsValid() const
{
return p->colorMap_.size() > 0;
}
std::shared_ptr<ColorTable> ColorTable::Load(const std::string& filename)
{
BOOST_LOG_TRIVIAL(debug)
@ -132,7 +138,7 @@ std::shared_ptr<ColorTable> ColorTable::Load(const std::string& filename)
std::ifstream f(filename, std::ios_base::in);
std::string line;
while (std::getline(f, line))
while (scwx::util::getline(f, line))
{
std::string token;
std::istringstream tokens(line);

View file

@ -27,6 +27,16 @@ static const std::unordered_map<Level2Product, std::string> level2Description_ {
{Level2Product::ClutterFilterPowerRemoved, "Clutter Filter Power Removed"},
{Level2Product::Unknown, "?"}};
static const std::unordered_map<Level2Product, std::string> level2Palette_ {
{Level2Product::Reflectivity, "BR"},
{Level2Product::Velocity, "BV"},
{Level2Product::SpectrumWidth, "SW"},
{Level2Product::DifferentialReflectivity, "ZDR"},
{Level2Product::DifferentialPhase, "PHI"},
{Level2Product::CorrelationCoefficient, "CC"},
{Level2Product::ClutterFilterPowerRemoved, "???"},
{Level2Product::Unknown, "???"}};
const std::string& GetLevel2Name(Level2Product product)
{
return level2Name_.at(product);
@ -37,6 +47,11 @@ const std::string& GetLevel2Description(Level2Product product)
return level2Description_.at(product);
}
const std::string& GetLevel2Palette(Level2Product product)
{
return level2Palette_.at(product);
}
const Level2Product GetLevel2Product(const std::string& name)
{
auto result = std::find_if(

View file

@ -0,0 +1,42 @@
#include <scwx/util/streams.hpp>
namespace scwx
{
namespace util
{
std::istream& getline(std::istream& is, std::string& t)
{
t.clear();
std::istream::sentry sentry(is, true);
std::streambuf* sb = is.rdbuf();
while (true)
{
int c = sb->sbumpc();
switch (c)
{
case '\n': return is;
case '\r':
if (sb->sgetc() == '\n')
{
sb->sbumpc();
}
return is;
case std::streambuf::traits_type::eof():
if (t.empty())
{
is.setstate(std::ios::eofbit);
}
return is;
default: t += static_cast<char>(c);
}
}
}
} // namespace util
} // namespace scwx