/// <summary> /// Reads header from binary reader and returns it. /// </summary> /// <param name="br"></param> /// <returns></returns> public static PmgHeader ReadFrom(BinaryReader br) { var result = new PmgHeader(); result.Signature = br.ReadString(4); if (result.Signature != "pmg") { throw new InvalidDataException("Expected 'pmg' signature."); } result.Version = FormatVersion.ReadFrom(br); result.HeaderSize = br.ReadInt32(); result.Name = br.ReadString(32); result.Unk1 = br.ReadBytes(96); var meshGroupCount = br.ReadInt32(); for (var i = 0; i < meshGroupCount; ++i) { var meshGroup = MeshGroup.ReadFrom(br); result.MeshGroups.Add(meshGroup); } return(result); }
/// <summary> /// Reads a PMG from the given stream and returns it. /// </summary> /// <param name="stream"></param> /// <returns></returns> public static PmgFile ReadFrom(Stream stream) { var result = new PmgFile(); var br = new BinaryReader(stream); result.Header = PmgHeader.ReadFrom(br); foreach (var group in result.Header.MeshGroups) { for (var i = 0; i < group.MeshCount; ++i) { var mesh = Mesh.ReadFrom(br); result.Meshes.Add(mesh); } } if (stream.Position != stream.Length) { throw new InvalidDataException("Leftover data in PMG."); } return(result); }