From c720dbbfbe94f2a6f5b27844d419fe7d37f89339 Mon Sep 17 00:00:00 2001 From: Nithin Pranesh Date: Wed, 16 Feb 2022 09:32:18 -0500 Subject: [PATCH 1/4] add MAXAR_mesh_variants, fix generator trying to generate manually-defined classes (like glTF Property) --- .../ExtensionModelMaxarMeshVariants.h | 36 +++++ .../ExtensionNodeMaxarMeshVariants.h | 28 ++++ ...tensionModelMaxarMeshVariantsJsonHandler.h | 97 ++++++++++++++ ...xtensionNodeMaxarMeshVariantsJsonHandler.h | 95 +++++++++++++ .../generated/src/GeneratedJsonHandlers.cpp | 125 ++++++++++++++++++ .../generated/src/registerExtensions.cpp | 8 ++ .../generated/src/ModelJsonWriter.cpp | 63 +++++++++ .../generated/src/ModelJsonWriter.h | 24 ++++ .../generated/src/registerExtensions.cpp | 8 ++ tools/generate-classes/glTF.json | 20 ++- tools/generate-classes/index.js | 4 + 11 files changed, 506 insertions(+), 2 deletions(-) create mode 100644 CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h create mode 100644 CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariants.h create mode 100644 CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsJsonHandler.h create mode 100644 CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsJsonHandler.h diff --git a/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h b/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h new file mode 100644 index 000000000..4fe27e426 --- /dev/null +++ b/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h @@ -0,0 +1,36 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include "CesiumGltf/Library.h" + +#include + +#include +#include + +#include "CesiumGltf/CesiumGltf::NamedObject.h" + +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/ExtensionNodeMaxarMeshVariants.h b/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariants.h new file mode 100644 index 000000000..8315ab650 --- /dev/null +++ b/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariants.h @@ -0,0 +1,28 @@ +// This file was generated by generate-classes. +// DO NOT EDIT THIS FILE! +#pragma once + +#include "CesiumGltf/Library.h" + +#include + +#include + +#include "CesiumGltf/CesiumUtility::ExtensibleObject.h" + +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/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsJsonHandler.h b/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsJsonHandler.h new file mode 100644 index 000000000..8fa727b9f --- /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 +#include +#include +#include + +#include "CesiumGltf::NamedObjectJsonHandler.h" + +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::CesiumGltf::NamedObject, + CesiumGltf::NamedObjectJsonHandler> + _variants; +}; +} // namespace CesiumGltfReader diff --git a/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsJsonHandler.h b/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsJsonHandler.h new file mode 100644 index 000000000..8105960b2 --- /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 +#include +#include + +#include "CesiumUtility::ExtensibleObjectJsonHandler.h" + +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::CesiumUtility::ExtensibleObject, + CesiumUtility::ExtensibleObjectJsonHandler> + _mappings; +}; +} // namespace CesiumGltfReader diff --git a/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp b/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp index 8d3dc792f..22c16a470 100644 --- a/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp +++ b/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp @@ -818,6 +818,131 @@ 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! diff --git a/CesiumGltfReader/generated/src/registerExtensions.cpp b/CesiumGltfReader/generated/src/registerExtensions.cpp index f782659e5..88fd62024 100644 --- a/CesiumGltfReader/generated/src/registerExtensions.cpp +++ b/CesiumGltfReader/generated/src/registerExtensions.cpp @@ -14,7 +14,9 @@ #include "ExtensionMeshPrimitiveExtMeshFeaturesJsonHandler.h" #include "ExtensionModelExtFeatureMetadataJsonHandler.h" #include "ExtensionModelExtMeshFeaturesJsonHandler.h" +#include "ExtensionModelMaxarMeshVariantsJsonHandler.h" #include "ExtensionNodeExtMeshFeaturesJsonHandler.h" +#include "ExtensionNodeMaxarMeshVariantsJsonHandler.h" #include #include @@ -49,6 +51,9 @@ void registerExtensions(CesiumJsonReader::ExtensionReaderContext& context) { context.registerExtension< CesiumGltf::Node, ExtensionNodeExtMeshFeaturesJsonHandler>(); + context.registerExtension< + CesiumGltf::Node, + ExtensionNodeMaxarMeshVariantsJsonHandler>(); context.registerExtension< CesiumGltf::Buffer, ExtensionBufferExtMeshoptCompressionJsonHandler>(); @@ -62,5 +67,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 84c2eb0b7..d257cf5d5 100644 --- a/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp +++ b/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp @@ -42,7 +42,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -137,6 +139,16 @@ 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::ExtensionExtMeshFeaturesFeatureId& obj, CesiumJsonWriter::JsonWriter& jsonWriter, @@ -834,6 +846,43 @@ 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::ExtensionExtMeshFeaturesFeatureId& obj, CesiumJsonWriter::JsonWriter& jsonWriter, @@ -2443,6 +2492,20 @@ 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 ExtensionExtMeshFeaturesFeatureIdJsonWriter::write( const CesiumGltf::ExtensionExtMeshFeaturesFeatureId& obj, CesiumJsonWriter::JsonWriter& jsonWriter, diff --git a/CesiumGltfWriter/generated/src/ModelJsonWriter.h b/CesiumGltfWriter/generated/src/ModelJsonWriter.h index 8371ad7d9..1ba9b4f16 100644 --- a/CesiumGltfWriter/generated/src/ModelJsonWriter.h +++ b/CesiumGltfWriter/generated/src/ModelJsonWriter.h @@ -22,6 +22,8 @@ struct ExtensionModelExtMeshFeatures; struct ExtensionMeshPrimitiveExtMeshFeatures; struct ExtensionNodeExtMeshFeatures; struct ExtensionCesiumRTC; +struct ExtensionModelMaxarMeshVariants; +struct ExtensionNodeMaxarMeshVariants; struct ExtensionExtMeshFeaturesFeatureId; struct TextureInfo; struct ExtensionExtMeshFeaturesPropertyTexture; @@ -211,6 +213,28 @@ 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 ExtensionExtMeshFeaturesFeatureIdJsonWriter { using ValueType = CesiumGltf::ExtensionExtMeshFeaturesFeatureId; diff --git a/CesiumGltfWriter/generated/src/registerExtensions.cpp b/CesiumGltfWriter/generated/src/registerExtensions.cpp index c87ddfe3f..b5ff96445 100644 --- a/CesiumGltfWriter/generated/src/registerExtensions.cpp +++ b/CesiumGltfWriter/generated/src/registerExtensions.cpp @@ -18,7 +18,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -50,6 +52,9 @@ void registerExtensions(CesiumJsonWriter::ExtensionWriterContext& context) { context.registerExtension< CesiumGltf::Node, ExtensionNodeExtMeshFeaturesJsonWriter>(); + context.registerExtension< + CesiumGltf::Node, + ExtensionNodeMaxarMeshVariantsJsonWriter>(); context.registerExtension< CesiumGltf::Buffer, ExtensionBufferExtMeshoptCompressionJsonWriter>(); @@ -63,5 +68,8 @@ void registerExtensions(CesiumJsonWriter::ExtensionWriterContext& context) { CesiumGltf::Model, ExtensionModelExtMeshFeaturesJsonWriter>(); context.registerExtension(); + context.registerExtension< + CesiumGltf::Model, + ExtensionModelMaxarMeshVariantsJsonWriter>(); } } // namespace CesiumGltfWriter diff --git a/tools/generate-classes/glTF.json b/tools/generate-classes/glTF.json index bafe1df94..01f4c5cab 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 @@ -132,6 +134,12 @@ }, "CESIUM_RTC": { "overrideName": "ExtensionCesiumRTC" + }, + "MAXAR_mesh_variants glTF extension": { + "overrideName": "ExtensionModelMaxarMeshVariants" + }, + "MAXAR_mesh_variants node extension": { + "overrideName": "ExtensionNodeMaxarMeshVariants" } }, "extensions": [ @@ -191,6 +199,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)); } } From 8d62cda9a68bb25ba2a740cf0303bfefc887007b Mon Sep 17 00:00:00 2001 From: Nithin Pranesh Date: Wed, 16 Feb 2022 09:42:59 -0500 Subject: [PATCH 2/4] format --- CesiumGeospatial/src/BoundingRegion.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CesiumGeospatial/src/BoundingRegion.cpp b/CesiumGeospatial/src/BoundingRegion.cpp index 77c5519cc..4c701b7c3 100644 --- a/CesiumGeospatial/src/BoundingRegion.cpp +++ b/CesiumGeospatial/src/BoundingRegion.cpp @@ -396,8 +396,9 @@ static OrientedBoundingBox fromPlaneExtents( const bool fullyAboveEquator = rectangle.getSouth() > 0.0; const bool fullyBelowEquator = rectangle.getNorth() < 0.0; const double latitudeNearestToEquator = - fullyAboveEquator ? rectangle.getSouth() - : fullyBelowEquator ? rectangle.getNorth() : 0.0; + fullyAboveEquator ? rectangle.getSouth() + : fullyBelowEquator ? rectangle.getNorth() + : 0.0; const double centerLongitude = rectangle.computeCenter().longitude; // Plane is located at the rectangle's center longitude and the rectangle's From 9a22753479b339ae4e972bfded4861ec820e393c Mon Sep 17 00:00:00 2001 From: Nithin Pranesh Date: Wed, 16 Feb 2022 10:24:44 -0500 Subject: [PATCH 3/4] point to different gltf branch for generator --- tools/generate-classes/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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", From 966aba6089a8c11e129d0ce4ee597fe16ff968cb Mon Sep 17 00:00:00 2001 From: Kevin Ring Date: Thu, 17 Feb 2022 19:30:51 +1100 Subject: [PATCH 4/4] Fix code generation for MAXAR_mesh_variants. --- CMakeLists.txt | 2 +- CesiumGeospatial/src/BoundingRegion.cpp | 5 +- .../ExtensionModelMaxarMeshVariants.h | 5 +- .../ExtensionModelMaxarMeshVariantsValue.h | 24 ++++ .../ExtensionNodeMaxarMeshVariants.h | 5 +- ...ensionNodeMaxarMeshVariantsMappingsValue.h | 38 +++++++ ...tensionModelMaxarMeshVariantsJsonHandler.h | 8 +- ...onModelMaxarMeshVariantsValueJsonHandler.h | 38 +++++++ ...xtensionNodeMaxarMeshVariantsJsonHandler.h | 8 +- ...axarMeshVariantsMappingsValueJsonHandler.h | 43 ++++++++ .../generated/src/GeneratedJsonHandlers.cpp | 103 ++++++++++++++++++ .../generated/src/ModelJsonWriter.cpp | 66 +++++++++++ .../generated/src/ModelJsonWriter.h | 20 ++++ tools/generate-classes/NameFormatters.js | 89 +++++++++++++++ tools/generate-classes/generate.js | 92 +++------------- tools/generate-classes/resolveProperty.js | 63 +++++++++-- 16 files changed, 504 insertions(+), 105 deletions(-) create mode 100644 CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariantsValue.h create mode 100644 CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariantsMappingsValue.h create mode 100644 CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsValueJsonHandler.h create mode 100644 CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler.h create mode 100644 tools/generate-classes/NameFormatters.js diff --git a/CMakeLists.txt b/CMakeLists.txt index 922ae7a42..1f6fd8cfa 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/CesiumGeospatial/src/BoundingRegion.cpp b/CesiumGeospatial/src/BoundingRegion.cpp index 4c701b7c3..77c5519cc 100644 --- a/CesiumGeospatial/src/BoundingRegion.cpp +++ b/CesiumGeospatial/src/BoundingRegion.cpp @@ -396,9 +396,8 @@ static OrientedBoundingBox fromPlaneExtents( const bool fullyAboveEquator = rectangle.getSouth() > 0.0; const bool fullyBelowEquator = rectangle.getNorth() < 0.0; const double latitudeNearestToEquator = - fullyAboveEquator ? rectangle.getSouth() - : fullyBelowEquator ? rectangle.getNorth() - : 0.0; + fullyAboveEquator ? rectangle.getSouth() + : fullyBelowEquator ? rectangle.getNorth() : 0.0; const double centerLongitude = rectangle.computeCenter().longitude; // Plane is located at the rectangle's center longitude and the rectangle's diff --git a/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h b/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h index 4fe27e426..1d86be276 100644 --- a/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h +++ b/CesiumGltf/generated/include/CesiumGltf/ExtensionModelMaxarMeshVariants.h @@ -2,6 +2,7 @@ // DO NOT EDIT THIS FILE! #pragma once +#include "CesiumGltf/ExtensionModelMaxarMeshVariantsValue.h" #include "CesiumGltf/Library.h" #include @@ -9,8 +10,6 @@ #include #include -#include "CesiumGltf/CesiumGltf::NamedObject.h" - namespace CesiumGltf { /** * @brief glTF extension that defines mesh variants for nodes @@ -31,6 +30,6 @@ struct CESIUMGLTF_API ExtensionModelMaxarMeshVariants final /** * @brief variants */ - std::vector 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 index 8315ab650..eb4822b61 100644 --- a/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariants.h +++ b/CesiumGltf/generated/include/CesiumGltf/ExtensionNodeMaxarMeshVariants.h @@ -2,14 +2,13 @@ // DO NOT EDIT THIS FILE! #pragma once +#include "CesiumGltf/ExtensionNodeMaxarMeshVariantsMappingsValue.h" #include "CesiumGltf/Library.h" #include #include -#include "CesiumGltf/CesiumUtility::ExtensibleObject.h" - namespace CesiumGltf { /** * @brief MAXAR_mesh_variants node extension @@ -23,6 +22,6 @@ struct CESIUMGLTF_API ExtensionNodeMaxarMeshVariants final /** * @brief A list of mesh to variant mappings */ - std::vector 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 index 8fa727b9f..b3bf06964 100644 --- a/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsJsonHandler.h +++ b/CesiumGltfReader/generated/src/ExtensionModelMaxarMeshVariantsJsonHandler.h @@ -2,13 +2,13 @@ // DO NOT EDIT THIS FILE! #pragma once +#include "ExtensionModelMaxarMeshVariantsValueJsonHandler.h" + #include #include #include #include -#include "CesiumGltf::NamedObjectJsonHandler.h" - namespace CesiumJsonReader { class ExtensionReaderContext; } @@ -90,8 +90,8 @@ class ExtensionModelMaxarMeshVariantsJsonHandler CesiumGltf::ExtensionModelMaxarMeshVariants* _pObject = nullptr; CesiumJsonReader::IntegerJsonHandler _defaultProperty; CesiumJsonReader::ArrayJsonHandler< - CesiumGltf::CesiumGltf::NamedObject, - CesiumGltf::NamedObjectJsonHandler> + 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 index 8105960b2..49c442f8c 100644 --- a/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsJsonHandler.h +++ b/CesiumGltfReader/generated/src/ExtensionNodeMaxarMeshVariantsJsonHandler.h @@ -2,12 +2,12 @@ // DO NOT EDIT THIS FILE! #pragma once +#include "ExtensionNodeMaxarMeshVariantsMappingsValueJsonHandler.h" + #include #include #include -#include "CesiumUtility::ExtensibleObjectJsonHandler.h" - namespace CesiumJsonReader { class ExtensionReaderContext; } @@ -88,8 +88,8 @@ class ExtensionNodeMaxarMeshVariantsJsonHandler private: CesiumGltf::ExtensionNodeMaxarMeshVariants* _pObject = nullptr; CesiumJsonReader::ArrayJsonHandler< - CesiumGltf::CesiumUtility::ExtensibleObject, - CesiumUtility::ExtensibleObjectJsonHandler> + 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 22c16a470..791f404a7 100644 --- a/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp +++ b/CesiumGltfReader/generated/src/GeneratedJsonHandlers.cpp @@ -943,6 +943,109 @@ CesiumJsonReader::IJsonHandler* ExtensionNodeMaxarMeshVariantsJsonHandler:: 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/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp b/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp index d257cf5d5..60b96e86e 100644 --- a/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp +++ b/CesiumGltfWriter/generated/src/ModelJsonWriter.cpp @@ -43,8 +43,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -149,6 +151,16 @@ void writeJson( 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, @@ -883,6 +895,46 @@ void writeJson( 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, @@ -2506,6 +2558,20 @@ void ExtensionNodeMaxarMeshVariantsJsonWriter::write( 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 1ba9b4f16..be83b18c3 100644 --- a/CesiumGltfWriter/generated/src/ModelJsonWriter.h +++ b/CesiumGltfWriter/generated/src/ModelJsonWriter.h @@ -24,6 +24,8 @@ struct ExtensionNodeExtMeshFeatures; struct ExtensionCesiumRTC; struct ExtensionModelMaxarMeshVariants; struct ExtensionNodeMaxarMeshVariants; +struct ExtensionNodeMaxarMeshVariantsMappingsValue; +struct ExtensionModelMaxarMeshVariantsValue; struct ExtensionExtMeshFeaturesFeatureId; struct TextureInfo; struct ExtensionExtMeshFeaturesPropertyTexture; @@ -235,6 +237,24 @@ struct ExtensionNodeMaxarMeshVariantsJsonWriter { 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/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/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;