Ext.EXT_Structural_Metadata.cs 5.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 CesiumExtensions.CesiumProjectDirectory; }
  9. const string ExtensionPropertyTexturePropertyName = "Property Texture Property in EXT_structural_metadata";
  10. private static string RootSchemaUri => CesiumExtensions.CustomExtensionsPath("EXT_structural_metadata", "glTF.EXT_structural_metadata.schema.json");
  11. private static string MeshPrimitiveSchemaUri => CesiumExtensions.CustomExtensionsPath("EXT_structural_metadata", "mesh.primitive.EXT_structural_metadata.schema.json");
  12. public override IEnumerable<(string TargetFileName, SchemaType.Context Schema)> ReadSchema()
  13. {
  14. yield return ("Ext.CESIUM_ext_structural_metadata_root.g", ProcessRoot());
  15. yield return ("Ext.CESIUM_ext_structural_metadata_primitive.g", ProcessMeshPrimitive());
  16. }
  17. private static SchemaType.Context ProcessRoot()
  18. {
  19. var ctx = SchemaProcessing.LoadExtensionSchemaContext(RootSchemaUri);
  20. // for now we simply remove the default value, it can be set
  21. // in the constructor or on demand when the APIs are Called.
  22. var fld = ctx.FindClass(ExtensionPropertyTexturePropertyName).GetField("channels");
  23. fld.RemoveDefaultValue();
  24. return ctx;
  25. }
  26. private static SchemaType.Context ProcessMeshPrimitive()
  27. {
  28. var ctx = SchemaProcessing.LoadExtensionSchemaContext(MeshPrimitiveSchemaUri);
  29. return ctx;
  30. }
  31. public override void PrepareTypes(CSharpEmitter newEmitter, SchemaType.Context ctx)
  32. {
  33. newEmitter.SetRuntimeName("EXT_structural_metadata glTF Mesh Primitive extension", "ExtStructuralMetadataMeshPrimitive", CesiumExtensions.CesiumNameSpace);
  34. newEmitter.SetRuntimeName("EXT_structural_metadata glTF extension", "EXTStructuralMetadataRoot", CesiumExtensions.CesiumNameSpace);
  35. newEmitter.SetRuntimeName("Property Table in EXT_structural_metadata", "PropertyTable", CesiumExtensions.CesiumNameSpace);
  36. newEmitter.SetRuntimeName("Schema in EXT_structural_metadata", "StructuralMetadataSchema", CesiumExtensions.CesiumNameSpace);
  37. newEmitter.SetRuntimeName("Property Table Property in EXT_structural_metadata", "PropertyTableProperty", CesiumExtensions.CesiumNameSpace);
  38. newEmitter.SetRuntimeName("Property Texture in EXT_structural_metadata", "PropertyTexture", CesiumExtensions.CesiumNameSpace);
  39. newEmitter.SetRuntimeName("Property Texture Property in EXT_structural_metadata", "PropertyTextureProperty", CesiumExtensions.CesiumNameSpace);
  40. newEmitter.SetRuntimeName("Property Attribute Property in EXT_structural_metadata", "PropertyAttributeProperty", CesiumExtensions.CesiumNameSpace);
  41. newEmitter.SetRuntimeName("Class Property in EXT_structural_metadata", "StructuralMetadataClassProperty", CesiumExtensions.CesiumNameSpace);
  42. newEmitter.SetRuntimeName("Class in EXT_structural_metadata", "StructuralMetadataClass", CesiumExtensions.CesiumNameSpace);
  43. newEmitter.SetRuntimeName("Enum Value in EXT_structural_metadata", "StructuralMetadataEnumValue", CesiumExtensions.CesiumNameSpace);
  44. newEmitter.SetRuntimeName("Enum in EXT_structural_metadata", "StructuralMetadataEnum", CesiumExtensions.CesiumNameSpace);
  45. newEmitter.SetRuntimeName("Property Attribute in EXT_structural_metadata", "PropertyAttribute", CesiumExtensions.CesiumNameSpace);
  46. newEmitter.SetRuntimeName("BOOLEAN-ENUM-MAT2-MAT3-MAT4-SCALAR-STRING-VEC2-VEC3-VEC4", "ElementType", CesiumExtensions.CesiumNameSpace);
  47. newEmitter.SetRuntimeName("FLOAT32-FLOAT64-INT16-INT32-INT64-INT8-UINT16-UINT32-UINT64-UINT8", "DataType", CesiumExtensions.CesiumNameSpace);
  48. newEmitter.SetRuntimeName("INT16-INT32-INT64-INT8-UINT16-UINT32-UINT64-UINT8", "IntegerType", CesiumExtensions.CesiumNameSpace);
  49. newEmitter.SetRuntimeName("UINT16-UINT32-UINT64-UINT8", "ArrayOffsetType", CesiumExtensions.CesiumNameSpace);
  50. newEmitter.SetFieldToChildrenList(ctx, "EXT_structural_metadata glTF extension", "propertyTables");
  51. newEmitter.SetFieldToChildrenList(ctx, "EXT_structural_metadata glTF extension", "propertyAttributes");
  52. newEmitter.SetFieldToChildrenList(ctx, "EXT_structural_metadata glTF extension", "propertyTextures");
  53. newEmitter.SetFieldToChildrenDictionary(ctx, "Property Attribute in EXT_structural_metadata", "properties");
  54. newEmitter.SetFieldToChildrenDictionary(ctx, "Property Texture in EXT_structural_metadata", "properties");
  55. newEmitter.SetFieldToChildrenDictionary(ctx, "Property Table in EXT_structural_metadata", "properties");
  56. newEmitter.SetFieldToChildrenDictionary(ctx, "Class in EXT_structural_metadata", "properties");
  57. newEmitter.SetFieldToChildrenDictionary(ctx, "Schema in EXT_structural_metadata", "classes");
  58. newEmitter.SetFieldToChildrenList(ctx, "Enum in EXT_structural_metadata", "values");
  59. newEmitter.SetFieldToChildrenDictionary(ctx, "Schema in EXT_structural_metadata", "enums");
  60. }
  61. }
  62. }