Skip to content

Commit 93d884e

Browse files
committed
Merge from vector-overlay
2 parents 8c80882 + ffc975f commit 93d884e

12 files changed

+265
-112
lines changed

Source/CesiumRuntime/Private/CesiumGeoJsonDocument.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ FCesiumGeoJsonDocument::FCesiumGeoJsonDocument(
1313
std::shared_ptr<CesiumVectorData::GeoJsonDocument>&& document)
1414
: _pDocument(std::move(document)) {}
1515

16+
bool FCesiumGeoJsonDocument::IsValid() const {
17+
return this->_pDocument != nullptr;
18+
}
19+
20+
const std::shared_ptr<CesiumVectorData::GeoJsonDocument>&
21+
FCesiumGeoJsonDocument::GetDocument() const {
22+
return this->_pDocument;
23+
}
24+
1625
bool UCesiumGeoJsonDocumentBlueprintLibrary::LoadGeoJsonFromString(
1726
const FString& InString,
1827
FCesiumGeoJsonDocument& OutVectorDocument) {
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// Copyright 2020-2024 CesiumGS, Inc. and Contributors
2+
3+
#include "CesiumGeoJsonDocumentRasterOverlay.h"
4+
5+
#include "CesiumCustomVersion.h"
6+
#include "CesiumGeometry/QuadtreeTilingScheme.h"
7+
#include "CesiumGeospatial/GlobeRectangle.h"
8+
#include "CesiumGeospatial/Projection.h"
9+
#include "CesiumRasterOverlays/GeoJsonDocumentRasterOverlay.h"
10+
#include "CesiumVectorData/VectorStyle.h"
11+
12+
#include "CesiumRuntime.h"
13+
14+
std::unique_ptr<CesiumRasterOverlays::RasterOverlay>
15+
UCesiumGeoJsonDocumentRasterOverlay::CreateOverlay(
16+
const CesiumRasterOverlays::RasterOverlayOptions& options) {
17+
if (this->Source == ECesiumGeoJsonDocumentRasterOverlaySource::FromDocument &&
18+
!this->GeoJsonDocument.IsValid()) {
19+
// Don't create an overlay with an invalid document.
20+
return nullptr;
21+
}
22+
23+
CesiumGeospatial::Projection projection;
24+
if (this->Projection ==
25+
ECesiumGeoJsonDocumentRasterOverlayProjection::Geographic) {
26+
projection = CesiumGeospatial::GeographicProjection(options.ellipsoid);
27+
} else {
28+
projection = CesiumGeospatial::WebMercatorProjection(options.ellipsoid);
29+
}
30+
31+
std::optional<CesiumRasterOverlays::GeoJsonDocumentRasterOverlayStyleCallback>
32+
callbackOpt = std::nullopt;
33+
34+
if (this->StyleCallback.IsBound()) {
35+
callbackOpt =
36+
[Callback = this->StyleCallback](
37+
const std::shared_ptr<CesiumVectorData::GeoJsonDocument>& doc,
38+
const CesiumVectorData::GeoJsonObject* pNode)
39+
-> std::optional<CesiumVectorData::VectorStyle> {
40+
FCesiumVectorStyle style;
41+
if (Callback.Execute(FCesiumGeoJsonObject(doc, pNode), style)) {
42+
return style.toNative();
43+
}
44+
45+
return std::nullopt;
46+
};
47+
}
48+
49+
CesiumRasterOverlays::GeoJsonDocumentRasterOverlayOptions vectorOptions{
50+
this->DefaultStyle.toNative(),
51+
callbackOpt,
52+
std::move(projection),
53+
options.ellipsoid,
54+
this->MipLevels};
55+
56+
if (this->Source ==
57+
ECesiumGeoJsonDocumentRasterOverlaySource::FromCesiumIon) {
58+
if (!IsValid(this->CesiumIonServer)) {
59+
this->CesiumIonServer = UCesiumIonServer::GetServerForNewObjects();
60+
}
61+
62+
return std::make_unique<CesiumRasterOverlays::GeoJsonDocumentRasterOverlay>(
63+
TCHAR_TO_UTF8(*this->MaterialLayerKey),
64+
CesiumRasterOverlays::IonGeoJsonDocumentRasterOverlaySource{
65+
this->IonAssetID,
66+
TCHAR_TO_UTF8(*this->CesiumIonServer->DefaultIonAccessToken),
67+
TCHAR_TO_UTF8(*this->CesiumIonServer->ApiUrl)},
68+
vectorOptions,
69+
options);
70+
} else if (
71+
this->Source == ECesiumGeoJsonDocumentRasterOverlaySource::FromUrl) {
72+
std::vector<CesiumAsync::IAssetAccessor::THeader> headers;
73+
headers.reserve(this->RequestHeaders.Num());
74+
75+
for (auto& [k, v] : this->RequestHeaders) {
76+
headers.push_back({TCHAR_TO_UTF8(*k), TCHAR_TO_UTF8(*v)});
77+
}
78+
79+
return std::make_unique<CesiumRasterOverlays::GeoJsonDocumentRasterOverlay>(
80+
TCHAR_TO_UTF8(*this->MaterialLayerKey),
81+
CesiumRasterOverlays::UrlGeoJsonDocumentRasterOverlaySource{
82+
TCHAR_TO_UTF8(*this->Url),
83+
std::move(headers)},
84+
vectorOptions,
85+
options);
86+
}
87+
88+
return std::make_unique<CesiumRasterOverlays::GeoJsonDocumentRasterOverlay>(
89+
TCHAR_TO_UTF8(*this->MaterialLayerKey),
90+
this->GeoJsonDocument.GetDocument(),
91+
vectorOptions,
92+
options);
93+
}

Source/CesiumRuntime/Private/CesiumGeoJsonObject.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
#include "CesiumGeoJsonObject.h"
22

33
#include "CesiumGeospatial/Cartographic.h"
4-
<<<<<<< HEAD
5-
#include "CesiumGeospatial/CartographicPolygon.h"
6-
=======
7-
>>>>>>> c9a4bb6e4f1d4f2a43a89eed2cb1e487dfa9a28b
84
#include "Dom/JsonObject.h"
95
#include "VecMath.h"
106

Source/CesiumRuntime/Private/CesiumVectorDocumentRasterOverlay.cpp

Lines changed: 0 additions & 76 deletions
This file was deleted.

Source/CesiumRuntime/Private/CesiumVectorStyle.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
#include "CesiumVectorStyle.h"
22

3+
#include "CesiumUtility/Color.h"
4+
35
CesiumVectorData::VectorStyle FCesiumVectorStyle::toNative() const {
46
return CesiumVectorData::VectorStyle{
57
CesiumVectorData::LineStyle{
6-
CesiumVectorData::Color{
8+
CesiumUtility::Color{
79
this->LineStyle.Color.R,
810
this->LineStyle.Color.G,
911
this->LineStyle.Color.B,
@@ -12,7 +14,7 @@ CesiumVectorData::VectorStyle FCesiumVectorStyle::toNative() const {
1214
this->LineStyle.Width,
1315
(CesiumVectorData::LineWidthMode)this->LineStyle.WidthMode},
1416
CesiumVectorData::PolygonStyle{
15-
CesiumVectorData::Color{
17+
CesiumUtility::Color{
1618
this->PolygonStyle.Color.R,
1719
this->PolygonStyle.Color.G,
1820
this->PolygonStyle.Color.B,

Source/CesiumRuntime/Public/CesiumGeoJsonDocument.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,15 @@ struct FCesiumGeoJsonDocument {
3535
std::shared_ptr<CesiumVectorData::GeoJsonDocument>&& document);
3636

3737
/**
38-
* @brief Checks if this FCesiumVectorDocument is valid (document is not
38+
* @brief Checks if this FCesiumGeoJsonDocument is valid (document is not
3939
* nullptr).
4040
*/
41-
bool IsValid() const { return this->_document != nullptr; }
41+
bool IsValid() const;
4242

4343
/**
44-
* @brief Returns the `CesiumVectorData::VectorDocument` this wraps.
44+
* @brief Returns the `CesiumVectorData::GeoJsonDocument` this wraps.
4545
*/
46-
const CesiumUtility::IntrusivePointer<CesiumVectorData::GeoJsonDocument>&
47-
GetDocument() const {
48-
return this->_document;
49-
}
46+
const std::shared_ptr<CesiumVectorData::GeoJsonDocument>& GetDocument() const;
5047

5148
private:
5249
std::shared_ptr<CesiumVectorData::GeoJsonDocument> _pDocument;

0 commit comments

Comments
 (0)