Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
 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);
     }
 }