Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add RequestHeaders property to Cesium3DTileset #1581

Merged
merged 14 commits into from
Jan 29, 2025
Merged
Show file tree
Hide file tree
Changes from 13 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
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

##### Additions :tada:

- Added `RequestHeaders` property to `Cesium3DTileset`, allowing per-tileset headers to be specified.
- Added `CesiumUrlTemplateRasterOverlay`, allowing a raster overlay to be added using tiles requested based on a specified URL template.

##### Fixes :wrench:
Expand Down
2 changes: 1 addition & 1 deletion Source/CesiumRuntime/CesiumRuntime.Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public CesiumRuntime(ReadOnlyTargetRules Target) : base(Target)
"LIBASYNC_STATIC",
"GLM_FORCE_XYZW_ONLY",
"GLM_FORCE_EXPLICIT_CTOR",
"GLM_FORCE_SIZE_T_LENGTH",
"GLM_ENABLE_EXPERIMENTAL",
"TIDY_STATIC",
"URI_STATIC_BUILD",
"SWL_VARIANT_NO_CONSTEXPR_EMPLACE",
Expand Down
34 changes: 34 additions & 0 deletions Source/CesiumRuntime/Private/Cesium3DTileset.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,31 @@ void ACesium3DTileset::SetTilesetSource(ETilesetSource InSource) {
}
}

bool CompareMaps(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should go in the anonymous namespace.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also something like MapsAreEqual would be a better name than CompareMaps, because the latter doesn't indicate as clearly what it means when the function returns true or false.

const TMap<FString, FString>& Lhs,
const TMap<FString, FString>& Rhs) {
if (Lhs.Num() != Rhs.Num()) {
return false;
}

for (const auto& [Key, Value] : Lhs) {
const FString* RhsVal = Rhs.Find(Key);
if (!RhsVal || *RhsVal != Value) {
return false;
}
}

return true;
}

void ACesium3DTileset::SetRequestHeaders(
const TMap<FString, FString>& InRequestHeaders) {
if (!CompareMaps(InRequestHeaders, this->RequestHeaders)) {
this->DestroyTileset();
azrogers marked this conversation as resolved.
Show resolved Hide resolved
this->RequestHeaders = InRequestHeaders;
}
}

void ACesium3DTileset::SetUrl(const FString& InUrl) {
if (InUrl != this->Url) {
if (this->TilesetSource == ETilesetSource::FromUrl) {
Expand Down Expand Up @@ -1287,6 +1312,14 @@ void ACesium3DTileset::LoadTileset() {

options.contentOptions.applyTextureTransform = false;

options.requestHeaders.reserve(this->RequestHeaders.Num());

for (const auto& [Key, Value] : this->RequestHeaders) {
options.requestHeaders.emplace_back(CesiumAsync::IAssetAccessor::THeader{
TCHAR_TO_UTF8(*Key),
TCHAR_TO_UTF8(*Value)});
}

switch (this->TilesetSource) {
case ETilesetSource::FromEllipsoid:
UE_LOG(LogCesium, Log, TEXT("Loading tileset from ellipsoid"));
Expand Down Expand Up @@ -2368,6 +2401,7 @@ void ACesium3DTileset::PostEditChangeProperty(
GET_MEMBER_NAME_CHECKED(ACesium3DTileset, ShowCreditsOnScreen) ||
PropName == GET_MEMBER_NAME_CHECKED(ACesium3DTileset, Root) ||
PropName == GET_MEMBER_NAME_CHECKED(ACesium3DTileset, CesiumIonServer) ||
PropName == GET_MEMBER_NAME_CHECKED(ACesium3DTileset, RequestHeaders) ||
// For properties nested in structs, GET_MEMBER_NAME_CHECKED will prefix
// with the struct name, so just do a manual string comparison.
PropNameAsString == TEXT("RenderCustomDepth") ||
Expand Down
1 change: 0 additions & 1 deletion Source/CesiumRuntime/Private/GeoTransforms.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
#include "VecMath.h"
#include <glm/gtc/matrix_inverse.hpp>

#define GLM_ENABLE_EXPERIMENTAL
#include <glm/gtx/quaternion.hpp>

using namespace CesiumGeospatial;
Expand Down
16 changes: 16 additions & 0 deletions Source/CesiumRuntime/Public/Cesium3DTileset.h
Original file line number Diff line number Diff line change
Expand Up @@ -764,6 +764,16 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor {
meta = (EditCondition = "TilesetSource==ETilesetSource::FromCesiumIon"))
UCesiumIonServer* CesiumIonServer;

/**
* Headers to be attached to each request made for this tileset.
*/
UPROPERTY(
EditAnywhere,
BlueprintGetter = GetRequestHeaders,
BlueprintSetter = SetRequestHeaders,
Category = "Cesium")
TMap<FString, FString> RequestHeaders;

/**
* Check if the Cesium ion token used to access this tileset is working
* correctly, and fix it if necessary.
Expand Down Expand Up @@ -972,6 +982,12 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor {
UFUNCTION(BlueprintSetter, Category = "Cesium")
void SetUrl(const FString& InUrl);

UFUNCTION(BlueprintGetter, Category = "Cesium")
TMap<FString, FString> GetRequestHeaders() const { return RequestHeaders; }

UFUNCTION(BlueprintSetter, Category = "Cesium")
void SetRequestHeaders(const TMap<FString, FString>& InRequestHeaders);

UFUNCTION(BlueprintGetter, Category = "Cesium")
int64 GetIonAssetID() const { return IonAssetID; }

Expand Down
2 changes: 1 addition & 1 deletion extern/cesium-native
Submodule cesium-native updated 46 files
+10 −0 CHANGES.md
+0 −2 Cesium3DTilesContent/CMakeLists.txt
+2 −1 Cesium3DTilesContent/src/I3dmToGltfConverter.cpp
+6 −0 Cesium3DTilesSelection/include/Cesium3DTilesSelection/TilesetOptions.h
+0 −1 Cesium3DTilesSelection/src/Tileset.cpp
+5 −6 Cesium3DTilesSelection/src/TilesetContentManager.cpp
+0 −1 Cesium3DTilesSelection/src/TilesetContentManager.h
+2 −2 Cesium3DTilesSelection/src/TilesetHeightQuery.cpp
+0 −11 Cesium3DTilesSelection/test/TestTilesetContentManager.cpp
+31 −0 Cesium3DTilesSelection/test/TestTilesetHeightQueries.cpp
+ Cesium3DTilesSelection/test/data/stacked-cubes/cube.b3dm
+71 −0 Cesium3DTilesSelection/test/data/stacked-cubes/tileset.json
+8 −2 CesiumAsync/include/CesiumAsync/SharedAssetDepot.h
+0 −2 CesiumGeometry/CMakeLists.txt
+2 −2 CesiumGeometry/src/IntersectionTests.cpp
+0 −2 CesiumGeospatial/CMakeLists.txt
+2 −0 CesiumGeospatial/include/CesiumGeospatial/Ellipsoid.h
+1 −1 CesiumGeospatial/include/CesiumGeospatial/GlobeAnchor.h
+17 −15 CesiumGeospatial/include/CesiumGeospatial/LocalHorizontalCoordinateSystem.h
+0 −2 CesiumGltf/CMakeLists.txt
+1 −13 CesiumGltf/include/CesiumGltf/MetadataConversions.h
+118 −3 CesiumGltf/test/TestJsonValue.cpp
+0 −2 CesiumGltfContent/CMakeLists.txt
+2 −1 CesiumGltfContent/include/CesiumGltfContent/SkirtMeshMetadata.h
+2 −2 CesiumGltfReader/test/TestGltfReader.cpp
+0 −1 CesiumNativeTests/CMakeLists.txt
+2 −2 CesiumRasterOverlays/include/CesiumRasterOverlays/RasterOverlayTileProvider.h
+6 −3 CesiumRasterOverlays/src/RasterOverlayUtilities.cpp
+74 −0 CesiumRasterOverlays/test/ExamplesRasterOverlays.cpp
+13 −35 CesiumUtility/include/CesiumUtility/JsonValue.h
+0 −47 CesiumUtility/include/CesiumUtility/Math.h
+0 −1 CesiumUtility/src/Assert.cpp
+272 −0 CesiumUtility/src/JsonValue.cpp
+0 −49 CesiumUtility/test/TestMath.cpp
+1 −1 cmake/macros/configure_cesium_library.cmake
+2 −0 doc/CMakeLists.txt
+14 −0 doc/community.tag
+461 −0 doc/img/raster-overlay-mapping.svg
+0 −17 doc/raster-overlays.md
+2 −2 doc/topics/developer-setup.md
+3 −1 doc/topics/developer.md
+0 −9 doc/topics/glossary.md
+42 −0 doc/topics/how-raster-overlays-work.md
+25 −0 doc/topics/implementing-a-new-raster-overlay-type.md
+20 −0 doc/topics/raster-overlays.md
+62 −0 doc/topics/style-guide.md