ClipVolumeFrom4Points:
PUBLIC
PROC [p0, p1, p2, p3: Triple]
RETURNS [tetra: ClipVolume] ~ {
BuildPlane:
PROC [p0, p1, p2, testPoint: Triple]
RETURNS [plane: Plane] ~ {
plane ¬ G3dPlane.FromThreePoints[p0, p1, p2];
IF G3dPlane.DistanceToPoint[testPoint, plane] < 0.0 THEN plane ¬ NegatePlane[plane];
};
tetra ¬ NEW[ClipVolumeRep ¬ []];
tetra.planes ¬ G3dPlane.AddToPlaneSequence[tetra.planes, BuildPlane[p0, p1, p2, p3]];
tetra.planes ¬ G3dPlane.AddToPlaneSequence[tetra.planes, BuildPlane[p0, p2, p3, p1]];
tetra.planes ¬ G3dPlane.AddToPlaneSequence[tetra.planes, BuildPlane[p0, p3, p1, p2]];
tetra.planes ¬ G3dPlane.AddToPlaneSequence[tetra.planes, BuildPlane[p1, p2, p3, p0]];
tetra.box ¬ G3dBox.BoxFromPoints[p0, p1];
tetra.box ¬ G3dBox.BoxUnionPoint[tetra.box, p2];
tetra.box ¬ G3dBox.BoxUnionPoint[tetra.box, p3];
};