78 lines
2.4 KiB
C
78 lines
2.4 KiB
C
|
|
#pragma once
|
||
|
|
|
||
|
|
#include "Library.h"
|
||
|
|
|
||
|
|
#include <Cesium3DTiles/GroupMetadata.h>
|
||
|
|
#include <Cesium3DTiles/Schema.h>
|
||
|
|
#include <CesiumAsync/SharedFuture.h>
|
||
|
|
|
||
|
|
#include <optional>
|
||
|
|
#include <string>
|
||
|
|
#include <vector>
|
||
|
|
|
||
|
|
namespace CesiumAsync {
|
||
|
|
class AsyncSystem;
|
||
|
|
class IAssetAccessor;
|
||
|
|
} // namespace CesiumAsync
|
||
|
|
|
||
|
|
namespace Cesium3DTilesSelection {
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Holds the metadata associated with a {@link Tileset} or an external
|
||
|
|
* tileset.
|
||
|
|
*/
|
||
|
|
class CESIUM3DTILESSELECTION_API TilesetMetadata {
|
||
|
|
public:
|
||
|
|
~TilesetMetadata() noexcept;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief An object defining the structure of metadata classes and enums. When
|
||
|
|
* this is defined, then `schemaUri` shall be undefined.
|
||
|
|
*/
|
||
|
|
std::optional<Cesium3DTiles::Schema> schema;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief The URI (or IRI) of the external schema file. When this is defined,
|
||
|
|
* then `schema` shall be undefined.
|
||
|
|
*/
|
||
|
|
std::optional<std::string> schemaUri;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief An array of groups that tile content may belong to. Each element of
|
||
|
|
* this array is a metadata entity that describes the group. The tile content
|
||
|
|
* `group` property is an index into this array.
|
||
|
|
*/
|
||
|
|
std::vector<Cesium3DTiles::GroupMetadata> groups;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief A metadata entity that is associated with this tileset.
|
||
|
|
*/
|
||
|
|
std::optional<Cesium3DTiles::MetadataEntity> metadata;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Asynchronously loads the {@link schema} from the {@link schemaUri}.
|
||
|
|
* If the {@link schemaUri} does not contain a value, this method does
|
||
|
|
* nothing and returns an already-resolved future.
|
||
|
|
*
|
||
|
|
* Calling this method multiple times will return the same shared future each
|
||
|
|
* time, unless the {@link schemaUri} is changed. In that case, when this
|
||
|
|
* method is called, the previous load is canceled and the new one begins.
|
||
|
|
*
|
||
|
|
* @param asyncSystem The async system used to do work in threads.
|
||
|
|
* @param pAssetAccessor The asset accessor used to request the schema from
|
||
|
|
* the schemaUri.
|
||
|
|
* @return A future that resolves when the schema has been loaded from the
|
||
|
|
* schemaUri.
|
||
|
|
*/
|
||
|
|
CesiumAsync::SharedFuture<void>& loadSchemaUri(
|
||
|
|
const CesiumAsync::AsyncSystem& asyncSystem,
|
||
|
|
const std::shared_ptr<CesiumAsync::IAssetAccessor>& pAssetAccessor);
|
||
|
|
|
||
|
|
private:
|
||
|
|
std::optional<CesiumAsync::SharedFuture<void>> _loadingFuture;
|
||
|
|
std::optional<std::string> _loadingSchemaUri;
|
||
|
|
std::shared_ptr<bool> _pLoadingCanceled;
|
||
|
|
};
|
||
|
|
|
||
|
|
} // namespace Cesium3DTilesSelection
|