/// <summary>
    ///   Create a chunck at a specified location.
    /// </summary>
    /// <param name="chunckLocation"></param>
    /// <returns></returns>
    private IVoxelMesh CreateChunck(VoxelLocation chunckLocation)
    {
      IVoxelMesh chunck = this._chunkBuilder.Build();
      this._chunks[chunckLocation] = chunck;

      VoxelLocation max = new VoxelLocation(chunckLocation);
      VoxelLocation min = new VoxelLocation(chunckLocation);
      max.Add(1, 1, 1).Mul(this.ChildWidth, this.ChildHeight, this.ChildDepth);
      min.Mul(this.ChildWidth, this.ChildHeight, this.ChildDepth);

      if (min.X < this._min.X) this._min.X = min.X;
      if (min.Y < this._min.Y) this._min.Y = min.Y;
      if (min.Z < this._min.Z) this._min.Z = min.Z;

      if (max.X > this._max.X) this._max.X = max.X;
      if (max.Y > this._max.Y) this._max.Y = max.Y;
      if (max.Z > this._max.Z) this._max.Z = max.Z;

      return chunck;
    }
    /// <summary>
    ///   Get the chunck that contains the specified location.
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <param name="z"></param>
    /// <returns></returns>
    private void DeleteChunckAt(int x, int y, int z)
    {
      VoxelLocation chunckLocation = this.ToChunckLocation(x, y, z);

      this._chunks.Remove(chunckLocation);

      VoxelLocation max = new VoxelLocation(chunckLocation);
      VoxelLocation min = new VoxelLocation(chunckLocation);
      max.Add(1, 1, 1).Mul(this.ChildWidth, this.ChildHeight, this.ChildDepth);
      min.Mul(this.ChildWidth, this.ChildHeight, this.ChildDepth);

      if(min.X == this._min.X || min.Y == this._min.Y || min.Z == this._min.Z ||
         max.X == this._max.X || max.Y == this._max.Y || max.Z == this._max.Z)
      {
        this.EvaluateSize();
      }
    }