mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-29 23:10:06 +00:00
Adding threshold, offset, scale, level accessors for rendering
This commit is contained in:
parent
3fc6837f2a
commit
fa3b75a144
3 changed files with 250 additions and 6 deletions
|
|
@ -11,7 +11,7 @@ AllowAllArgumentsOnNextLine: 'true'
|
||||||
AllowAllConstructorInitializersOnNextLine: 'true'
|
AllowAllConstructorInitializersOnNextLine: 'true'
|
||||||
AllowAllParametersOfDeclarationOnNextLine: 'true'
|
AllowAllParametersOfDeclarationOnNextLine: 'true'
|
||||||
AllowShortBlocksOnASingleLine: 'true'
|
AllowShortBlocksOnASingleLine: 'true'
|
||||||
AllowShortCaseLabelsOnASingleLine: 'true'
|
AllowShortCaseLabelsOnASingleLine: 'false'
|
||||||
AllowShortFunctionsOnASingleLine: Inline
|
AllowShortFunctionsOnASingleLine: Inline
|
||||||
AllowShortIfStatementsOnASingleLine: Never
|
AllowShortIfStatementsOnASingleLine: Never
|
||||||
AllowShortLambdasOnASingleLine: Inline
|
AllowShortLambdasOnASingleLine: Inline
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,14 @@ public:
|
||||||
float y_resolution() const;
|
float y_resolution() const;
|
||||||
uint16_t y_resolution_raw() const;
|
uint16_t y_resolution_raw() const;
|
||||||
|
|
||||||
|
uint16_t threshold() const;
|
||||||
|
float offset() const;
|
||||||
|
float scale() const;
|
||||||
|
uint16_t number_of_levels() const;
|
||||||
|
|
||||||
|
float log_offset() const;
|
||||||
|
float log_scale() const;
|
||||||
|
|
||||||
bool IsCompressionEnabled() const;
|
bool IsCompressionEnabled() const;
|
||||||
|
|
||||||
size_t data_size() const override;
|
size_t data_size() const override;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include <scwx/wsr88d/rpg/product_description_block.hpp>
|
#include <scwx/wsr88d/rpg/product_description_block.hpp>
|
||||||
|
#include <scwx/util/float.hpp>
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <istream>
|
#include <istream>
|
||||||
|
|
@ -34,8 +35,8 @@ static const std::unordered_map<int16_t, uint16_t> rangeMap_ {
|
||||||
{151, 230}, {153, 460}, {154, 300}, {155, 300}, {159, 300}, {161, 300},
|
{151, 230}, {153, 460}, {154, 300}, {155, 300}, {159, 300}, {161, 300},
|
||||||
{163, 300}, {165, 300}, {166, 230}, {167, 300}, {168, 300}, {169, 230},
|
{163, 300}, {165, 300}, {166, 230}, {167, 300}, {168, 300}, {169, 230},
|
||||||
{170, 230}, {171, 230}, {172, 230}, {173, 230}, {174, 230}, {175, 230},
|
{170, 230}, {171, 230}, {172, 230}, {173, 230}, {174, 230}, {175, 230},
|
||||||
{176, 230}, {177, 230}, {178, 300}, {179, 300}, {193, 460}, {195, 460},
|
{176, 230}, {177, 230}, {178, 300}, {179, 300}, {180, 90}, {181, 90},
|
||||||
{196, 50}};
|
{182, 90}, {184, 90}, {186, 415}, {193, 460}, {195, 460}, {196, 50}};
|
||||||
|
|
||||||
static const std::unordered_map<int16_t, uint16_t> xResolutionMap_ {
|
static const std::unordered_map<int16_t, uint16_t> xResolutionMap_ {
|
||||||
{19, 1000}, {20, 2000}, {27, 1000}, {30, 1000}, {31, 2000}, {32, 1000},
|
{19, 1000}, {20, 2000}, {27, 1000}, {30, 1000}, {31, 2000}, {32, 1000},
|
||||||
|
|
@ -48,7 +49,8 @@ static const std::unordered_map<int16_t, uint16_t> xResolutionMap_ {
|
||||||
{159, 250}, {161, 250}, {163, 250}, {165, 250}, {166, 250}, {167, 250},
|
{159, 250}, {161, 250}, {163, 250}, {165, 250}, {166, 250}, {167, 250},
|
||||||
{168, 250}, {169, 2000}, {170, 250}, {171, 2000}, {172, 250}, {173, 250},
|
{168, 250}, {169, 2000}, {170, 250}, {171, 2000}, {172, 250}, {173, 250},
|
||||||
{174, 250}, {175, 250}, {176, 250}, {177, 250}, {178, 1000}, {179, 1000},
|
{174, 250}, {175, 250}, {176, 250}, {177, 250}, {178, 1000}, {179, 1000},
|
||||||
{193, 250}, {195, 1000}};
|
{180, 150}, {181, 150}, {182, 150}, {184, 150}, {186, 300}, {193, 250},
|
||||||
|
{195, 1000}};
|
||||||
|
|
||||||
static const std::unordered_map<int16_t, uint16_t> yResolutionMap_ {{37, 1000},
|
static const std::unordered_map<int16_t, uint16_t> yResolutionMap_ {{37, 1000},
|
||||||
{38, 4000},
|
{38, 4000},
|
||||||
|
|
@ -120,7 +122,10 @@ public:
|
||||||
uint16_t halfword33_;
|
uint16_t halfword33_;
|
||||||
uint16_t halfword34_;
|
uint16_t halfword34_;
|
||||||
uint16_t halfword35_;
|
uint16_t halfword35_;
|
||||||
// Halfwords 36-46 are unused
|
uint16_t halfword36_;
|
||||||
|
uint16_t halfword37_;
|
||||||
|
uint16_t halfword38_;
|
||||||
|
// Halfwords 39-46 are unused
|
||||||
// 47-53: Product dependent parameters 4-10 (Table V, Note 3)
|
// 47-53: Product dependent parameters 4-10 (Table V, Note 3)
|
||||||
uint8_t version_;
|
uint8_t version_;
|
||||||
uint8_t spotBlank_;
|
uint8_t spotBlank_;
|
||||||
|
|
@ -291,6 +296,231 @@ uint16_t ProductDescriptionBlock::y_resolution_raw() const
|
||||||
return yResolution;
|
return yResolution;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t ProductDescriptionBlock::threshold() const
|
||||||
|
{
|
||||||
|
uint16_t threshold = 0;
|
||||||
|
|
||||||
|
switch (p->productCode_)
|
||||||
|
{
|
||||||
|
case 81:
|
||||||
|
threshold = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 32:
|
||||||
|
case 93:
|
||||||
|
case 94:
|
||||||
|
case 99:
|
||||||
|
case 135:
|
||||||
|
case 153:
|
||||||
|
case 154:
|
||||||
|
case 180:
|
||||||
|
case 182:
|
||||||
|
case 186:
|
||||||
|
case 195:
|
||||||
|
threshold = 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 193:
|
||||||
|
threshold = 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 155:
|
||||||
|
threshold = 129;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 159:
|
||||||
|
case 161:
|
||||||
|
case 163:
|
||||||
|
case 167:
|
||||||
|
case 168:
|
||||||
|
case 170:
|
||||||
|
case 172:
|
||||||
|
case 173:
|
||||||
|
case 174:
|
||||||
|
case 175:
|
||||||
|
case 176:
|
||||||
|
threshold = p->halfword37_;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return threshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
float ProductDescriptionBlock::offset() const
|
||||||
|
{
|
||||||
|
float offset = 0.0f;
|
||||||
|
|
||||||
|
switch (p->productCode_)
|
||||||
|
{
|
||||||
|
case 32:
|
||||||
|
case 81:
|
||||||
|
case 93:
|
||||||
|
case 94:
|
||||||
|
case 99:
|
||||||
|
case 153:
|
||||||
|
case 154:
|
||||||
|
case 155:
|
||||||
|
case 180:
|
||||||
|
case 182:
|
||||||
|
case 186:
|
||||||
|
case 193:
|
||||||
|
case 195:
|
||||||
|
offset = static_cast<int16_t>(p->halfword31_) * 0.1f;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 134:
|
||||||
|
offset = util::DecodeFloat16(p->halfword32_);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 135:
|
||||||
|
offset = static_cast<int16_t>(p->halfword33_);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 159:
|
||||||
|
case 161:
|
||||||
|
case 163:
|
||||||
|
case 167:
|
||||||
|
case 168:
|
||||||
|
case 170:
|
||||||
|
case 172:
|
||||||
|
case 173:
|
||||||
|
case 174:
|
||||||
|
case 175:
|
||||||
|
case 176:
|
||||||
|
offset = util::DecodeFloat32(p->halfword33_, p->halfword34_);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
float ProductDescriptionBlock::scale() const
|
||||||
|
{
|
||||||
|
float scale = 1.0f;
|
||||||
|
|
||||||
|
switch (p->productCode_)
|
||||||
|
{
|
||||||
|
case 32:
|
||||||
|
case 93:
|
||||||
|
case 94:
|
||||||
|
case 99:
|
||||||
|
case 153:
|
||||||
|
case 154:
|
||||||
|
case 155:
|
||||||
|
case 180:
|
||||||
|
case 182:
|
||||||
|
case 186:
|
||||||
|
case 193:
|
||||||
|
case 195:
|
||||||
|
scale = p->halfword32_ * 0.1f;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 81:
|
||||||
|
scale = p->halfword32_ * 0.001f;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 134:
|
||||||
|
scale = util::DecodeFloat16(p->halfword31_);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 135:
|
||||||
|
scale = p->halfword32_;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 159:
|
||||||
|
case 161:
|
||||||
|
case 163:
|
||||||
|
case 167:
|
||||||
|
case 168:
|
||||||
|
case 170:
|
||||||
|
case 172:
|
||||||
|
case 173:
|
||||||
|
case 174:
|
||||||
|
case 175:
|
||||||
|
case 176:
|
||||||
|
scale = util::DecodeFloat32(p->halfword31_, p->halfword32_);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t ProductDescriptionBlock::number_of_levels() const
|
||||||
|
{
|
||||||
|
uint16_t numberOfLevels = 1u;
|
||||||
|
|
||||||
|
switch (p->productCode_)
|
||||||
|
{
|
||||||
|
case 32:
|
||||||
|
case 81:
|
||||||
|
case 93:
|
||||||
|
case 94:
|
||||||
|
case 99:
|
||||||
|
case 153:
|
||||||
|
case 154:
|
||||||
|
case 155:
|
||||||
|
case 180:
|
||||||
|
case 182:
|
||||||
|
case 186:
|
||||||
|
case 193:
|
||||||
|
case 195:
|
||||||
|
numberOfLevels = p->halfword33_;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 134:
|
||||||
|
numberOfLevels = 254;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 135:
|
||||||
|
numberOfLevels = 199;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 159:
|
||||||
|
case 161:
|
||||||
|
case 163:
|
||||||
|
case 167:
|
||||||
|
case 168:
|
||||||
|
case 170:
|
||||||
|
case 172:
|
||||||
|
case 173:
|
||||||
|
case 174:
|
||||||
|
case 175:
|
||||||
|
case 176:
|
||||||
|
numberOfLevels = p->halfword36_;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return numberOfLevels;
|
||||||
|
}
|
||||||
|
|
||||||
|
float ProductDescriptionBlock::log_offset() const
|
||||||
|
{
|
||||||
|
float logOffset = 0.0f;
|
||||||
|
|
||||||
|
switch (p->productCode_)
|
||||||
|
{
|
||||||
|
case 134:
|
||||||
|
logOffset = util ::DecodeFloat16(p->halfword35_);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return logOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
float ProductDescriptionBlock::log_scale() const
|
||||||
|
{
|
||||||
|
float logScale = 1.0f;
|
||||||
|
|
||||||
|
switch (p->productCode_)
|
||||||
|
{
|
||||||
|
case 134:
|
||||||
|
logScale = util ::DecodeFloat16(p->halfword34_);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return logScale;
|
||||||
|
}
|
||||||
|
|
||||||
bool ProductDescriptionBlock::IsCompressionEnabled() const
|
bool ProductDescriptionBlock::IsCompressionEnabled() const
|
||||||
{
|
{
|
||||||
bool isCompressed = false;
|
bool isCompressed = false;
|
||||||
|
|
@ -335,8 +565,11 @@ bool ProductDescriptionBlock::Parse(std::istream& is)
|
||||||
is.read(reinterpret_cast<char*>(&p->halfword33_), 2); // 33
|
is.read(reinterpret_cast<char*>(&p->halfword33_), 2); // 33
|
||||||
is.read(reinterpret_cast<char*>(&p->halfword34_), 2); // 34
|
is.read(reinterpret_cast<char*>(&p->halfword34_), 2); // 34
|
||||||
is.read(reinterpret_cast<char*>(&p->halfword35_), 2); // 35
|
is.read(reinterpret_cast<char*>(&p->halfword35_), 2); // 35
|
||||||
|
is.read(reinterpret_cast<char*>(&p->halfword36_), 2); // 36
|
||||||
|
is.read(reinterpret_cast<char*>(&p->halfword37_), 2); // 37
|
||||||
|
is.read(reinterpret_cast<char*>(&p->halfword38_), 2); // 38
|
||||||
|
|
||||||
is.seekg(11 * 2, std::ios_base::cur); // 36-46
|
is.seekg(8 * 2, std::ios_base::cur); // 39-46
|
||||||
|
|
||||||
is.read(reinterpret_cast<char*>(&p->parameters_[3]), 7 * 2); // 47-53
|
is.read(reinterpret_cast<char*>(&p->parameters_[3]), 7 * 2); // 47-53
|
||||||
is.read(reinterpret_cast<char*>(&p->version_), 1); // 54
|
is.read(reinterpret_cast<char*>(&p->version_), 1); // 54
|
||||||
|
|
@ -364,6 +597,9 @@ bool ProductDescriptionBlock::Parse(std::istream& is)
|
||||||
p->halfword33_ = ntohs(p->halfword33_);
|
p->halfword33_ = ntohs(p->halfword33_);
|
||||||
p->halfword34_ = ntohs(p->halfword34_);
|
p->halfword34_ = ntohs(p->halfword34_);
|
||||||
p->halfword35_ = ntohs(p->halfword35_);
|
p->halfword35_ = ntohs(p->halfword35_);
|
||||||
|
p->halfword36_ = ntohs(p->halfword36_);
|
||||||
|
p->halfword37_ = ntohs(p->halfword37_);
|
||||||
|
p->halfword38_ = ntohs(p->halfword38_);
|
||||||
p->offsetToSymbology_ = ntohl(p->offsetToSymbology_);
|
p->offsetToSymbology_ = ntohl(p->offsetToSymbology_);
|
||||||
p->offsetToGraphic_ = ntohl(p->offsetToGraphic_);
|
p->offsetToGraphic_ = ntohl(p->offsetToGraphic_);
|
||||||
p->offsetToTabular_ = ntohl(p->offsetToTabular_);
|
p->offsetToTabular_ = ntohl(p->offsetToTabular_);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue