Ext.EXT_Structural_Metadata.cs 5.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using SharpGLTF.CodeGen;
  2. using SharpGLTF.SchemaReflection;
  3. using System.Collections.Generic;
  4. namespace SharpGLTF
  5. {
  6. class ExtStructuralMetadataExtension : SchemaProcessor
  7. {
  8. public override string GetTargetProject() { return Constants.CesiumProjectDirectory; }
  9. const string ExtensionPropertyTexturePropertyName = "Property Texture Property in EXT_structural_metadata";
  10. private static string RootSchemaUri => Constants.CustomExtensionsPath("EXT_structural_metadata", "glTF.EXT_structural_metadata.schema.json");
  11. private static string MeshPrimitiveSchemaUri => Constants.CustomExtensionsPath("EXT_structural_metadata", "mesh.primitive.EXT_structural_metadata.schema.json");
  12. public override void PrepareTypes(CSharpEmitter newEmitter, SchemaType.Context ctx)
  13. {
  14. newEmitter.SetRuntimeName("EXT_structural_metadata glTF Mesh Primitive extension", "ExtStructuralMetadataMeshPrimitive", Constants.CesiumNameSpace);
  15. newEmitter.SetRuntimeName("EXT_structural_metadata glTF extension", "EXTStructuralMetadataRoot", Constants.CesiumNameSpace);
  16. newEmitter.SetRuntimeName("Property Table in EXT_structural_metadata", "PropertyTable", Constants.CesiumNameSpace);
  17. newEmitter.SetRuntimeName("Schema in EXT_structural_metadata", "StructuralMetadataSchema", Constants.CesiumNameSpace);
  18. newEmitter.SetRuntimeName("Property Table Property in EXT_structural_metadata", "PropertyTableProperty", Constants.CesiumNameSpace);
  19. newEmitter.SetRuntimeName("Property Texture in EXT_structural_metadata", "PropertyTexture", Constants.CesiumNameSpace);
  20. newEmitter.SetRuntimeName("Property Texture Property in EXT_structural_metadata", "PropertyTextureProperty", Constants.CesiumNameSpace);
  21. newEmitter.SetRuntimeName("Property Attribute Property in EXT_structural_metadata", "PropertyAttributeProperty", Constants.CesiumNameSpace);
  22. newEmitter.SetRuntimeName("Class Property in EXT_structural_metadata", "ClassProperty", Constants.CesiumNameSpace);
  23. newEmitter.SetRuntimeName("Class in EXT_structural_metadata", "StructuralMetadataClass", Constants.CesiumNameSpace);
  24. newEmitter.SetRuntimeName("Enum Value in EXT_structural_metadata", "EnumValue", Constants.CesiumNameSpace);
  25. newEmitter.SetRuntimeName("Enum in EXT_structural_metadata", "StructuralMetadataEnum", Constants.CesiumNameSpace);
  26. newEmitter.SetRuntimeName("Property Attribute in EXT_structural_metadata", "PropertyAttribute", Constants.CesiumNameSpace);
  27. newEmitter.SetRuntimeName("BOOLEAN-ENUM-MAT2-MAT3-MAT4-SCALAR-STRING-VEC2-VEC3-VEC4", "ElementType", Constants.CesiumNameSpace);
  28. newEmitter.SetRuntimeName("FLOAT32-FLOAT64-INT16-INT32-INT64-INT8-UINT16-UINT32-UINT64-UINT8", "DataType", Constants.CesiumNameSpace);
  29. newEmitter.SetRuntimeName("INT16-INT32-INT64-INT8-UINT16-UINT32-UINT64-UINT8", "IntegerType", Constants.CesiumNameSpace);
  30. newEmitter.SetRuntimeName("UINT16-UINT32-UINT64-UINT8", "ArrayOffsetType", Constants.CesiumNameSpace);
  31. newEmitter.SetFieldToChildrenList(ctx, "EXT_structural_metadata glTF extension", "propertyTables");
  32. newEmitter.SetFieldToChildrenList(ctx, "EXT_structural_metadata glTF extension", "propertyAttributes");
  33. newEmitter.SetFieldToChildrenList(ctx, "EXT_structural_metadata glTF extension", "propertyTextures");
  34. newEmitter.SetFieldToChildrenDictionary(ctx, "Property Texture in EXT_structural_metadata", "properties");
  35. newEmitter.SetFieldToChildrenDictionary(ctx, "Class in EXT_structural_metadata", "properties");
  36. newEmitter.SetFieldToChildrenDictionary(ctx, "Property Table in EXT_structural_metadata", "properties");
  37. newEmitter.SetFieldToChildrenDictionary(ctx, "Property Attribute in EXT_structural_metadata", "properties");
  38. newEmitter.SetFieldToChildrenDictionary(ctx, "Schema in EXT_structural_metadata", "classes");
  39. newEmitter.SetFieldToChildrenDictionary(ctx, "Schema in EXT_structural_metadata", "enums");
  40. }
  41. public override IEnumerable<(string TargetFileName, SchemaType.Context Schema)> Process()
  42. {
  43. yield return ("Ext.CESIUM_ext_structural_metadata_root.g", ProcessRoot());
  44. yield return ("Ext.CESIUM_ext_structural_metadata_primitive.g", ProcessMeshPrimitive());
  45. }
  46. private static SchemaType.Context ProcessRoot()
  47. {
  48. var ctx = SchemaProcessing.LoadSchemaContext(RootSchemaUri);
  49. ctx.IgnoredByCodeEmitter("glTF Property");
  50. ctx.IgnoredByCodeEmitter("glTF Child of Root Property");
  51. ctx.IgnoredByCodeEmitter("Texture Info");
  52. var fld = ctx.FindClass(ExtensionPropertyTexturePropertyName).GetField("channels");
  53. // for now we simply remove the default value, it can be set
  54. // in the constructor or on demand when the APIs are Called.
  55. fld.RemoveDefaultValue();
  56. return ctx;
  57. }
  58. private static SchemaType.Context ProcessMeshPrimitive()
  59. {
  60. var ctx = SchemaProcessing.LoadSchemaContext(MeshPrimitiveSchemaUri);
  61. ctx.IgnoredByCodeEmitter("glTF Property");
  62. ctx.IgnoredByCodeEmitter("glTF Child of Root Property");
  63. ctx.IgnoredByCodeEmitter("Texture Info");
  64. return ctx;
  65. }
  66. }
  67. }