From 9011ca8461894f12effba97047718c0801ee7948 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 6 Jun 2017 20:38:17 +0100 Subject: [PATCH] set optional group position and rotation before attach to scene --- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 10 +++++----- .../Region/Framework/Scenes/SceneObjectPart.cs | 15 +-------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 117d92d1d1..96b8c8b221 100755 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -388,19 +388,19 @@ namespace OpenSim.Region.Framework.Scenes public bool AddNewSceneObject( SceneObjectGroup sceneObject, bool attachToBackup, Vector3? pos, Quaternion? rot, Vector3 vel) { - AddNewSceneObject(sceneObject, attachToBackup, false); - if (pos != null) sceneObject.AbsolutePosition = (Vector3)pos; + if (rot != null) + sceneObject.UpdateGroupRotationR((Quaternion)rot); + + AddNewSceneObject(sceneObject, attachToBackup, false); + if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) { sceneObject.ClearPartAttachmentData(); } - if (rot != null) - sceneObject.UpdateGroupRotationR((Quaternion)rot); - PhysicsActor pa = sceneObject.RootPart.PhysActor; if (pa != null && pa.IsPhysical && vel != Vector3.Zero) { diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index d980fe517e..61aa91555b 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -941,20 +941,7 @@ namespace OpenSim.Region.Framework.Scenes // If this is a root of a linkset, the real rotation is what the physics engine thinks. // If not a root prim, the offset rotation is computed by SOG and is relative to the root. if (ParentID == 0 && (Shape.PCode != 9 || Shape.State == 0) && actor != null) - { - if (actor.Orientation.X != 0f || actor.Orientation.Y != 0f - || actor.Orientation.Z != 0f || actor.Orientation.W != 0f) - { - m_rotationOffset = actor.Orientation; - } - } - -// float roll, pitch, yaw = 0; -// m_rotationOffset.GetEulerAngles(out roll, out pitch, out yaw); -// -// m_log.DebugFormat( -// "[SCENE OBJECT PART]: Got euler {0} for RotationOffset on {1} {2}", -// new Vector3(roll, pitch, yaw), Name, LocalId); + m_rotationOffset = actor.Orientation; return m_rotationOffset; }