} // Bounding box of all mesh in this geometry store /// <summary> /// Helper function to calculate the intersect value of two (XbimRect3D) Bounding box. /// </summary> /// <param name="boxA">Bounding box A</param> /// <param name="boxB">Bounding box B</param> /// <returns>Intersect volume.</returns> public static double Intersect(XbimRect3D boxA, XbimRect3D boxB) { // bounding boxes do not intersect if (!boxA.Intersects(boxB)) { return(0.0); } double lowX = Math.Max(boxA.Min.X, boxB.Min.X), lowY = Math.Max(boxA.Min.Y, boxB.Min.Y), lowZ = Math.Max(boxA.Min.Z, boxB.Min.Z); double highX = Math.Min(boxA.Max.X, boxB.Max.X), highY = Math.Min(boxA.Max.Y, boxB.Max.Y), highZ = Math.Min(boxA.Max.Z, boxB.Max.Z); double xA = Math.Min(lowX, highX), yA = Math.Min(lowY, highY), zA = Math.Min(lowZ, highZ); double xB = Math.Max(lowX, highX), yB = Math.Max(lowY, highY), zB = Math.Max(lowZ, highZ); if (xA > xB || yA > yB || zA > zB) { return(0.0); } return((xB - xA) * (yB - yA) * (zB - zA)); }