/**
* Returns geometry corresponding to volume @a that is divided into
* two separate pieces by @b. Return results in the form of two BSPTree
* instances: @side and @side2.
*/
public static void Slice(BSPTree a, BSPTree b, out BSPTree side1, out BSPTree side2)
{
side1 = a.Clone();
BSPTree bClone = b.Clone();
List <Triangle> side1Discarded = new List <Triangle>();
bClone.Invert();
bClone.ClipByTree(a, false);
side1.ClipByTree(b, true, side1Discarded);
side1.AddTriangles(bClone.GetAllTriangles());
bClone.Invert();
side2 = new BSPTree();
side2.AddTriangles(bClone.GetAllTriangles());
side2.AddTriangles(side1Discarded);
}