diff --git a/CMakeLists.txt b/CMakeLists.txt index a75909a38..f21c3295d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ option(BUILD_SHARED_LIBS "Build shared libraries" OFF) function(configure_cesium_library targetName) if (MSVC) - target_compile_options(${targetName} PRIVATE /W4 /WX /wd4201) + target_compile_options(${targetName} PRIVATE /W4 /WX /wd4201 /bigobj) else() target_compile_options(${targetName} PRIVATE -Werror -Wall -Wextra -Wconversion -Wpedantic -Wshadow -Wsign-conversion) endif() diff --git a/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h b/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h new file mode 100644 index 000000000..1d86be276 --- /dev/null +++ b/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h @@ -0,0 +1,35 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include "CesiumGltf/ExtensionModelMaxarMeshVariantsValue.h" +#include "CesiumGltf/Library.h" + +#include + +#include +#include + +namespace CesiumGltf { +/** + * @brief glTF extension that defines mesh variants for nodes + */ +struct CESIUMGLTF_API ExtensionModelMaxarMeshVariants final + : public CesiumUtility::ExtensibleObject { + static inline constexpr const char* TypeName = + "ExtensionModelMaxarMeshVariants"; + static inline constexpr const char* ExtensionName = "MAXAR_mesh_variants"; + + /** + * @brief The index of the variant to load by default. The meshes that are + * mapped to the default variant must represent the set of meshes initially + * selected by the nodes for rendering, as per vanilla glTF behavior. + */ + int32_t defaultProperty = -1; + + /** + * @brief variants + */ + std::vector variants; +}; +} // namespace CesiumGltf diff --git a/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariantsValue.h b/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariantsValue.h new file mode 100644 index 000000000..c0f3489a1 --- /dev/null +++ b/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariantsValue.h @@ -0,0 +1,24 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include "CesiumGltf/Library.h" +#include "CesiumGltf/NamedObject.h" + +#include + +namespace CesiumGltf { +/** + * @brief An object defining a valid mesh variant + */ +struct CESIUMGLTF_API ExtensionModelMaxarMeshVariantsValue final + : public CesiumGltf::NamedObject { + static inline constexpr const char* TypeName = + "ExtensionModelMaxarMeshVariantsValue"; + + /** + * @brief The name of the mesh variant + */ + std::string name; +}; +} // namespace CesiumGltf diff --git a/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariants.h b/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariants.h new file mode 100644 index 000000000..eb4822b61 --- /dev/null +++ b/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariants.h @@ -0,0 +1,27 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include "CesiumGltf/ExtensionNodeMaxarMeshVariantsMappingsValue.h" +#include "CesiumGltf/Library.h" + +#include + +#include + +namespace CesiumGltf { +/** + * @brief MAXAR_mesh_variants node extension + */ +struct CESIUMGLTF_API ExtensionNodeMaxarMeshVariants final + : public CesiumUtility::ExtensibleObject { + static inline constexpr const char* TypeName = + "ExtensionNodeMaxarMeshVariants"; + static inline constexpr const char* ExtensionName = "MAXAR_mesh_variants"; + + /** + * @brief A list of mesh to variant mappings + */ + std::vector mappings; +}; +} // namespace CesiumGltf diff --git a/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariantsMappingsValue.h b/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariantsMappingsValue.h new file mode 100644 index 000000000..afd9a7146 --- /dev/null +++ b/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariantsMappingsValue.h @@ -0,0 +1,38 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include "CesiumGltf/Library.h" + +#include + +#include +#include +#include +#include + +namespace CesiumGltf { +/** + * @brief ExtensionNodeMaxarMeshVariants Mappings Value + */ +struct CESIUMGLTF_API ExtensionNodeMaxarMeshVariantsMappingsValue final + : public CesiumUtility::ExtensibleObject { + static inline constexpr const char* TypeName = + "ExtensionNodeMaxarMeshVariantsMappingsValue"; + + /** + * @brief An array of variant index values. + */ + std::vector variants; + + /** + * @brief The mesh associated with the set of variants. + */ + int32_t mesh = -1; + + /** + * @brief The user-defined name of this variant mesh mapping. + */ + std::optional name; +}; +} // namespace CesiumGltf diff --git a/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsJsonHandler.h b/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsJsonHandler.h new file mode 100644 index 000000000..b3bf06964 --- /dev/null +++ b/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsJsonHandler.h @@ -0,0 +1,97 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include "ExtensionModelMaxarMeshVariantsValueJsonHandler.h" + +#include +#include +#include +#include + +namespace CesiumJsonReader { +class ExtensionReaderContext; +} + +namespace CesiumGltfReader { +class ExtensionModelMaxarMeshVariantsJsonHandler + : public CesiumJsonReader::ExtensibleObjectJsonHandler, + public CesiumJsonReader::IExtensionJsonHandler { +public: + using ValueType = CesiumGltf::ExtensionModelMaxarMeshVariants; + + static inline constexpr const char* ExtensionName = "MAXAR_mesh_variants"; + + ExtensionModelMaxarMeshVariantsJsonHandler( + const CesiumJsonReader::ExtensionReaderContext& context) noexcept; + void reset( + IJsonHandler* pParentHandler, + CesiumGltf::ExtensionModelMaxarMeshVariants* pObject); + + virtual IJsonHandler* readObjectKey(const std::string_view& str) override; + + virtual void reset( + IJsonHandler* pParentHandler, + CesiumUtility::ExtensibleObject& o, + const std::string_view& extensionName) override; + + virtual IJsonHandler* readNull() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readNull(); + }; + virtual IJsonHandler* readBool(bool b) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readBool(b); + } + virtual IJsonHandler* readInt32(int32_t i) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readInt32(i); + } + virtual IJsonHandler* readUint32(uint32_t i) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readUint32(i); + } + virtual IJsonHandler* readInt64(int64_t i) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readInt64(i); + } + virtual IJsonHandler* readUint64(uint64_t i) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readUint64(i); + } + virtual IJsonHandler* readDouble(double d) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readDouble(d); + } + virtual IJsonHandler* readString(const std::string_view& str) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readString(str); + } + virtual IJsonHandler* readObjectStart() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readObjectStart(); + } + virtual IJsonHandler* readObjectEnd() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readObjectEnd(); + } + virtual IJsonHandler* readArrayStart() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readArrayStart(); + } + virtual IJsonHandler* readArrayEnd() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readArrayEnd(); + } + virtual void reportWarning( + const std::string& warning, + std::vector&& context = + std::vector()) override { + CesiumJsonReader::ExtensibleObjectJsonHandler::reportWarning( + warning, + std::move(context)); + } + +protected: + IJsonHandler* readObjectKeyExtensionModelMaxarMeshVariants( + const std::string& objectType, + const std::string_view& str, + CesiumGltf::ExtensionModelMaxarMeshVariants& o); + +private: + CesiumGltf::ExtensionModelMaxarMeshVariants* _pObject = nullptr; + CesiumJsonReader::IntegerJsonHandler _defaultProperty; + CesiumJsonReader::ArrayJsonHandler< + CesiumGltf::ExtensionModelMaxarMeshVariantsValue, + ExtensionModelMaxarMeshVariantsValueJsonHandler> + _variants; +}; +} // namespace CesiumGltfReader diff --git a/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsValueJsonHandler.h b/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsValueJsonHandler.h new file mode 100644 index 000000000..47eb9a047 --- /dev/null +++ b/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsValueJsonHandler.h @@ -0,0 +1,38 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include "NamedObjectJsonHandler.h" + +#include +#include + +namespace CesiumJsonReader { +class ExtensionReaderContext; +} + +namespace CesiumGltfReader { +class ExtensionModelMaxarMeshVariantsValueJsonHandler + : public CesiumGltfReader::NamedObjectJsonHandler { +public: + using ValueType = CesiumGltf::ExtensionModelMaxarMeshVariantsValue; + + ExtensionModelMaxarMeshVariantsValueJsonHandler( + const CesiumJsonReader::ExtensionReaderContext& context) noexcept; + void reset( + IJsonHandler* pParentHandler, + CesiumGltf::ExtensionModelMaxarMeshVariantsValue* pObject); + + virtual IJsonHandler* readObjectKey(const std::string_view& str) override; + +protected: + IJsonHandler* readObjectKeyExtensionModelMaxarMeshVariantsValue( + const std::string& objectType, + const std::string_view& str, + CesiumGltf::ExtensionModelMaxarMeshVariantsValue& o); + +private: + CesiumGltf::ExtensionModelMaxarMeshVariantsValue* _pObject = nullptr; + CesiumJsonReader::StringJsonHandler _name; +}; +} // namespace CesiumGltfReader diff --git a/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsJsonHandler.h b/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsJsonHandler.h new file mode 100644 index 000000000..49c442f8c --- /dev/null +++ b/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsJsonHandler.h @@ -0,0 +1,95 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include "ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler.h" + +#include +#include +#include + +namespace CesiumJsonReader { +class ExtensionReaderContext; +} + +namespace CesiumGltfReader { +class ExtensionNodeMaxarMeshVariantsJsonHandler + : public CesiumJsonReader::ExtensibleObjectJsonHandler, + public CesiumJsonReader::IExtensionJsonHandler { +public: + using ValueType = CesiumGltf::ExtensionNodeMaxarMeshVariants; + + static inline constexpr const char* ExtensionName = "MAXAR_mesh_variants"; + + ExtensionNodeMaxarMeshVariantsJsonHandler( + const CesiumJsonReader::ExtensionReaderContext& context) noexcept; + void reset( + IJsonHandler* pParentHandler, + CesiumGltf::ExtensionNodeMaxarMeshVariants* pObject); + + virtual IJsonHandler* readObjectKey(const std::string_view& str) override; + + virtual void reset( + IJsonHandler* pParentHandler, + CesiumUtility::ExtensibleObject& o, + const std::string_view& extensionName) override; + + virtual IJsonHandler* readNull() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readNull(); + }; + virtual IJsonHandler* readBool(bool b) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readBool(b); + } + virtual IJsonHandler* readInt32(int32_t i) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readInt32(i); + } + virtual IJsonHandler* readUint32(uint32_t i) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readUint32(i); + } + virtual IJsonHandler* readInt64(int64_t i) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readInt64(i); + } + virtual IJsonHandler* readUint64(uint64_t i) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readUint64(i); + } + virtual IJsonHandler* readDouble(double d) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readDouble(d); + } + virtual IJsonHandler* readString(const std::string_view& str) override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readString(str); + } + virtual IJsonHandler* readObjectStart() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readObjectStart(); + } + virtual IJsonHandler* readObjectEnd() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readObjectEnd(); + } + virtual IJsonHandler* readArrayStart() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readArrayStart(); + } + virtual IJsonHandler* readArrayEnd() override { + return CesiumJsonReader::ExtensibleObjectJsonHandler::readArrayEnd(); + } + virtual void reportWarning( + const std::string& warning, + std::vector&& context = + std::vector()) override { + CesiumJsonReader::ExtensibleObjectJsonHandler::reportWarning( + warning, + std::move(context)); + } + +protected: + IJsonHandler* readObjectKeyExtensionNodeMaxarMeshVariants( + const std::string& objectType, + const std::string_view& str, + CesiumGltf::ExtensionNodeMaxarMeshVariants& o); + +private: + CesiumGltf::ExtensionNodeMaxarMeshVariants* _pObject = nullptr; + CesiumJsonReader::ArrayJsonHandler< + CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue, + ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler> + _mappings; +}; +} // namespace CesiumGltfReader diff --git a/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler.h b/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler.h new file mode 100644 index 000000000..8882683b8 --- /dev/null +++ b/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler.h @@ -0,0 +1,43 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include +#include +#include +#include +#include + +namespace CesiumJsonReader { +class ExtensionReaderContext; +} + +namespace CesiumGltfReader { +class ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler + : public CesiumJsonReader::ExtensibleObjectJsonHandler { +public: + using ValueType = CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue; + + ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler( + const CesiumJsonReader::ExtensionReaderContext& context) noexcept; + void reset( + IJsonHandler* pParentHandler, + CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue* pObject); + + virtual IJsonHandler* readObjectKey(const std::string_view& str) override; + +protected: + IJsonHandler* readObjectKeyExtensionNodeMaxarMeshVariantsMappingsValue( + const std::string& objectType, + const std::string_view& str, + CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue& o); + +private: + CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue* _pObject = nullptr; + CesiumJsonReader:: + ArrayJsonHandler> + _variants; + CesiumJsonReader::IntegerJsonHandler _mesh; + CesiumJsonReader::StringJsonHandler _name; +}; +} // namespace CesiumGltfReader diff --git a/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp b/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp index ee4636767..37378a816 100644 --- a/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp +++ b/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp @@ -877,6 +877,234 @@ ExtensionCesiumRTCJsonHandler::readObjectKeyExtensionCesiumRTC( return this->readObjectKeyExtensibleObject(objectType, str, *this->_pObject); } +} // namespace CesiumGltfReader +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#include "ExtensionModelMaxarMeshVariantsJsonHandler.h" + +#include + +#include +#include + +namespace CesiumGltfReader { + +ExtensionModelMaxarMeshVariantsJsonHandler:: + ExtensionModelMaxarMeshVariantsJsonHandler( + const CesiumJsonReader::ExtensionReaderContext& context) noexcept + : CesiumJsonReader::ExtensibleObjectJsonHandler(context), + _defaultProperty(), + _variants(context) {} + +void ExtensionModelMaxarMeshVariantsJsonHandler::reset( + CesiumJsonReader::IJsonHandler* pParentHandler, + CesiumGltf::ExtensionModelMaxarMeshVariants* pObject) { + CesiumJsonReader::ExtensibleObjectJsonHandler::reset(pParentHandler, pObject); + this->_pObject = pObject; +} + +CesiumJsonReader::IJsonHandler* +ExtensionModelMaxarMeshVariantsJsonHandler::readObjectKey( + const std::string_view& str) { + assert(this->_pObject); + return this->readObjectKeyExtensionModelMaxarMeshVariants( + CesiumGltf::ExtensionModelMaxarMeshVariants::TypeName, + str, + *this->_pObject); +} + +void ExtensionModelMaxarMeshVariantsJsonHandler::reset( + CesiumJsonReader::IJsonHandler* pParentHandler, + CesiumUtility::ExtensibleObject& o, + const std::string_view& extensionName) { + std::any& value = + o.extensions + .emplace(extensionName, CesiumGltf::ExtensionModelMaxarMeshVariants()) + .first->second; + this->reset( + pParentHandler, + &std::any_cast(value)); +} + +CesiumJsonReader::IJsonHandler* ExtensionModelMaxarMeshVariantsJsonHandler:: + readObjectKeyExtensionModelMaxarMeshVariants( + const std::string& objectType, + const std::string_view& str, + CesiumGltf::ExtensionModelMaxarMeshVariants& o) { + using namespace std::string_literals; + + if ("default"s == str) + return property("default", this->_defaultProperty, o.defaultProperty); + if ("variants"s == str) + return property("variants", this->_variants, o.variants); + + return this->readObjectKeyExtensibleObject(objectType, str, *this->_pObject); +} + +} // namespace CesiumGltfReader +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#include "ExtensionNodeMaxarMeshVariantsJsonHandler.h" + +#include + +#include +#include + +namespace CesiumGltfReader { + +ExtensionNodeMaxarMeshVariantsJsonHandler:: + ExtensionNodeMaxarMeshVariantsJsonHandler( + const CesiumJsonReader::ExtensionReaderContext& context) noexcept + : CesiumJsonReader::ExtensibleObjectJsonHandler(context), + _mappings(context) {} + +void ExtensionNodeMaxarMeshVariantsJsonHandler::reset( + CesiumJsonReader::IJsonHandler* pParentHandler, + CesiumGltf::ExtensionNodeMaxarMeshVariants* pObject) { + CesiumJsonReader::ExtensibleObjectJsonHandler::reset(pParentHandler, pObject); + this->_pObject = pObject; +} + +CesiumJsonReader::IJsonHandler* +ExtensionNodeMaxarMeshVariantsJsonHandler::readObjectKey( + const std::string_view& str) { + assert(this->_pObject); + return this->readObjectKeyExtensionNodeMaxarMeshVariants( + CesiumGltf::ExtensionNodeMaxarMeshVariants::TypeName, + str, + *this->_pObject); +} + +void ExtensionNodeMaxarMeshVariantsJsonHandler::reset( + CesiumJsonReader::IJsonHandler* pParentHandler, + CesiumUtility::ExtensibleObject& o, + const std::string_view& extensionName) { + std::any& value = + o.extensions + .emplace(extensionName, CesiumGltf::ExtensionNodeMaxarMeshVariants()) + .first->second; + this->reset( + pParentHandler, + &std::any_cast(value)); +} + +CesiumJsonReader::IJsonHandler* ExtensionNodeMaxarMeshVariantsJsonHandler:: + readObjectKeyExtensionNodeMaxarMeshVariants( + const std::string& objectType, + const std::string_view& str, + CesiumGltf::ExtensionNodeMaxarMeshVariants& o) { + using namespace std::string_literals; + + if ("mappings"s == str) + return property("mappings", this->_mappings, o.mappings); + + return this->readObjectKeyExtensibleObject(objectType, str, *this->_pObject); +} + +} // namespace CesiumGltfReader +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#include "ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler.h" + +#include + +#include +#include + +namespace CesiumGltfReader { + +ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler:: + ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler( + const CesiumJsonReader::ExtensionReaderContext& context) noexcept + : CesiumJsonReader::ExtensibleObjectJsonHandler(context), + _variants(), + _mesh(), + _name() {} + +void ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler::reset( + CesiumJsonReader::IJsonHandler* pParentHandler, + CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue* pObject) { + CesiumJsonReader::ExtensibleObjectJsonHandler::reset(pParentHandler, pObject); + this->_pObject = pObject; +} + +CesiumJsonReader::IJsonHandler* +ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler::readObjectKey( + const std::string_view& str) { + assert(this->_pObject); + return this->readObjectKeyExtensionNodeMaxarMeshVariantsMappingsValue( + CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue::TypeName, + str, + *this->_pObject); +} + +CesiumJsonReader::IJsonHandler* +ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler:: + readObjectKeyExtensionNodeMaxarMeshVariantsMappingsValue( + const std::string& objectType, + const std::string_view& str, + CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue& o) { + using namespace std::string_literals; + + if ("variants"s == str) + return property("variants", this->_variants, o.variants); + if ("mesh"s == str) + return property("mesh", this->_mesh, o.mesh); + if ("name"s == str) + return property("name", this->_name, o.name); + + return this->readObjectKeyExtensibleObject(objectType, str, *this->_pObject); +} + +} // namespace CesiumGltfReader +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#include "ExtensionModelMaxarMeshVariantsValueJsonHandler.h" + +#include + +#include +#include + +namespace CesiumGltfReader { + +ExtensionModelMaxarMeshVariantsValueJsonHandler:: + ExtensionModelMaxarMeshVariantsValueJsonHandler( + const CesiumJsonReader::ExtensionReaderContext& context) noexcept + : CesiumGltfReader::NamedObjectJsonHandler(context), _name() {} + +void ExtensionModelMaxarMeshVariantsValueJsonHandler::reset( + CesiumJsonReader::IJsonHandler* pParentHandler, + CesiumGltf::ExtensionModelMaxarMeshVariantsValue* pObject) { + CesiumGltfReader::NamedObjectJsonHandler::reset(pParentHandler, pObject); + this->_pObject = pObject; +} + +CesiumJsonReader::IJsonHandler* +ExtensionModelMaxarMeshVariantsValueJsonHandler::readObjectKey( + const std::string_view& str) { + assert(this->_pObject); + return this->readObjectKeyExtensionModelMaxarMeshVariantsValue( + CesiumGltf::ExtensionModelMaxarMeshVariantsValue::TypeName, + str, + *this->_pObject); +} + +CesiumJsonReader::IJsonHandler* +ExtensionModelMaxarMeshVariantsValueJsonHandler:: + readObjectKeyExtensionModelMaxarMeshVariantsValue( + const std::string& objectType, + const std::string_view& str, + CesiumGltf::ExtensionModelMaxarMeshVariantsValue& o) { + using namespace std::string_literals; + + if ("name"s == str) + return property("name", this->_name, o.name); + + return this->readObjectKeyNamedObject(objectType, str, *this->_pObject); +} + } // namespace CesiumGltfReader // This file was generated by generate-classes. // DO NOT EDIT THIS FILE! diff --git a/CesiumGltfReader/generated/src/registerExtensions.cpp b/CesiumGltfReader/generated/src/registerExtensions.cpp index 3a865de1d..027eb03fe 100644 --- a/CesiumGltfReader/generated/src/registerExtensions.cpp +++ b/CesiumGltfReader/generated/src/registerExtensions.cpp @@ -15,7 +15,9 @@ #include "ExtensionMeshPrimitiveExtMeshFeaturesJsonHandler.h" #include "ExtensionModelExtFeatureMetadataJsonHandler.h" #include "ExtensionModelExtMeshFeaturesJsonHandler.h" +#include "ExtensionModelMaxarMeshVariantsJsonHandler.h" #include "ExtensionNodeExtMeshFeaturesJsonHandler.h" +#include "ExtensionNodeMaxarMeshVariantsJsonHandler.h" #include #include @@ -54,6 +56,9 @@ void registerExtensions(CesiumJsonReader::ExtensionReaderContext& context) { context.registerExtension< CesiumGltf::Node, ExtensionNodeExtMeshFeaturesJsonHandler>(); + context.registerExtension< + CesiumGltf::Node, + ExtensionNodeMaxarMeshVariantsJsonHandler>(); context.registerExtension< CesiumGltf::Buffer, ExtensionBufferExtMeshoptCompressionJsonHandler>(); @@ -67,5 +72,8 @@ void registerExtensions(CesiumJsonReader::ExtensionReaderContext& context) { CesiumGltf::Model, ExtensionModelExtMeshFeaturesJsonHandler>(); context.registerExtension(); + context.registerExtension< + CesiumGltf::Model, + ExtensionModelMaxarMeshVariantsJsonHandler>(); } } // namespace CesiumGltfReader diff --git a/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp b/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp index ffc0da067..7578130e5 100644 --- a/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp +++ b/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp @@ -43,7 +43,11 @@ #include #include #include +#include +#include #include +#include +#include #include #include #include @@ -143,6 +147,26 @@ void writeJson( CesiumJsonWriter::JsonWriter& jsonWriter, const CesiumJsonWriter::ExtensionWriterContext& context); +void writeJson( + const CesiumGltf::ExtensionModelMaxarMeshVariants& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context); + +void writeJson( + const CesiumGltf::ExtensionNodeMaxarMeshVariants& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context); + +void writeJson( + const CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context); + +void writeJson( + const CesiumGltf::ExtensionModelMaxarMeshVariantsValue& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context); + void writeJson( const CesiumGltf::ExtensionExtMeshFeaturesFeatureId& obj, CesiumJsonWriter::JsonWriter& jsonWriter, @@ -856,6 +880,83 @@ void writeJson( jsonWriter.EndObject(); } +void writeJson( + const CesiumGltf::ExtensionModelMaxarMeshVariants& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context) { + jsonWriter.StartObject(); + + if (obj.defaultProperty > -1) { + jsonWriter.Key("default"); + writeJson(obj.defaultProperty, jsonWriter, context); + } + + if (!obj.variants.empty()) { + jsonWriter.Key("variants"); + writeJson(obj.variants, jsonWriter, context); + } + + writeExtensibleObject(obj, jsonWriter, context); + + jsonWriter.EndObject(); +} + +void writeJson( + const CesiumGltf::ExtensionNodeMaxarMeshVariants& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context) { + jsonWriter.StartObject(); + + if (!obj.mappings.empty()) { + jsonWriter.Key("mappings"); + writeJson(obj.mappings, jsonWriter, context); + } + + writeExtensibleObject(obj, jsonWriter, context); + + jsonWriter.EndObject(); +} + +void writeJson( + const CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context) { + jsonWriter.StartObject(); + + if (!obj.variants.empty()) { + jsonWriter.Key("variants"); + writeJson(obj.variants, jsonWriter, context); + } + + if (obj.mesh > -1) { + jsonWriter.Key("mesh"); + writeJson(obj.mesh, jsonWriter, context); + } + + if (obj.name.has_value()) { + jsonWriter.Key("name"); + writeJson(obj.name, jsonWriter, context); + } + + writeExtensibleObject(obj, jsonWriter, context); + + jsonWriter.EndObject(); +} + +void writeJson( + const CesiumGltf::ExtensionModelMaxarMeshVariantsValue& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context) { + jsonWriter.StartObject(); + + jsonWriter.Key("name"); + writeJson(obj.name, jsonWriter, context); + + writeNamedObject(obj, jsonWriter, context); + + jsonWriter.EndObject(); +} + void writeJson( const CesiumGltf::ExtensionExtMeshFeaturesFeatureId& obj, CesiumJsonWriter::JsonWriter& jsonWriter, @@ -2472,6 +2573,34 @@ void ExtensionCesiumRTCJsonWriter::write( writeJson(obj, jsonWriter, context); } +void ExtensionModelMaxarMeshVariantsJsonWriter::write( + const CesiumGltf::ExtensionModelMaxarMeshVariants& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context) { + writeJson(obj, jsonWriter, context); +} + +void ExtensionNodeMaxarMeshVariantsJsonWriter::write( + const CesiumGltf::ExtensionNodeMaxarMeshVariants& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context) { + writeJson(obj, jsonWriter, context); +} + +void ExtensionNodeMaxarMeshVariantsMappingsValueJsonWriter::write( + const CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context) { + writeJson(obj, jsonWriter, context); +} + +void ExtensionModelMaxarMeshVariantsValueJsonWriter::write( + const CesiumGltf::ExtensionModelMaxarMeshVariantsValue& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context) { + writeJson(obj, jsonWriter, context); +} + void ExtensionExtMeshFeaturesFeatureIdJsonWriter::write( const CesiumGltf::ExtensionExtMeshFeaturesFeatureId& obj, CesiumJsonWriter::JsonWriter& jsonWriter, diff --git a/CesiumGltfWriter/generated/src/ModelJsonWriter.h b/CesiumGltfWriter/generated/src/ModelJsonWriter.h index 326b7ee74..1aa97f1e2 100644 --- a/CesiumGltfWriter/generated/src/ModelJsonWriter.h +++ b/CesiumGltfWriter/generated/src/ModelJsonWriter.h @@ -23,6 +23,10 @@ struct ExtensionModelExtMeshFeatures; struct ExtensionMeshPrimitiveExtMeshFeatures; struct ExtensionNodeExtMeshFeatures; struct ExtensionCesiumRTC; +struct ExtensionModelMaxarMeshVariants; +struct ExtensionNodeMaxarMeshVariants; +struct ExtensionNodeMaxarMeshVariantsMappingsValue; +struct ExtensionModelMaxarMeshVariantsValue; struct ExtensionExtMeshFeaturesFeatureId; struct TextureInfo; struct ExtensionExtMeshFeaturesPropertyTexture; @@ -223,6 +227,46 @@ struct ExtensionCesiumRTCJsonWriter { const CesiumJsonWriter::ExtensionWriterContext& context); }; +struct ExtensionModelMaxarMeshVariantsJsonWriter { + using ValueType = CesiumGltf::ExtensionModelMaxarMeshVariants; + + static inline constexpr const char* ExtensionName = "MAXAR_mesh_variants"; + + static void write( + const CesiumGltf::ExtensionModelMaxarMeshVariants& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context); +}; + +struct ExtensionNodeMaxarMeshVariantsJsonWriter { + using ValueType = CesiumGltf::ExtensionNodeMaxarMeshVariants; + + static inline constexpr const char* ExtensionName = "MAXAR_mesh_variants"; + + static void write( + const CesiumGltf::ExtensionNodeMaxarMeshVariants& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context); +}; + +struct ExtensionNodeMaxarMeshVariantsMappingsValueJsonWriter { + using ValueType = CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue; + + static void write( + const CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context); +}; + +struct ExtensionModelMaxarMeshVariantsValueJsonWriter { + using ValueType = CesiumGltf::ExtensionModelMaxarMeshVariantsValue; + + static void write( + const CesiumGltf::ExtensionModelMaxarMeshVariantsValue& obj, + CesiumJsonWriter::JsonWriter& jsonWriter, + const CesiumJsonWriter::ExtensionWriterContext& context); +}; + struct ExtensionExtMeshFeaturesFeatureIdJsonWriter { using ValueType = CesiumGltf::ExtensionExtMeshFeaturesFeatureId; diff --git a/CesiumGltfWriter/generated/src/registerExtensions.cpp b/CesiumGltfWriter/generated/src/registerExtensions.cpp index ea7fc54fa..f62e0798a 100644 --- a/CesiumGltfWriter/generated/src/registerExtensions.cpp +++ b/CesiumGltfWriter/generated/src/registerExtensions.cpp @@ -19,7 +19,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -55,6 +57,9 @@ void registerExtensions(CesiumJsonWriter::ExtensionWriterContext& context) { context.registerExtension< CesiumGltf::Node, ExtensionNodeExtMeshFeaturesJsonWriter>(); + context.registerExtension< + CesiumGltf::Node, + ExtensionNodeMaxarMeshVariantsJsonWriter>(); context.registerExtension< CesiumGltf::Buffer, ExtensionBufferExtMeshoptCompressionJsonWriter>(); @@ -68,5 +73,8 @@ void registerExtensions(CesiumJsonWriter::ExtensionWriterContext& context) { CesiumGltf::Model, ExtensionModelExtMeshFeaturesJsonWriter>(); context.registerExtension(); + context.registerExtension< + CesiumGltf::Model, + ExtensionModelMaxarMeshVariantsJsonWriter>(); } } // namespace CesiumGltfWriter diff --git a/tools/generate-classes/NameFormatters.js b/tools/generate-classes/NameFormatters.js new file mode 100644 index 000000000..5cafe07d5 --- /dev/null +++ b/tools/generate-classes/NameFormatters.js @@ -0,0 +1,89 @@ +const qualifiedTypeNameRegex = /(?:(?.+)::)?(?.+)/; + +const NameFormatters = { + getReaderNamespace: function getReaderNamespace(namespace, readerNamespace) { + if (namespace === "CesiumUtility") { + return "CesiumJsonReader"; + } + return readerNamespace; + }, + + getName: function getName(name, namespace) { + const pieces = name.match(qualifiedTypeNameRegex); + if (pieces && pieces.groups && pieces.groups.namespace) { + if (pieces.groups.namespace === namespace) { + return `${namespace}::${pieces.groups.name}`; + } else { + return `${pieces.groups.namespace}::${pieces.groups.name}`; + } + } else { + return `${namespace}::${name}`; + } + }, + + getIncludeFromName: function getIncludeFromName(name, namespace) { + const pieces = name.match(qualifiedTypeNameRegex); + if (pieces && pieces.groups && pieces.groups.namespace) { + if (pieces.groups.namespace === namespace) { + return `"${namespace}/${pieces.groups.name}.h"`; + } else { + return `<${pieces.groups.namespace}/${pieces.groups.name}.h>`; + } + } else { + return `"${namespace}/${name}.h"`; + } + }, + + getReaderIncludeFromName: function getReaderIncludeFromName( + name, + readerNamespace + ) { + const pieces = name.match(qualifiedTypeNameRegex); + if (pieces && pieces.groups && pieces.groups.namespace) { + const namespace = NameFormatters.getReaderNamespace( + pieces.groups.namespace, + readerNamespace + ); + if (namespace === readerNamespace) { + return `"${pieces.groups.name}JsonHandler.h"`; + } else { + return `<${namespace}/${pieces.groups.name}JsonHandler.h>`; + } + } else { + return `"${name}JsonHandler.h"`; + } + }, + + getReaderName: function getReaderName(name, readerNamespace) { + const pieces = name.match(qualifiedTypeNameRegex); + if (pieces && pieces.groups && pieces.groups.namespace) { + const namespace = NameFormatters.getReaderNamespace( + pieces.groups.namespace, + readerNamespace + ); + return `${namespace}::${pieces.groups.name}JsonHandler`; + } else { + return `${name}JsonHandler`; + } + }, + + getWriterName: function getWriterName(name) { + const pieces = name.match(qualifiedTypeNameRegex); + if (pieces) { + return pieces.groups.name; + } else { + return name; + } + }, + + removeNamespace: function removeNamespace(name) { + const pieces = name.match(qualifiedTypeNameRegex); + if (pieces && pieces.groups && pieces.groups.namespace) { + return pieces.groups.name; + } else { + return name; + } + }, +}; + +module.exports = NameFormatters; diff --git a/tools/generate-classes/generate.js b/tools/generate-classes/generate.js index 46dee2bf2..f028a4e4d 100644 --- a/tools/generate-classes/generate.js +++ b/tools/generate-classes/generate.js @@ -2,6 +2,7 @@ const fs = require("fs"); const getNameFromTitle = require("./getNameFromTitle"); const indent = require("./indent"); const lodash = require("lodash"); +const NameFormatters = require("./NameFormatters"); const path = require("path"); const resolveProperty = require("./resolveProperty"); const unindent = require("./unindent"); @@ -42,6 +43,7 @@ function generate(options, schema, writers) { resolveProperty( schemaCache, config, + schema, name, key, schema.properties[key], @@ -61,7 +63,7 @@ function generate(options, schema, writers) { let headers = lodash.uniq([ `"${namespace}/Library.h"`, - getIncludeFromName(base, namespace), + NameFormatters.getIncludeFromName(base, namespace), ...lodash.flatten(properties.map((property) => property.headers)), ]); @@ -116,7 +118,7 @@ function generate(options, schema, writers) { fs.writeFileSync(headerOutputPath, unindent(header), "utf-8"); let readerHeaders = lodash.uniq([ - getReaderIncludeFromName(base, readerNamespace), + NameFormatters.getReaderIncludeFromName(base, readerNamespace), `<${namespace}/${name}.h>`, ...lodash.flatten(properties.map((property) => property.readerHeaders)), ]); @@ -132,7 +134,7 @@ function generate(options, schema, writers) { lodash.flatten(properties.map((property) => property.readerLocalTypes)) ); - const baseReader = getReaderName(base, readerNamespace); + const baseReader = NameFormatters.getReaderName(base, readerNamespace); // prettier-ignore const readerHeader = ` @@ -295,7 +297,7 @@ function generate(options, schema, writers) { 10 )}` : `(void)o;`} - return this->readObjectKey${removeNamespace(base)}(objectType, str, *this->_pObject); + return this->readObjectKey${NameFormatters.removeNamespace(base)}(objectType, str, *this->_pObject); } ${indent(readerLocalTypesImpl.join("\n\n"), 8)} @@ -345,7 +347,7 @@ function generate(options, schema, writers) { if (thisConfig.isBaseClass) { writeBaseJsonDefinition = ` template - void write${getWriterName(name)}( + void write${NameFormatters.getWriterName(name)}( const T& obj, CesiumJsonWriter::JsonWriter& jsonWriter, const CesiumJsonWriter::ExtensionWriterContext& context) { @@ -357,7 +359,7 @@ function generate(options, schema, writers) { 10 )} - write${getWriterName(base)}(obj, jsonWriter, context); + write${NameFormatters.getWriterName(base)}(obj, jsonWriter, context); } `; @@ -368,7 +370,7 @@ function generate(options, schema, writers) { const CesiumJsonWriter::ExtensionWriterContext& context) { jsonWriter.StartObject(); - write${getWriterName(name)}(obj, jsonWriter, context); + write${NameFormatters.getWriterName(name)}(obj, jsonWriter, context); jsonWriter.EndObject(); } @@ -388,7 +390,7 @@ function generate(options, schema, writers) { 10 )} - write${getWriterName(base)}(obj, jsonWriter, context); + write${NameFormatters.getWriterName(base)}(obj, jsonWriter, context); jsonWriter.EndObject(); } @@ -432,7 +434,9 @@ function generate(options, schema, writers) { fs.writeFileSync(readerSourceOutputPath, unindent(readerImpl), "utf-8"); } - const schemas = lodash.flatten(properties.map((property) => property.schemas)); + const schemas = lodash.flatten( + properties.map((property) => property.schemas) + ); if (baseSchema && !base.includes("::")) { schemas.push(baseSchema); } @@ -539,74 +543,4 @@ function privateSpecConstructor(name) { `; } -const qualifiedTypeNameRegex = /(?:(?.+)::)?(?.+)/; - -function getReaderNamespace(namespace, readerNamespace) { - if (namespace === "CesiumUtility") { - return "CesiumJsonReader"; - } - return readerNamespace; -} - -function getIncludeFromName(name, namespace) { - const pieces = name.match(qualifiedTypeNameRegex); - if (pieces && pieces.groups && pieces.groups.namespace) { - if (pieces.groups.namespace === namespace) { - return `"${namespace}/${pieces.groups.name}.h"`; - } else { - return `<${pieces.groups.namespace}/${pieces.groups.name}.h>`; - } - } else { - return `"${namespace}/${name}.h"`; - } -} - -function getReaderIncludeFromName(name, readerNamespace) { - const pieces = name.match(qualifiedTypeNameRegex); - if (pieces && pieces.groups && pieces.groups.namespace) { - const namespace = getReaderNamespace( - pieces.groups.namespace, - readerNamespace - ); - if (namespace === readerNamespace) { - return `"${pieces.groups.name}JsonHandler.h"`; - } else { - return `<${namespace}/${pieces.groups.name}JsonHandler.h>`; - } - } else { - return `"${name}JsonHandler.h"`; - } -} - -function getReaderName(name, readerNamespace) { - const pieces = name.match(qualifiedTypeNameRegex); - if (pieces && pieces.groups && pieces.groups.namespace) { - const namespace = getReaderNamespace( - pieces.groups.namespace, - readerNamespace - ); - return `${namespace}::${pieces.groups.name}JsonHandler`; - } else { - return `${name}JsonHandler`; - } -} - -function getWriterName(name) { - const pieces = name.match(qualifiedTypeNameRegex); - if (pieces) { - return pieces.groups.name; - } else { - return name; - } -} - -function removeNamespace(name) { - const pieces = name.match(qualifiedTypeNameRegex); - if (pieces && pieces.groups && pieces.groups.namespace) { - return pieces.groups.name; - } else { - return name; - } -} - module.exports = generate; diff --git a/tools/generate-classes/glTF.json b/tools/generate-classes/glTF.json index 1a8dc93a1..08622d796 100644 --- a/tools/generate-classes/glTF.json +++ b/tools/generate-classes/glTF.json @@ -5,10 +5,12 @@ "toBeInherited": true }, "glTF Property": { - "overrideName": "CesiumUtility::ExtensibleObject" + "overrideName": "CesiumUtility::ExtensibleObject", + "manuallyDefined": true }, "glTF Child of Root Property": { - "overrideName": "CesiumGltf::NamedObject" + "overrideName": "CesiumGltf::NamedObject", + "manuallyDefined": true }, "Buffer": { "toBeInherited": true @@ -135,6 +137,12 @@ }, "CESIUM_RTC": { "overrideName": "ExtensionCesiumRTC" + }, + "MAXAR_mesh_variants glTF extension": { + "overrideName": "ExtensionModelMaxarMeshVariants" + }, + "MAXAR_mesh_variants node extension": { + "overrideName": "ExtensionNodeMaxarMeshVariants" } }, "extensions": [ @@ -201,6 +209,14 @@ "attachTo" : [ "glTF" ] + }, + { + "extensionName": "MAXAR_mesh_variants", + "schema": "Vendor/MAXAR_mesh_variants/schema/glTF.MAXAR_mesh_variants.schema.json" + }, + { + "extensionName": "MAXAR_mesh_variants", + "schema": "Vendor/MAXAR_mesh_variants/schema/node.MAXAR_mesh_variants.schema.json" } ] } diff --git a/tools/generate-classes/index.js b/tools/generate-classes/index.js index fb5731851..944138c0a 100644 --- a/tools/generate-classes/index.js +++ b/tools/generate-classes/index.js @@ -197,6 +197,10 @@ function processSchemas() { continue; } processed[schema.sourcePath] = true; + + if ((options.config.classes[schema.title] || {}).manuallyDefined) { + continue; + } schemas.push(...generate(options, schema, writers)); } } diff --git a/tools/generate-classes/package.json b/tools/generate-classes/package.json index f9fd5a6dc..904809ec8 100644 --- a/tools/generate-classes/package.json +++ b/tools/generate-classes/package.json @@ -5,9 +5,9 @@ "main": "index.js", "scripts": { "generate-3d-tiles": "node index.js --schemas https://raw.githubusercontent.com/CesiumGS/3d-tiles/main/specification/schema/tileset.schema.json https://raw.githubusercontent.com/CesiumGS/3d-tiles/main/extensions/3DTILES_implicit_tiling/schema/subtree/subtree.schema.json --output ../../Cesium3DTiles --readerOutput ../../Cesium3DTilesReader --writerOutput ../../Cesium3DTilesWriter --extensions https://raw.githubusercontent.com/CesiumGS/3d-tiles/main/extensions/ --namespace Cesium3DTiles --readerNamespace Cesium3DTilesReader --writerNamespace Cesium3DTilesWriter --config 3dTiles.json", - "generate-gltf": "node index.js --schemas https://raw.githubusercontent.com/CesiumGS/glTF/variant-test/specification/2.0/schema/glTF.schema.json --output ../../CesiumGltf --readerOutput ../../CesiumGltfReader --writerOutput ../../CesiumGltfWriter --extensions https://raw.githubusercontent.com/CesiumGS/glTF/variant-test/extensions/2.0/ --namespace CesiumGltf --readerNamespace CesiumGltfReader --writerNamespace CesiumGltfWriter --config glTF.json", + "generate-gltf": "node index.js --schemas https://raw.githubusercontent.com/CesiumGS/glTF/variant-test-nithin/specification/2.0/schema/glTF.schema.json --output ../../CesiumGltf --readerOutput ../../CesiumGltfReader --writerOutput ../../CesiumGltfWriter --extensions https://raw.githubusercontent.com/CesiumGS/glTF/variant-test-nithin/extensions/2.0/ --namespace CesiumGltf --readerNamespace CesiumGltfReader --writerNamespace CesiumGltfWriter --config glTF.json", "test-3d-tiles": "node index.js --schema https://raw.githubusercontent.com/CesiumGS/3d-tiles/main/specification/schema/tileset.schema.json --additionalSchemas https://raw.githubusercontent.com/CesiumGS/3d-tiles/main/extensions/3DTILES_implicit_tiling/schema/subtree/subtree.schema.json --output test_output/Cesium3DTiles --readerOutput test_output/Cesium3DTilesReader --writerOutput test_output/Cesium3DTilesWriter --extensions https://raw.githubusercontent.com/CesiumGS/3d-tiles/main/extensions/ --namespace Cesium3DTiles --readerNamespace Cesium3DTilesReader --writerNamespace Cesium3DTilesWriter --config 3dTiles.json", - "test-gltf": "node index.js --schema https://raw.githubusercontent.com/CesiumGS/glTF/variant-test/specification/2.0/schema/glTF.schema.json --output test_output/CesiumGltf --readerOutput test_output/CesiumGltfReader --writerOutput test_output/CesiumGltfWriter --extensions https://raw.githubusercontent.com/CesiumGS/glTF/variant-test/extensions/2.0/ --namespace CesiumGltf --readerNamespace CesiumGltfReader --writerNamespace CesiumGltfWriter --config glTF.json" + "test-gltf": "node index.js --schema https://raw.githubusercontent.com/CesiumGS/glTF/variant-test-nithin/specification/2.0/schema/glTF.schema.json --output test_output/CesiumGltf --readerOutput test_output/CesiumGltfReader --writerOutput test_output/CesiumGltfWriter --extensions https://raw.githubusercontent.com/CesiumGS/glTF/variant-test-nithin/extensions/2.0/ --namespace CesiumGltf --readerNamespace CesiumGltfReader --writerNamespace CesiumGltfWriter --config glTF.json" }, "author": "CesiumGS, Inc.", "license": "UNLICENSED", diff --git a/tools/generate-classes/resolveProperty.js b/tools/generate-classes/resolveProperty.js index 8377a01a2..724652625 100644 --- a/tools/generate-classes/resolveProperty.js +++ b/tools/generate-classes/resolveProperty.js @@ -1,12 +1,14 @@ +const cppReservedWords = require("./cppReservedWords"); const getNameFromTitle = require("./getNameFromTitle"); -const unindent = require("./unindent"); const indent = require("./indent"); const makeIdentifier = require("./makeIdentifier"); -const cppReservedWords = require("./cppReservedWords"); +const NameFormatters = require("./NameFormatters"); +const unindent = require("./unindent"); function resolveProperty( schemaCache, config, + parentSchema, parentName, propertyName, propertyDetails, @@ -46,6 +48,7 @@ function resolveProperty( return resolveArray( schemaCache, config, + parentSchema, parentName, propertyName, cppSafeName, @@ -94,13 +97,38 @@ function resolveProperty( ? `"${propertyDetails.default.toString()}"` : undefined, }; + } else if (propertyDetails.type === "object" && propertyDetails.properties) { + // This is an anonymous, inline object definition + const name = createAnonymousPropertyTypeTitle(parentName, propertyName); + const schema = { + ...propertyDetails, + title: name, + sourcePath: parentSchema.sourcePath + }; + const type = getNameFromTitle(config, schema.title); + return { + ...propertyDefaults(propertyName, cppSafeName, propertyDetails), + type: makeOptional + ? `std::optional<${NameFormatters.getName(type, namespace)}>` + : `${NameFormatters.getName(type, namespace)}`, + headers: [ + NameFormatters.getIncludeFromName(type, namespace), + ...(makeOptional ? [""] : []), + ], + readerType: NameFormatters.getReaderName(type, readerNamespace), + readerHeaders: [ + NameFormatters.getReaderIncludeFromName(type, readerNamespace), + ], + schemas: [schema], + }; } else if ( - propertyDetails.type == "object" && + propertyDetails.type === "object" && propertyDetails.additionalProperties ) { return resolveDictionary( schemaCache, config, + parentSchema, parentName, propertyName, cppSafeName, @@ -126,6 +154,7 @@ function resolveProperty( return resolveProperty( schemaCache, config, + parentSchema, parentName, propertyName, itemSchema, @@ -139,14 +168,16 @@ function resolveProperty( return { ...propertyDefaults(propertyName, cppSafeName, propertyDetails), type: makeOptional - ? `std::optional<${namespace}::${type}>` - : `${namespace}::${type}`, + ? `std::optional<${NameFormatters.getName(type, namespace)}>` + : `${NameFormatters.getName(type, namespace)}`, headers: [ - `"${namespace}/${type}.h"`, + NameFormatters.getIncludeFromName(type, namespace), ...(makeOptional ? [""] : []), ], - readerType: `${type}JsonHandler`, - readerHeaders: [`"${type}JsonHandler.h"`], + readerType: NameFormatters.getReaderName(type, readerNamespace), + readerHeaders: [ + NameFormatters.getReaderIncludeFromName(type, readerNamespace), + ], schemas: [itemSchema], }; } @@ -154,6 +185,7 @@ function resolveProperty( const nested = resolveProperty( schemaCache, config, + parentSchema, parentName, propertyName, propertyDetails.allOf[0], @@ -224,6 +256,7 @@ function propertyDefaults(propertyName, cppSafeName, propertyDetails) { function resolveArray( schemaCache, config, + parentSchema, parentName, propertyName, cppSafeName, @@ -240,6 +273,7 @@ function resolveArray( const itemProperty = resolveProperty( schemaCache, config, + parentSchema, parentName, propertyName + ".items", propertyDetails.items || { notEmpty: true }, @@ -274,6 +308,7 @@ function resolveArray( function resolveDictionary( schemaCache, config, + parentSchema, parentName, propertyName, cppSafeName, @@ -286,6 +321,7 @@ function resolveDictionary( const additional = resolveProperty( schemaCache, config, + parentSchema, parentName, propertyName + ".additionalProperties", propertyDetails.additionalProperties, @@ -654,4 +690,15 @@ function makeNameIntoValidEnumIdentifier(name) { return name; } +function createAnonymousPropertyTypeTitle(parentName, propertyName) { + const propertyWithoutItems = toPascalCase(propertyName.replace(".items", "")); + let result = parentName; + if (!result.endsWith(propertyWithoutItems)) { + result += " " + propertyWithoutItems; + } + result += " Value"; + + return result; +} + module.exports = resolveProperty;