Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/buildLinux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
- name: Removed unneeded packages to gain disk space
run: |
sudo apt update
sudo apt remove google-chrome-stable clang-13 clang-14 clang-15 clang-format-13 clang-format-14 clang-format-15 llvm-13-dev llvm-13-linker-tools llvm-13-runtime llvm-13-tools llvm-13 llvm-14-dev llvm-14-linker-tools llvm-14-runtime llvm-14-tools llvm-14 llvm-15-dev llvm-15-linker-tools llvm-15-runtime llvm-15-tools llvm-15 x11-common xserver-common aspnetcore-runtime-6.0 aspnetcore-runtime-7.0 aspnetcore-runtime-8.0 aspnetcore-runtime-9.0 aspnetcore-targeting-pack-6.0 aspnetcore-targeting-pack-7.0 aspnetcore-targeting-pack-8.0 aspnetcore-targeting-pack-9.0 docker-ce-cli docker-ce dotnet-apphost-pack-6.0 dotnet-apphost-pack-7.0 dotnet-apphost-pack-8.0 dotnet-apphost-pack-9.0 dotnet-host dotnet-hostfxr-6.0 dotnet-hostfxr-7.0 dotnet-hostfxr-8.0 dotnet-hostfxr-9.0 dotnet-runtime-6.0 dotnet-runtime-7.0 dotnet-runtime-8.0 dotnet-runtime-9.0 dotnet-runtime-deps-6.0 dotnet-runtime-deps-7.0 dotnet-runtime-deps-8.0 dotnet-runtime-deps-9.0 dotnet-sdk-6.0 dotnet-sdk-7.0 dotnet-sdk-8.0 dotnet-sdk-9.0 dotnet-targeting-pack-6.0 dotnet-targeting-pack-7.0 dotnet-targeting-pack-8.0 dotnet-targeting-pack-9.0 eatmydata emacsen-common firebird3.0-common-doc firebird3.0-common firefox kubectl mercurial-common mercurial microsoft-edge-stable mssql-tools mysql-client-8.0 mysql-client-core-8.0 mysql-client mysql-common mysql-server-8.0 php8.1 postgresql-14 azure-cli microsoft-edge-stable google-cloud-cli temurin-21-jdk temurin-17-jdk temurin-11-jdk temurin-8-jdk powershell google-cloud-cli-anthoscli mysql-server-core-8.0 containerd.io libllvm15 libllvm14 libllvm13 mono-devel libclang-common-15-dev libclang-common-14-dev libclang-common-13-dev apache2-bin apache2-data apache2-utils apache2 containerd.io cpp-9 cpp-10 cpp-11 cpp-12 cpp docker-ce-cli docker-ce emacsen-common g++-9 g++-10 g++-11 g++-12 g++ gcc-9-base gcc-10-base gcc-11-base gcc-9 gcc-10 gcc-11 gcc-12 gcc gfortran-9 gfortran-10 gfortran-11 gfortran-12 gfortran ruby-dev ruby-full ruby-net-telnet ruby-rubygems ruby-webrick ruby-xmlrpc ruby3.0-dev ruby3.0-doc ruby3.0 ruby rubygems-integration alsa-topology-conf alsa-ucm-conf ant byobu cifs-utils conmon crun debugedit dirmngr imagemagick-6.q16 imagemagick-6-common imagemagick golang-github-containernetworking-plugin-dnsname golang-github-containers-common golang-github-containers-image java-common javascript-common postgresql-client-14 postgresql-client-common postgresql-common vim vim-common vim-runtime vim-tiny tex-common texinfo
sudo apt remove google-chrome-stable clang-13 clang-14 clang-15 clang-format-13 clang-format-14 clang-format-15 llvm-13-dev llvm-13-linker-tools llvm-13-runtime llvm-13-tools llvm-13 llvm-14-dev llvm-14-linker-tools llvm-14-runtime llvm-14-tools llvm-14 llvm-15-dev llvm-15-linker-tools llvm-15-runtime llvm-15-tools llvm-15 x11-common xserver-common aspnetcore-runtime-6.0 aspnetcore-runtime-7.0 aspnetcore-runtime-8.0 aspnetcore-runtime-9.0 aspnetcore-targeting-pack-6.0 aspnetcore-targeting-pack-7.0 aspnetcore-targeting-pack-8.0 aspnetcore-targeting-pack-9.0 docker-ce-cli docker-ce dotnet-apphost-pack-6.0 dotnet-apphost-pack-7.0 dotnet-apphost-pack-8.0 dotnet-apphost-pack-9.0 dotnet-host dotnet-hostfxr-6.0 dotnet-hostfxr-7.0 dotnet-hostfxr-8.0 dotnet-hostfxr-9.0 dotnet-runtime-6.0 dotnet-runtime-7.0 dotnet-runtime-8.0 dotnet-runtime-9.0 dotnet-runtime-deps-6.0 dotnet-runtime-deps-7.0 dotnet-runtime-deps-8.0 dotnet-runtime-deps-9.0 dotnet-sdk-6.0 dotnet-sdk-7.0 dotnet-sdk-8.0 dotnet-sdk-9.0 dotnet-targeting-pack-6.0 dotnet-targeting-pack-7.0 dotnet-targeting-pack-8.0 dotnet-targeting-pack-9.0 eatmydata emacsen-common firebird3.0-common-doc firebird3.0-common firefox kubectl mercurial-common mercurial microsoft-edge-stable mssql-tools mysql-client-8.0 mysql-client-core-8.0 mysql-client mysql-common mysql-server-8.0 php8.1 postgresql-14 azure-cli microsoft-edge-stable google-cloud-cli temurin-21-jdk temurin-17-jdk temurin-11-jdk temurin-8-jdk powershell mysql-server-core-8.0 containerd.io libllvm15 libllvm14 libllvm13 mono-devel libclang-common-15-dev libclang-common-14-dev libclang-common-13-dev apache2-bin apache2-data apache2-utils apache2 containerd.io cpp-9 cpp-10 cpp-11 cpp-12 cpp docker-ce-cli docker-ce emacsen-common g++-9 g++-10 g++-11 g++-12 g++ gcc-9-base gcc-10-base gcc-11-base gcc-9 gcc-10 gcc-11 gcc-12 gcc gfortran-9 gfortran-10 gfortran-11 gfortran-12 gfortran ruby-dev ruby-full ruby-net-telnet ruby-rubygems ruby-webrick ruby-xmlrpc ruby3.0-dev ruby3.0-doc ruby3.0 ruby rubygems-integration alsa-topology-conf alsa-ucm-conf ant byobu cifs-utils conmon crun debugedit dirmngr imagemagick-6.q16 imagemagick-6-common imagemagick golang-github-containernetworking-plugin-dnsname golang-github-containers-common golang-github-containers-image java-common javascript-common postgresql-client-14 postgresql-client-common postgresql-common vim vim-common vim-runtime vim-tiny tex-common texinfo
df -h
sudo rm -rf /usr/local/lib/android || true
sudo rm -rf /usr/share/dotnet || true
Expand Down
5 changes: 5 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

### ? - ?

##### Additions :tada:

- Added `CesiumVectorTilesRasterOverlay` supporting vector data loaded from 3D Tiles tilesets.
- Added support for displaying points in `CesiumGeoJsonDocumentRasterOverlay` and `CesiumVectorTilesRasterOverlay`.

##### Fixes :wrench:

- Added missing includes that introduced compilation failures when building the plugin from source against UE 5.7's bundled clang 20.1.8 toolchain (introduced in v2.25.0 by #1685; binary plugin users were unaffected).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
#include "CesiumGeometry/QuadtreeTilingScheme.h"
#include "CesiumGeospatial/GlobeRectangle.h"
#include "CesiumGeospatial/Projection.h"
#include "CesiumRasterOverlays/GeoJsonDocumentRasterOverlay.h"
#include "CesiumVectorData/VectorStyle.h"
#include "CesiumVectorOverlays/GeoJsonDocumentRasterOverlay.h"

#include "CesiumRuntime.h"

Expand Down Expand Up @@ -52,7 +52,7 @@ UCesiumGeoJsonDocumentRasterOverlay::CreateOverlay(
return nullptr;
}

CesiumRasterOverlays::GeoJsonDocumentRasterOverlayOptions vectorOptions{
CesiumVectorOverlays::GeoJsonDocumentRasterOverlayOptions vectorOptions{
this->DefaultStyle.toNative(),
options.ellipsoid,
this->MipLevels};
Expand All @@ -63,7 +63,7 @@ UCesiumGeoJsonDocumentRasterOverlay::CreateOverlay(
this->CesiumIonServer = UCesiumIonServer::GetServerForNewObjects();
}

return std::make_unique<CesiumRasterOverlays::GeoJsonDocumentRasterOverlay>(
return std::make_unique<CesiumVectorOverlays::GeoJsonDocumentRasterOverlay>(
TCHAR_TO_UTF8(*this->MaterialLayerKey),
wrapLoaderFuture(
this,
Expand All @@ -85,7 +85,7 @@ UCesiumGeoJsonDocumentRasterOverlay::CreateOverlay(
headers.push_back({TCHAR_TO_UTF8(*k), TCHAR_TO_UTF8(*v)});
}

return std::make_unique<CesiumRasterOverlays::GeoJsonDocumentRasterOverlay>(
return std::make_unique<CesiumVectorOverlays::GeoJsonDocumentRasterOverlay>(
TCHAR_TO_UTF8(*this->MaterialLayerKey),
wrapLoaderFuture(
this,
Expand All @@ -102,7 +102,7 @@ UCesiumGeoJsonDocumentRasterOverlay::CreateOverlay(
this->OnDocumentLoaded.Execute(this->GeoJsonDocument);
}

return std::make_unique<CesiumRasterOverlays::GeoJsonDocumentRasterOverlay>(
return std::make_unique<CesiumVectorOverlays::GeoJsonDocumentRasterOverlay>(
getAsyncSystem(),
TCHAR_TO_UTF8(*this->MaterialLayerKey),
this->GeoJsonDocument.GetDocument(),
Expand Down
119 changes: 81 additions & 38 deletions Source/CesiumRuntime/Private/CesiumVectorStyle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,83 +15,126 @@ lineStyleToNative(const FCesiumVectorLineStyle& InLineStyle) {
InLineStyle.Width,
(CesiumVectorData::LineWidthMode)InLineStyle.WidthMode};
}

CesiumVectorData::ColorStyle
fillStyleToNative(const FCesiumVectorPolygonFillStyle& fillStyle) {
return CesiumVectorData::ColorStyle{
CesiumUtility::Color{
fillStyle.Color.R,
fillStyle.Color.G,
fillStyle.Color.B,
fillStyle.Color.A},
(CesiumVectorData::ColorMode)fillStyle.ColorMode};
}
} // 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_cast<uint8>(CesiumVectorData::ColorMode::Normal) ==
static_cast<uint8>(ECesiumVectorColorMode::Normal));
static_assert(
(uint8)CesiumVectorData::ColorMode::Random ==
(uint8)ECesiumVectorColorMode::Random);
static_cast<uint8>(CesiumVectorData::ColorMode::Random) ==
static_cast<uint8>(ECesiumVectorColorMode::Random));
static_assert(
(uint8)CesiumVectorData::LineWidthMode::Meters ==
(uint8)ECesiumVectorLineWidthMode::Meters);
static_cast<uint8>(CesiumVectorData::LineWidthMode::Meters) ==
static_cast<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};
}
static_cast<uint8>(CesiumVectorData::LineWidthMode::Pixels) ==
static_cast<uint8>(ECesiumVectorLineWidthMode::Pixels));

return CesiumVectorData::VectorStyle{
lineStyleToNative(this->LineStyle),
CesiumVectorData::PolygonStyle{
fillStyle,
this->PolygonStyle.Fill
? std::optional<CesiumVectorData::ColorStyle>(
fillStyleToNative(this->PolygonStyle.FillStyle))
: std::nullopt,
this->PolygonStyle.Outline
? std::optional<CesiumVectorData::LineStyle>(
lineStyleToNative(this->PolygonStyle.OutlineStyle))
: std::nullopt},
CesiumVectorData::PointStyle{
this->PointStyle.Radius,
this->PointStyle.Fill
? std::optional<CesiumVectorData::ColorStyle>(
fillStyleToNative(this->PointStyle.FillStyle))
: std::nullopt,
this->PointStyle.Outline
? std::optional<CesiumVectorData::LineStyle>(
lineStyleToNative(this->PointStyle.OutlineStyle))
: std::nullopt}};
}

FCesiumVectorStyle
FCesiumVectorStyle::fromNative(const CesiumVectorData::VectorStyle& style) {
FCesiumVectorLineStyle OutlineStyle;
FCesiumVectorLineStyle PolygonOutlineStyle;
if (style.polygon.outline) {
OutlineStyle = FCesiumVectorLineStyle{
PolygonOutlineStyle = 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),
static_cast<uint8>(style.polygon.outline->color.r),
static_cast<uint8>(style.polygon.outline->color.g),
static_cast<uint8>(style.polygon.outline->color.b),
static_cast<uint8>(style.polygon.outline->color.a)),
(ECesiumVectorColorMode)style.polygon.outline->colorMode,
style.polygon.outline->width,
(ECesiumVectorLineWidthMode)style.polygon.outline->widthMode};
}

FCesiumVectorPolygonFillStyle FillStyle;
FCesiumVectorPolygonFillStyle PolygonFillStyle;
if (style.polygon.fill) {
FillStyle = FCesiumVectorPolygonFillStyle{
PolygonFillStyle = 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),
static_cast<uint8>(style.polygon.fill->color.r),
static_cast<uint8>(style.polygon.fill->color.g),
static_cast<uint8>(style.polygon.fill->color.b),
static_cast<uint8>(style.polygon.fill->color.a)),
(ECesiumVectorColorMode)style.polygon.fill->colorMode};
}

FCesiumVectorLineStyle PointOutlineStyle;
if (style.point.outline) {
PolygonOutlineStyle = FCesiumVectorLineStyle{
FColor(
static_cast<uint8>(style.point.outline->color.r),
static_cast<uint8>(style.point.outline->color.g),
static_cast<uint8>(style.point.outline->color.b),
static_cast<uint8>(style.point.outline->color.a)),
(ECesiumVectorColorMode)style.point.outline->colorMode,
style.point.outline->width,
(ECesiumVectorLineWidthMode)style.point.outline->widthMode};
}

FCesiumVectorPolygonFillStyle PointFillStyle;
if (style.point.fill) {
PolygonFillStyle = FCesiumVectorPolygonFillStyle{
FColor(
static_cast<uint8>(style.point.fill->color.r),
static_cast<uint8>(style.point.fill->color.g),
static_cast<uint8>(style.point.fill->color.b),
static_cast<uint8>(style.point.fill->color.a)),
(ECesiumVectorColorMode)style.point.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),
static_cast<uint8>(style.line.color.r),
static_cast<uint8>(style.line.color.g),
static_cast<uint8>(style.line.color.b),
static_cast<uint8>(style.line.color.a)),
(ECesiumVectorColorMode)style.line.colorMode,
style.line.width,
(ECesiumVectorLineWidthMode)style.line.widthMode},
FCesiumVectorPolygonStyle{
style.polygon.fill.has_value(),
FillStyle,
PolygonFillStyle,
style.polygon.outline.has_value(),
OutlineStyle}};
PolygonOutlineStyle},
FCesiumVectorPointStyle{
(float)style.point.radius,
style.point.fill.has_value(),
PointFillStyle,
style.point.outline.has_value(),
PointOutlineStyle}};
}
62 changes: 62 additions & 0 deletions Source/CesiumRuntime/Private/CesiumVectorTilesRasterOverlay.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright 2020-2024 CesiumGS, Inc. and Contributors

#include "CesiumVectorTilesRasterOverlay.h"

#include <CesiumAsync/IAssetAccessor.h>
#include <CesiumGeometry/QuadtreeTilingScheme.h>
#include <CesiumGeospatial/GlobeRectangle.h>
#include <CesiumGeospatial/Projection.h>
#include <CesiumVectorData/VectorStyle.h>
#include <CesiumVectorOverlays/VectorTilesRasterOverlay.h>

#include "CesiumCustomVersion.h"
#include "CesiumRuntime.h"

#include <vector>

std::unique_ptr<CesiumRasterOverlays::RasterOverlay>
UCesiumVectorTilesRasterOverlay::CreateOverlay(
const CesiumRasterOverlays::RasterOverlayOptions& options) {
std::vector<CesiumAsync::IAssetAccessor::THeader> headers;
headers.reserve(this->RequestHeaders.Num());

for (auto& [k, v] : this->RequestHeaders) {
headers.push_back({TCHAR_TO_UTF8(*k), TCHAR_TO_UTF8(*v)});
}

CesiumVectorOverlays::VectorTilesRasterOverlayOptions vectorOptions{
this->DefaultStyle.toNative(),
headers};

if (this->Source == ECesiumVectorTilesRasterOverlaySource::FromCesiumIon) {
if (this->IonAssetID <= 0) {
return nullptr;
}

if (!IsValid(this->CesiumIonServer)) {
this->CesiumIonServer = UCesiumIonServer::GetServerForNewObjects();
}

FString token = this->IonAccessToken.IsEmpty()
? this->CesiumIonServer->DefaultIonAccessToken
: this->IonAccessToken;

return std::make_unique<CesiumVectorOverlays::VectorTilesRasterOverlay>(
TCHAR_TO_UTF8(*this->MaterialLayerKey),
this->IonAssetID,
TCHAR_TO_UTF8(*token),
std::string(TCHAR_TO_UTF8(*this->CesiumIonServer->ApiUrl)) + "/",
vectorOptions,
options);
}

if (this->Url.IsEmpty()) {
return nullptr;
}

return std::make_unique<CesiumVectorOverlays::VectorTilesRasterOverlay>(
TCHAR_TO_UTF8(*this->MaterialLayerKey),
TCHAR_TO_UTF8(*this->Url),
vectorOptions,
options);
Comment thread
azrogers marked this conversation as resolved.
}
49 changes: 49 additions & 0 deletions Source/CesiumRuntime/Public/CesiumVectorStyle.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,49 @@ struct FCesiumVectorPolygonStyle {
FCesiumVectorLineStyle OutlineStyle;
};

USTRUCT(BlueprintType)
struct FCesiumVectorPointStyle {
GENERATED_BODY()

/**
* The radius of the point in pixels.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
float Radius = 1.0f;

/**
* Whether the point should be filled.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
bool Fill = true;

/**
* If `Fill` is true, this style will be used when filling the point.
*/
UPROPERTY(
EditAnywhere,
BlueprintReadWrite,
Category = "Cesium",
meta = (EditCondition = "Fill"))
FCesiumVectorPolygonFillStyle FillStyle;

/**
* Whether the point should be outlined.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
bool Outline = false;

/**
* If `Outline` is true, this style will be used when outlining the point.
*/
UPROPERTY(
EditAnywhere,
BlueprintReadWrite,
Category = "Cesium",
meta = (EditCondition = "Outline"))
FCesiumVectorLineStyle OutlineStyle;
};

/**
* Style information to use when drawing vector data.
*/
Expand All @@ -154,6 +197,12 @@ struct FCesiumVectorStyle {
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
FCesiumVectorPolygonStyle PolygonStyle;

/**
* Styles to use when drawing points.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
FCesiumVectorPointStyle PointStyle;

/**
* Converts this Unreal representation into the Cesium Native equivalent.
*/
Expand Down
Loading
Loading