/// <summary>
 ///   A custom voxel octree.
 /// </summary>
 /// <param name="format"></param>
 public OctreeVoxelMesh(OctreeVoxelMeshFormat format)
   : base()
 {
   this._childs = new IVoxelMesh[2, 2, 2];
   this._format = format;
   this._builder = new OctreeNodeBuilder();
 }
    /// <summary>
    ///   Copy an existing octree.
    /// </summary>
    /// <param name="toCopy"></param>
    public OctreeVoxelMesh(OctreeVoxelMesh toCopy)
      : base()
    {
      this._childs = new IVoxelMesh[2, 2, 2];
      this._format = toCopy._format;
      this._builder = (IOctreeNodeBuilder) toCopy._builder.Copy();

      this.Copy(toCopy.Start, toCopy.End, VoxelLocation.Zero, toCopy);
    }
 /// <summary>
 ///   An empty voxel octree.
 /// </summary>
 public OctreeVoxelMesh()
   : base()
 {
   this._childs = new IVoxelMesh[2, 2, 2];
   this._format = OctreeVoxelMeshFormat.Empty;
   this._builder = new OctreeNodeBuilder();
 }
    /// <summary>
    ///   Copy an existing voxel mesh.
    /// </summary>
    /// <param name="toCopy"></param>
    public OctreeVoxelMesh(IVoxelMesh toCopy)
      : base()
    {
      this._childs = new IVoxelMesh[2, 2, 2];
      this._format = OctreeVoxelMeshFormat.GetFormat(toCopy.Width, toCopy.Height, toCopy.Depth);
      this._builder = new OctreeNodeBuilder();

      this.Copy(toCopy.Start, toCopy.End, VoxelLocation.Zero, toCopy);
    }