public void LoadFrom(Stream stream) { BinaryReader reader = new BinaryReader(stream); m_GameObject = new PPtr<GameObject>(stream, file); m_Enabled = reader.ReadBoolean(); m_CastShadows = reader.ReadBoolean(); m_ReceiveShadows = reader.ReadBoolean(); m_LightmapIndex = reader.ReadByte(); m_LightmapTilingOffset = reader.ReadVector4(); int numMaterials = reader.ReadInt32(); m_Materials = new List<PPtr<Material>>(numMaterials); for (int i = 0; i < numMaterials; i++) { m_Materials.Add(new PPtr<Material>(stream, file)); } int numSubsetIndices = reader.ReadInt32(); m_SubsetIndices = reader.ReadUInt32Array(numSubsetIndices); m_StaticBatchRoot = new PPtr<Transform>(stream, file); m_UseLightProbes = reader.ReadBoolean(); reader.ReadBytes(3); m_LightProbeAnchor = new PPtr<Transform>(stream, file); m_SortingLayerID = reader.ReadUInt32(); m_SortingOrder = reader.ReadInt16(); reader.ReadBytes(2); }
public LASHeader(BinaryReader reader) { long length = reader.BaseStream.Length; if (length < c_minHeaderSize[LASVersion.LAS_1_0]) throw new OpenFailedException("Invalid format: header too short"); if (Encoding.ASCII.GetString(reader.ReadBytes(FILE_SIGNATURE.Length)) != FILE_SIGNATURE) throw new OpenFailedException("Invalid format: signature does not match"); m_fileSourceID = reader.ReadUInt16(); m_globalEncoding = reader.ReadLASGlobalEncoding(); m_projectID = reader.ReadLASProjectID(); m_version = reader.ReadLASVersionInfo(); m_systemIdentifier = reader.ReadBytes(32).ToAsciiString(); m_generatingSoftware = reader.ReadBytes(32).ToAsciiString(); m_fileCreationDayOfYear = reader.ReadUInt16(); m_fileCreationYear = reader.ReadUInt16(); m_headerSize = reader.ReadUInt16(); m_offsetToPointData = reader.ReadUInt32(); ushort minHeaderSize = c_minHeaderSize[m_version.Version]; if (length < minHeaderSize) throw new OpenFailedException("Invalid format: header too short for version"); if(minHeaderSize > m_headerSize) throw new OpenFailedException("Invalid format: header size incorrect"); m_numberOfVariableLengthRecords = reader.ReadUInt32(); m_pointDataRecordFormat = reader.ReadByte(); m_pointDataRecordLength = reader.ReadUInt16(); m_legacyNumberOfPointRecords = reader.ReadUInt32(); m_legacyNumberOfPointsByReturn = reader.ReadUInt32Array(5); m_quantization = reader.ReadSQuantization3D(); m_extent = reader.ReadExtent3D(); if (m_version.Version >= LASVersion.LAS_1_3) { m_startOfWaveformDataPacketRecord = reader.ReadUInt64(); } if (m_version.Version >= LASVersion.LAS_1_4) { m_startOfFirstExtendedVariableLengthRecord = reader.ReadUInt64(); m_numberOfExtendedVariableLengthRecords = reader.ReadUInt32(); m_numberOfPointRecords = reader.ReadUInt64(); m_numberOfPointsByReturn = reader.ReadUInt64Array(15); } else { m_numberOfPointRecords = m_legacyNumberOfPointRecords; m_numberOfPointsByReturn = new ulong[15]; for (int i = 0; i < m_legacyNumberOfPointsByReturn.Length; i++) m_numberOfPointsByReturn[i] = m_legacyNumberOfPointsByReturn[i]; } // This doesn't apply to LAZ files //ulong pointDataRegionLength = (ulong)length - m_offsetToPointData; //if (pointDataRegionLength < m_pointDataRecordLength * PointCount) // throw new Exception("Invalid format: point data region is not the expected size"); }
private static object ReadValue( BinaryReader inputReader, MemoryStream ms, bool isLittleEndian, ushort fieldType, int count, long baseOffset) { switch (fieldType) { case 1: { var valueOrOffset = inputReader.ReadUInt32(isLittleEndian); if (count == 1) { var value = inputReader.ReadByte(); var x = inputReader.ReadBytes(3); return value; } if (count < 4) { var value = inputReader.ReadBytes(count); if (count < 4) { var x = inputReader.ReadBytes(4 - count); } return value; } ms.Position = baseOffset + valueOrOffset; return inputReader.ReadBytes(count); } case 2: { if (count <= 4) { var value = inputReader.ReadString(count).Trim('\0'); if (count < 4) { inputReader.ReadBytes(4 - count); } return value; } var valueOrOffset = inputReader.ReadUInt32(isLittleEndian); ms.Position = baseOffset + valueOrOffset; return inputReader.ReadString(count).Trim('\0'); } case 3: { if (count == 1) { var value = inputReader.ReadUInt16(isLittleEndian); var x = inputReader.ReadUInt16(isLittleEndian); return value; } if (count == 2) { return inputReader.ReadUInt16Array(count, isLittleEndian); } var valueOrOffset = inputReader.ReadUInt32(isLittleEndian); ms.Position = baseOffset + valueOrOffset; return inputReader.ReadUInt16Array(count, isLittleEndian); } case 4: { if (count == 1) { return inputReader.ReadUInt32(isLittleEndian); } var valueOrOffset = inputReader.ReadUInt32(isLittleEndian); ms.Position = baseOffset + valueOrOffset; return inputReader.ReadUInt32Array(count, isLittleEndian); } case 5: { var valueOrOffset = inputReader.ReadUInt32(isLittleEndian); ms.Position = baseOffset + valueOrOffset; if (count == 1) { var nominator = inputReader.ReadUInt32(isLittleEndian); var denominator = inputReader.ReadUInt32(isLittleEndian); return (double)nominator / denominator; } throw new NotImplementedException(); } case 10: { var valueOrOffset = inputReader.ReadInt32(isLittleEndian); ms.Position = baseOffset + valueOrOffset; if (count == 1) { var nominator = inputReader.ReadInt32(isLittleEndian); var denominator = inputReader.ReadInt32(isLittleEndian); return (double)nominator / denominator; } throw new NotImplementedException(); } } throw new NotImplementedException(); }
public void LoadFrom(Stream stream) { BinaryReader reader = new BinaryReader(stream); m_GameObject = new PPtr<GameObject>(stream, file); Does_Animate_Color = reader.ReadBoolean(); reader.ReadBytes(3); colorAnimation = reader.ReadUInt32Array(5); worldRotationAxis = reader.ReadVector3(); localRotationAxis = reader.ReadVector3(); sizeGrow = reader.ReadSingle(); rndForce = reader.ReadVector3(); force = reader.ReadVector3(); damping = reader.ReadSingle(); stopSimulation = reader.ReadBoolean(); autodestruct = reader.ReadBoolean(); }
private void InternalRead(BinaryReader reader) { long posFileStart = reader.GetPosition(); short flag = reader.ReadInt16(); short userID = reader.ReadInt16(); int length = reader.ReadInt32(); string tag = reader.ReadCString(4); int unused = reader.ReadInt32(); if (tag != TAG) { throw new InvalidDataException("Identifier mismatch."); } int numTypeTableEntries = reader.ReadInt32(); int numUnknown = reader.ReadInt32(); reader.AlignPosition(16); TypeTableEntry[] typeTable = new TypeTableEntry[numTypeTableEntries]; for (int i = 0; i < numTypeTableEntries; i++) { typeTable[i] = new TypeTableEntry(reader); } System.Diagnostics.Debug.Assert(typeTable[(int)TypeTableType.Strings].elementCount == 0xF0); for (int i = 0; i < numTypeTableEntries; i++) { reader.Seek(posFileStart + typeTable[i].dataOffset, SeekOrigin.Begin); switch ((TypeTableType)typeTable[i].type) { case TypeTableType.Procedures: ReadCodeLabels(reader, ref _procedures, typeTable[i].elementCount, out _requireSortProcedures); break; case TypeTableType.JumpLabels: ReadCodeLabels(reader, ref _jumpLabels, typeTable[i].elementCount, out _requireSortJumps); break; case TypeTableType.Opcodes: { bool hasExtendedOpcodes; _opcodes = BFDisassembler.ParseCodeblock(reader.ReadUInt32Array(typeTable[i].elementCount), out hasExtendedOpcodes); if (hasExtendedOpcodes) // only fix up the opcode indices if they have to be FixupOpcodeIndices(); // this function is kinda 2*O(n^2) } break; case TypeTableType.Messages: if (typeTable[i].elementCount > 0) _messageFile = new BMDFile(StreamHelper.ReadStream(reader, typeTable[i].elementCount), false); break; case TypeTableType.Strings: // TODO: Implement this break; } } }
public void LoadFrom(Stream stream) { BinaryReader reader = new BinaryReader(stream); m_NeighborArray = reader.ReadUInt32Array(reader.ReadInt32()); }
public void LoadFrom(Stream stream) { BinaryReader reader = new BinaryReader(stream); m_IDArray = reader.ReadUInt32Array(reader.ReadInt32()); m_IndexOffset = reader.ReadUInt32(); }
public void LoadFrom(Stream stream) { BinaryReader reader = new BinaryReader(stream); m_BlendType = reader.ReadUInt32(); m_BlendEventID = reader.ReadUInt32(); m_BlendEventYID = reader.ReadUInt32(); m_ChildIndices = reader.ReadUInt32Array(reader.ReadInt32()); m_Blend1dData = new Blend1dDataConstant(stream); m_Blend2dData = new Blend2dDataConstant(stream); m_ClipID = reader.ReadUInt32(); m_ClipIndex = reader.ReadUInt32(); m_Duration = reader.ReadSingle(); m_CycleOffset = reader.ReadSingle(); m_Mirror = reader.ReadBoolean(); reader.ReadBytes(3); }