ralpha-assets/Plugins/CesiumForUnreal/Source/CesiumRuntime/Private/CesiumVectorStyle.cpp

98 lines
3.5 KiB
C++

#include "CesiumVectorStyle.h"
#include "CesiumUtility/Color.h"
namespace {
CesiumVectorData::LineStyle
lineStyleToNative(const FCesiumVectorLineStyle& InLineStyle) {
return CesiumVectorData::LineStyle{
{CesiumUtility::Color{
InLineStyle.Color.R,
InLineStyle.Color.G,
InLineStyle.Color.B,
InLineStyle.Color.A},
(CesiumVectorData::ColorMode)InLineStyle.ColorMode},
InLineStyle.Width,
(CesiumVectorData::LineWidthMode)InLineStyle.WidthMode};
}
} // namespace
CesiumVectorData::VectorStyle FCesiumVectorStyle::toNative() const {
// Assert that enums are equivalent to catch any issues.
static_assert(
(uint8)CesiumVectorData::ColorMode::Normal ==
(uint8)ECesiumVectorColorMode::Normal);
static_assert(
(uint8)CesiumVectorData::ColorMode::Random ==
(uint8)ECesiumVectorColorMode::Random);
static_assert(
(uint8)CesiumVectorData::LineWidthMode::Meters ==
(uint8)ECesiumVectorLineWidthMode::Meters);
static_assert(
(uint8)CesiumVectorData::LineWidthMode::Pixels ==
(uint8)ECesiumVectorLineWidthMode::Pixels);
std::optional<CesiumVectorData::ColorStyle> fillStyle;
if (this->PolygonStyle.Fill) {
fillStyle = CesiumVectorData::ColorStyle{
CesiumUtility::Color{
this->PolygonStyle.FillStyle.Color.R,
this->PolygonStyle.FillStyle.Color.G,
this->PolygonStyle.FillStyle.Color.B,
this->PolygonStyle.FillStyle.Color.A},
(CesiumVectorData::ColorMode)this->PolygonStyle.FillStyle.ColorMode};
}
return CesiumVectorData::VectorStyle{
lineStyleToNative(this->LineStyle),
CesiumVectorData::PolygonStyle{
fillStyle,
this->PolygonStyle.Outline
? std::optional<CesiumVectorData::LineStyle>(
lineStyleToNative(this->PolygonStyle.OutlineStyle))
: std::nullopt}};
}
FCesiumVectorStyle
FCesiumVectorStyle::fromNative(const CesiumVectorData::VectorStyle& style) {
FCesiumVectorLineStyle OutlineStyle;
if (style.polygon.outline) {
OutlineStyle = FCesiumVectorLineStyle{
FColor(
(uint8)style.polygon.outline->color.r,
(uint8)style.polygon.outline->color.g,
(uint8)style.polygon.outline->color.b,
(uint8)style.polygon.outline->color.a),
(ECesiumVectorColorMode)style.polygon.outline->colorMode,
style.polygon.outline->width,
(ECesiumVectorLineWidthMode)style.polygon.outline->widthMode};
}
FCesiumVectorPolygonFillStyle FillStyle;
if (style.polygon.fill) {
FillStyle = FCesiumVectorPolygonFillStyle{
FColor(
(uint8)style.polygon.fill->color.r,
(uint8)style.polygon.fill->color.g,
(uint8)style.polygon.fill->color.b,
(uint8)style.polygon.fill->color.a),
(ECesiumVectorColorMode)style.polygon.fill->colorMode};
}
return FCesiumVectorStyle{
FCesiumVectorLineStyle{
FColor(
(uint8)style.line.color.r,
(uint8)style.line.color.g,
(uint8)style.line.color.b,
(uint8)style.line.color.a),
(ECesiumVectorColorMode)style.line.colorMode,
style.line.width,
(ECesiumVectorLineWidthMode)style.line.widthMode},
FCesiumVectorPolygonStyle{
style.polygon.fill.has_value(),
FillStyle,
style.polygon.outline.has_value(),
OutlineStyle}};
}