Ejemplo n.º 1
0
        /// <summary>
        /// Expands the <see cref="IBoundingBox"/>'s values.
        /// </summary>
        /// <param name="boundingBox"></param>
        /// <param name="factor">0 for no expanding.</param>
        public static void Expand(this IBoundingBox boundingBox, float factor = 0.1f)
        {
            if (boundingBox == null)
            {
                return;
            }

            vec3 min = boundingBox.MinPosition;
            vec3 max = boundingBox.MaxPosition;

            if (boundingBox.MaxPosition.x < min.x)
            {
                min.x = boundingBox.MaxPosition.x;
            }
            if (boundingBox.MaxPosition.y < min.y)
            {
                min.y = boundingBox.MaxPosition.y;
            }
            if (boundingBox.MaxPosition.z < min.z)
            {
                min.z = boundingBox.MaxPosition.z;
            }

            if (max.x < boundingBox.MinPosition.x)
            {
                max.x = boundingBox.MinPosition.x;
            }
            if (max.y < boundingBox.MinPosition.y)
            {
                max.y = boundingBox.MinPosition.y;
            }
            if (max.z < boundingBox.MinPosition.z)
            {
                max.z = boundingBox.MinPosition.z;
            }

            float distance = (float)((max - min).Magnitude() * factor);
            vec3  vector   = (max - min);

            vector *= (1 + factor);
            vec3 newMax = min + vector;
            vec3 newMin = max - vector;

            boundingBox.Set(newMin.x, newMin.y, newMin.z, newMax.x, newMax.y, newMax.z);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Expands the <see cref="IBoundingBox"/>'s values.
        /// </summary>
        /// <param name="boundingBox"></param>
        /// <param name="factor">0 for no expanding.</param>
        public static void Expand(this IBoundingBox boundingBox, float factor = 0.1f)
        {
            if (boundingBox == null)
            {
                return;
            }

            Vertex min = boundingBox.MinPosition;
            Vertex max = boundingBox.MaxPosition;

            if (boundingBox.MaxPosition.X < min.X)
            {
                min.X = boundingBox.MaxPosition.X;
            }
            if (boundingBox.MaxPosition.Y < min.Y)
            {
                min.Y = boundingBox.MaxPosition.Y;
            }
            if (boundingBox.MaxPosition.Z < min.Z)
            {
                min.Z = boundingBox.MaxPosition.Z;
            }

            if (max.X < boundingBox.MinPosition.X)
            {
                max.X = boundingBox.MinPosition.X;
            }
            if (max.Y < boundingBox.MinPosition.Y)
            {
                max.Y = boundingBox.MinPosition.Y;
            }
            if (max.Z < boundingBox.MinPosition.Z)
            {
                max.Z = boundingBox.MinPosition.Z;
            }

            float  distance = (float)((max - min).Magnitude() * factor);
            Vertex vector   = (max - min);

            vector *= (1 + factor);
            Vertex newMax = min + vector;
            Vertex newMin = max - vector;

            boundingBox.Set(newMin.X, newMin.Y, newMin.Z, newMax.X, newMax.Y, newMax.Z);
        }