diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index bc2ca4c46d..f81cfe2f7b 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -4024,13 +4024,25 @@ namespace OpenSim.Region.Framework.Scenes if (nparts <= 1) return gc; + Quaternion parentRot = RootPart.RotationOffset; + Vector3 pPos; + // average all parts positions for (int i = 0; i < nparts; i++) - gc += parts[i].GetWorldPosition(); + { + // do it directly + // gc += parts[i].GetWorldPosition(); + if (parts[i] != RootPart) + { + pPos = parts[i].OffsetPosition; + gc += pPos; + } + + } gc /= nparts; // relative to root: - gc -= AbsolutePosition; +// gc -= AbsolutePosition; return gc; } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 6ee1a5dbbf..0c28bf54dc 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -8527,7 +8527,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Vector llGetGeometricCenter() { - return new LSL_Vector(m_host.GetGeometricCenter().X, m_host.GetGeometricCenter().Y, m_host.GetGeometricCenter().Z); + Vector3 tmp = m_host.GetGeometricCenter(); + return new LSL_Vector(tmp.X, tmp.Y, tmp.Z); } public LSL_List llGetPrimitiveParams(LSL_List rules)