2018-06-08 00:42:41 +08:00
|
|
|
|
using System;
|
|
|
|
|
using SharpDX;
|
|
|
|
|
|
|
|
|
|
namespace CodeWalker.Core.Utils
|
|
|
|
|
{
|
|
|
|
|
public static class BoundingBoxExtensions
|
|
|
|
|
{
|
|
|
|
|
public static Vector3 Size(this BoundingBox bounds)
|
|
|
|
|
{
|
|
|
|
|
return new Vector3(
|
|
|
|
|
Math.Abs(bounds.Maximum.X - bounds.Minimum.X),
|
|
|
|
|
Math.Abs(bounds.Maximum.Y - bounds.Minimum.Y),
|
|
|
|
|
Math.Abs(bounds.Maximum.Z - bounds.Minimum.Z));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Vector3 Center(this BoundingBox bounds)
|
|
|
|
|
{
|
|
|
|
|
return (bounds.Minimum + bounds.Maximum) * 0.5F;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static BoundingBox Encapsulate(this BoundingBox box, BoundingBox bounds)
|
|
|
|
|
{
|
|
|
|
|
box.Minimum = Vector3.Min(box.Minimum, bounds.Minimum);
|
|
|
|
|
box.Maximum = Vector3.Max(box.Maximum, bounds.Maximum);
|
|
|
|
|
return box;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static float Radius(this BoundingBox box)
|
|
|
|
|
{
|
|
|
|
|
var extents = (box.Maximum - box.Minimum) * 0.5F;
|
|
|
|
|
return extents.Length();
|
|
|
|
|
}
|
2018-06-10 21:36:50 +08:00
|
|
|
|
|
|
|
|
|
public static BoundingBox Expand(this BoundingBox b, float amount)
|
|
|
|
|
{
|
|
|
|
|
return new BoundingBox(b.Minimum - Vector3.One * amount, b.Maximum + Vector3.One * amount);
|
|
|
|
|
}
|
2018-06-08 00:42:41 +08:00
|
|
|
|
}
|
|
|
|
|
}
|