private static ROOT _Read(StringReader textReader, ReadSettings settings) { Guard.NotNull(textReader, nameof(textReader)); Guard.NotNull(settings, nameof(settings)); using (var reader = new JsonTextReader(textReader)) { var root = new ROOT(); root.DeserializeObject(reader); var ex = root.Validate().FirstOrDefault(); if (ex != null) { throw ex; } foreach (var buffer in root._buffers) { buffer._ResolveUri(settings.FileReader); } foreach (var image in root._images) { image._ResolveUri(settings.FileReader); } return(root); } }
public static ROOT Parse(String jsonContent, ReadSettings settings) { Guard.NotNullOrEmpty(jsonContent, nameof(jsonContent)); Guard.NotNull(settings, nameof(settings)); using (var tr = new StringReader(jsonContent)) { return(_Read(tr, settings)); } }
public static ROOT Load(string filePath) { Guard.FilePathMustExist(filePath, nameof(filePath)); var settings = new ReadSettings(filePath); using (var s = File.OpenRead(filePath)) { return(Read(s, settings)); } }
/// <summary> /// Reads a <code>Schema.Gltf</code> model from a stream /// </summary> /// <param name="stream">Readable stream to a gltf/glb model</param> /// <returns><code>Schema.Gltf</code> model</returns> public static ROOT Read(Stream stream, ReadSettings settings) { bool binaryFile = glb._Identify(stream); if (binaryFile) { return(ReadGLB(stream, settings)); } else { return(ReadGLTF(stream, settings)); } }
public static ROOT ReadGLTF(Stream stream, ReadSettings settings) { Guard.NotNull(stream, nameof(stream)); Guard.NotNull(settings, nameof(settings)); string content = null; using (var streamReader = new StreamReader(stream)) { content = streamReader.ReadToEnd(); } return(Parse(content, settings)); }
public static ROOT ReadGLB(Stream stream, ReadSettings settings) { Guard.NotNull(stream, nameof(stream)); Guard.NotNull(settings, nameof(settings)); var chunks = glb.ReadBinaryFile(stream); var dom = Encoding.UTF8.GetString(chunks[glb.CHUNKJSON]); if (chunks.ContainsKey(glb.CHUNKBIN)) { settings.FileReader = key => string.IsNullOrEmpty(key) ? chunks[glb.CHUNKBIN] : settings.FileReader?.Invoke(key); } return(Parse(dom, settings)); }