Ejemplo n.º 1
0
        public static QuadTree<byte> LoadQuadTree(BinaryReader Reader)
        {
            // First load the dimensions.
            var topLeft = new Coordinate(Reader.ReadSingle(), Reader.ReadSingle());
            var bottomRight = new Coordinate(Reader.ReadSingle(), Reader.ReadSingle());

            return LoadQuadTreeInternal(Reader, topLeft, bottomRight);
        }
Ejemplo n.º 2
0
 private static QuadTree<byte> LoadQuadTreeInternal(BinaryReader Reader, Coordinate TopLeft, Coordinate BottomRight)
 {
     var type = Reader.ReadByte();
     if (type == LEAF)
     {
         return new QuadTreeLeaf<byte>
         {
             BottomRight = BottomRight,
             TopLeft = TopLeft,
             Data = Reader.ReadByte()
         };
     }
     else if (type == NODE)
     {
         var middleTop = new Coordinate((BottomRight.X + TopLeft.X) / 2, TopLeft.Y);
         var middleBottom = new Coordinate((BottomRight.X + TopLeft.X) / 2, BottomRight.Y);
         var middleLeft = new Coordinate(TopLeft.X, (BottomRight.Y + TopLeft.Y) / 2);
         var middleRight = new Coordinate(BottomRight.X, (BottomRight.Y + TopLeft.Y) / 2);
         var middle = new Coordinate(middleTop.X, middleLeft.Y);
         return new QuadTreeNode<byte>
         {
             TopLeft = TopLeft,
             BottomRight = BottomRight,
             Children = new[]
             {
                 LoadQuadTreeInternal(Reader, TopLeft, middle),
                 LoadQuadTreeInternal(Reader, middleTop, middleRight),
                 LoadQuadTreeInternal(Reader, middleLeft, middleBottom),
                 LoadQuadTreeInternal(Reader, middle, BottomRight)
             }
         };
     }
     else
     {
         throw new InvalidDataException("Invalid type identifier");
     }
 }