Yet more work on fixing the boundingbox code.

trunk
MW 2009-07-15 18:55:28 +00:00
parent 3a72531e4c
commit 856d5f4375
1 changed files with 21 additions and 11 deletions

View File

@ -596,14 +596,23 @@ namespace OpenSim.Region.Framework.Scenes
/// <returns></returns>
public Vector3 GetAxisAlignedBoundingBox()
{
float maxX = 0f, maxY = 0f, maxZ = 0f, minX = 256f, minY = 256f, minZ = 256f;
float maxX = -256f, maxY = -256f, maxZ = -256f, minX = 256f, minY = 256f, minZ = 256f;
lock (m_parts)
{
foreach (SceneObjectPart part in m_parts.Values)
{
Vector3 worldPos = part.GetWorldPosition();
Vector3 offset = worldPos - AbsolutePosition;
Quaternion worldRot = part.GetWorldRotation();
Quaternion worldRot;
if (part.ParentID == 0)
{
worldRot = part.RotationOffset;
}
else
{
worldRot = part.GetWorldRotation();
}
Vector3 frontTopLeft;
Vector3 frontTopRight;
@ -621,35 +630,36 @@ namespace OpenSim.Region.Framework.Scenes
frontTopLeft.Y = orig.Y - (part.Scale.Y / 2);
frontTopLeft.Z = orig.Z + (part.Scale.Z / 2);
frontTopRight.X = orig.X + (part.Scale.X / 2);
frontTopRight.Y = orig.Y - (part.Scale.Y / 2);
frontTopRight.X = orig.X - (part.Scale.X / 2);
frontTopRight.Y = orig.Y + (part.Scale.Y / 2);
frontTopRight.Z = orig.Z + (part.Scale.Z / 2);
frontBottomLeft.X = orig.X - (part.Scale.X / 2);
frontBottomLeft.Y = orig.Y - (part.Scale.Y / 2);
frontBottomLeft.Z = orig.Z - (part.Scale.Z / 2);
frontBottomRight.X = orig.X + (part.Scale.X / 2);
frontBottomRight.Y = orig.Y - (part.Scale.Y / 2);
frontBottomRight.X = orig.X - (part.Scale.X / 2);
frontBottomRight.Y = orig.Y + (part.Scale.Y / 2);
frontBottomRight.Z = orig.Z - (part.Scale.Z / 2);
backTopLeft.X = orig.X - (part.Scale.X / 2);
backTopLeft.Y = orig.Y + (part.Scale.Y / 2);
backTopLeft.X = orig.X + (part.Scale.X / 2);
backTopLeft.Y = orig.Y - (part.Scale.Y / 2);
backTopLeft.Z = orig.Z + (part.Scale.Z / 2);
backTopRight.X = orig.X + (part.Scale.X / 2);
backTopRight.Y = orig.Y + (part.Scale.Y / 2);
backTopRight.Z = orig.Z + (part.Scale.Z / 2);
backBottomLeft.X = orig.X - (part.Scale.X / 2);
backBottomLeft.Y = orig.Y + (part.Scale.Y / 2);
backBottomLeft.X = orig.X + (part.Scale.X / 2);
backBottomLeft.Y = orig.Y - (part.Scale.Y / 2);
backBottomLeft.Z = orig.Z - (part.Scale.Z / 2);
backBottomRight.X = orig.X + (part.Scale.X / 2);
backBottomRight.Y = orig.Y + (part.Scale.Y / 2);
backBottomRight.Z = orig.Z - (part.Scale.Z / 2);
frontTopLeft = frontTopLeft * worldRot;
frontTopRight = frontTopRight * worldRot;
frontBottomLeft = frontBottomLeft * worldRot;