protected override void SerializeMembers(JsonFormatter f) { if (children != null && children.Any()) { f.Key("children"); f.BeginList(); foreach (var child in children) { f.Value(child); } f.EndList(); } if (!string.IsNullOrEmpty(name)) { f.KeyValue(() => name); } if (matrix != null) { f.KeyValue(() => matrix); } if (translation != null) { f.KeyValue(() => translation); } if (rotation != null) { f.KeyValue(() => rotation); } if (scale != null) { f.KeyValue(() => scale); } if (mesh >= 0) { f.KeyValue(() => mesh); } if (camera >= 0) { f.KeyValue(() => camera); } if (skin >= 0) { f.KeyValue(() => skin); f.KeyValue(() => extras); } }
public static void Serialize(glTFMesh gltfMesh, IEnumerable <string> targetNames) { // targetNames var f = new JsonFormatter(); f.BeginList(); foreach (var n in targetNames) { f.Value(n); } f.EndList(); var targetNamesJson = f.GetStore().Bytes; var meshExtras = glTFExtensionExport.GetOrCreate(ref gltfMesh.extras); meshExtras.Add(ExtraName, targetNamesJson); foreach (var prim in gltfMesh.primitives) { var primExtras = glTFExtensionExport.GetOrCreate(ref prim.extras); primExtras.Add(ExtraName, targetNamesJson); } }
static void CopyJson(IReadOnlyList <string> extensionUsed, JsonFormatter dst, JsonNode src, int level) { if (src.IsArray()) { dst.BeginList(); foreach (var v in src.ArrayItems()) { CopyJson(extensionUsed, dst, v, level + 1); } dst.EndList(); } else if (src.IsMap()) { if (level == 0) { // 最上層だけ extensionsUsed の処理をする var done = false; dst.BeginMap(); foreach (var kv in src.ObjectItems()) { var key = kv.Key.GetString(); if (key == EXTENSION_USED_KEY) { if (extensionUsed.Count == 0) { // skip } else { dst.Key(key); // replace dst.BeginList(); foreach (var ex in extensionUsed) { dst.Value(ex); } dst.EndList(); // 処理済 } done = true; } else { dst.Key(key); CopyJson(extensionUsed, dst, kv.Value, level + 1); } } if (!done && level == 0 && extensionUsed.Count > 0) { // add dst.Key(EXTENSION_USED_KEY); dst.BeginList(); foreach (var ex in extensionUsed) { dst.Value(ex); } dst.EndList(); } dst.EndMap(); } else { dst.BeginMap(); foreach (var kv in src.ObjectItems()) { dst.Key(kv.Key.GetUtf8String()); CopyJson(extensionUsed, dst, kv.Value, level + 1); } dst.EndMap(); } } else { // leaf dst.Value(src); } }