/// <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); }
/// <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); }