Example #1
0
        }                                        // 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));
        }