/// <summary> /// Utility function for creating a PlaneSurface through a Box. /// </summary> /// <param name="plane">Plane to extend.</param> /// <param name="box">Box to extend through.</param> /// <param name="fuzzyness">Box will be inflated by this amount.</param> /// <returns>A Plane surface through the box or null.</returns> internal static PlaneSurface ExtendThroughBox(Plane plane, BoundingBox box, double fuzzyness) { if (fuzzyness != 0.0) { box.Inflate(fuzzyness); } Point3d[] corners = box.GetCorners(); int side = 0; bool valid = false; for (int i = 0; i < corners.Length; i++) { double d = plane.DistanceTo(corners[i]); if (d == 0.0) { continue; } if (d < 0.0) { if (side > 0) { valid = true; break; } side = -1; } else { if (side < 0) { valid = true; break; } side = +1; } } if (!valid) { return null; } Interval s, t; if (!plane.ExtendThroughBox(box, out s, out t)) { return null; } if (s.IsSingleton || t.IsSingleton) return null; return new PlaneSurface(plane, s, t); }