/// <summary> /// Splits Voxel into 8 smaller Voxels, returns new Octree Container. /// <summary> public OctreeContainer <T> split(out MetadataChange change) { OctreeContainer <T> replacement = new OctreeContainer <T>(min, max, minSize); /// add original point to new OctreeContainer int childNum = replacement.whichChild(point); var voxBounds = replacement.childBounds(childNum); replacement.setChild(childNum, new Voxel <T>(voxBounds["min"], voxBounds["max"], minSize, point, value)); change = new MetadataChange(dComponents: 8, dVoxels: 7, dNonNullVolume: -0.875 * replacement.volume()); return(replacement); }