public RTreeNode(byte[] buffer) { System.Diagnostics.Debug.Assert(buffer.Length == 960, "buffer.Length == 960"); Array.Reverse(buffer, 0, 2); _treedepth = BitConverter.ToInt16(buffer, 0); Array.Reverse(buffer, 2, 2); NodesCount = BitConverter.ToInt16(buffer, 2); if (NodesCount == 0) { XMin = YMin = float.NaN; XMax = YMax = float.NaN; return; } Entries = new RTreeNodeEntry[NodesCount]; var entry = new byte[24]; Buffer.BlockCopy(buffer, 4, entry, 0, 24); Entries[0] = new RTreeNodeEntry(entry); XMin = Entries[0].XMin; XMax = Entries[0].XMax; YMin = Entries[0].YMin; YMax = Entries[0].YMax; var offset = 28; for (var i = 1; i < NodesCount; i++) { Buffer.BlockCopy(buffer, offset, entry, 0, 24); Entries[i] = new RTreeNodeEntry(entry); if (Entries[i].XMin < XMin) { XMin = Entries[i].XMin; } if (Entries[i].XMax > XMax) { XMax = Entries[i].XMax; } if (Entries[i].YMin < YMin) { YMin = Entries[i].YMin; } if (Entries[i].YMax > YMax) { YMax = Entries[i].YMax; } offset += 24; } }
public RTreeNode(byte[] buffer) { System.Diagnostics.Debug.Assert(buffer.Length == 960, "buffer.Length == 960"); Array.Reverse(buffer, 0, 2); _treedepth = BitConverter.ToInt16(buffer, 0); Array.Reverse(buffer, 2, 2); NodesCount = BitConverter.ToInt16(buffer, 2); if (NodesCount == 0) { XMin = YMin = float.NaN; XMax = YMax = float.NaN; return; } Entries = new RTreeNodeEntry[NodesCount]; var entry = new byte[24]; Buffer.BlockCopy(buffer, 4, entry, 0, 24); Entries[0] = new RTreeNodeEntry(entry); XMin = Entries[0].XMin; XMax = Entries[0].XMax; YMin = Entries[0].YMin; YMax = Entries[0].YMax; var offset = 28; for (var i = 1; i < NodesCount; i++) { Buffer.BlockCopy(buffer, offset, entry, 0, 24); Entries[i] = new RTreeNodeEntry(entry); if (Entries[i].XMin < XMin) XMin = Entries[i].XMin; if (Entries[i].XMax > XMax) XMax = Entries[i].XMax; if (Entries[i].YMin < YMin) YMin = Entries[i].YMin; if (Entries[i].YMax > YMax) YMax = Entries[i].YMax; offset += 24; } }