Bounding Box/find rez from inventory point code now seems to be working correctly.
So next step is to clean up that code and wait for bug reports.trunk
parent
856d5f4375
commit
a266e6dc4b
OpenSim/Region/Framework/Scenes
|
@ -2312,14 +2312,19 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
AddNewSceneObject(group, true);
|
||||
|
||||
// m_log.InfoFormat("ray end point for inventory rezz is {0} {1} {2} ", RayEnd.X, RayEnd.Y, RayEnd.Z);
|
||||
// if attachment we set it's asset id so object updates can reflect that
|
||||
// if not, we set it's position in world.
|
||||
if (!attachment)
|
||||
{
|
||||
float offsetHeight = 0;
|
||||
pos = GetNewRezLocation(
|
||||
RayStart, RayEnd, RayTargetID, Quaternion.Identity,
|
||||
BypassRayCast, bRayEndIsIntersection, true, group.GetAxisAlignedBoundingBox(), false);
|
||||
BypassRayCast, bRayEndIsIntersection, true, group.GetAxisAlignedBoundingBox(out offsetHeight), false);
|
||||
pos.Z += offsetHeight;
|
||||
group.AbsolutePosition = pos;
|
||||
// m_log.InfoFormat("rezx point for inventory rezz is {0} {1} {2} and offsetheight was {3}", pos.X, pos.Y, pos.Z, offsetHeight);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -587,21 +587,22 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return returnresult;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets a vector representing the size of the bounding box containing all the prims in the group
|
||||
/// Treats all prims as rectangular, so no shape (cut etc) is taken into account
|
||||
/// offsetHeight is the offset in the Z axis from the centre of the bounding box to the centre of the root prim
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Vector3 GetAxisAlignedBoundingBox()
|
||||
public Vector3 GetAxisAlignedBoundingBox(out float offsetHeight)
|
||||
{
|
||||
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;
|
||||
|
@ -659,7 +660,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
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;
|
||||
|
@ -795,10 +795,23 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
Vector3 boundingBox = new Vector3(maxX - minX, maxY - minY, maxZ - minZ);
|
||||
|
||||
offsetHeight = 0;
|
||||
float lower = (minZ * -1);
|
||||
if (lower > maxZ)
|
||||
{
|
||||
offsetHeight = lower - (boundingBox.Z / 2);
|
||||
|
||||
}
|
||||
else if (maxZ > lower)
|
||||
{
|
||||
offsetHeight = maxZ - (boundingBox.Z / 2);
|
||||
offsetHeight *= -1;
|
||||
}
|
||||
|
||||
// m_log.InfoFormat("BoundingBox is {0} , {1} , {2} ", boundingBox.X, boundingBox.Y, boundingBox.Z);
|
||||
return boundingBox;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public void SaveScriptedState(XmlTextWriter writer)
|
||||
|
|
Loading…
Reference in New Issue