From 97f1edfd95176415d0e0b3169467655522334804 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 19 Jul 2011 04:15:27 +0100 Subject: Fix undo of prim group rotation. This isn't that great since I think I broke it a few commits earlier. Undo of rotation of individual prims in a linkset is still broken --- .../Region/Framework/Scenes/SceneObjectGroup.cs | 19 ++++++++---- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 4 +-- OpenSim/Region/Framework/Scenes/UndoState.cs | 35 ++++++++++++---------- 3 files changed, 34 insertions(+), 24 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 3adeef1..aa1f7bc 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -2895,9 +2895,11 @@ namespace OpenSim.Region.Framework.Scenes // m_log.DebugFormat( // "[SCENE OBJECT GROUP]: Updating group rotation R of {0} {1} to {2}", Name, LocalId, rot); - SceneObjectPart[] parts = m_parts.GetArray(); - for (int i = 0; i < parts.Length; i++) - parts[i].StoreUndoState(); +// SceneObjectPart[] parts = m_parts.GetArray(); +// for (int i = 0; i < parts.Length; i++) +// parts[i].StoreUndoState(); + + m_rootPart.StoreUndoState(true); m_rootPart.UpdateRotation(rot); @@ -2922,9 +2924,12 @@ namespace OpenSim.Region.Framework.Scenes // m_log.DebugFormat( // "[SCENE OBJECT GROUP]: Updating group rotation PR of {0} {1} to {2}", Name, LocalId, rot); - SceneObjectPart[] parts = m_parts.GetArray(); - for (int i = 0; i < parts.Length; i++) - parts[i].StoreUndoState(); +// SceneObjectPart[] parts = m_parts.GetArray(); +// for (int i = 0; i < parts.Length; i++) +// parts[i].StoreUndoState(); + + RootPart.StoreUndoState(true); + RootPart.IgnoreUndoUpdate = true; m_rootPart.UpdateRotation(rot); @@ -2939,6 +2944,8 @@ namespace OpenSim.Region.Framework.Scenes HasGroupChanged = true; ScheduleGroupForTerseUpdate(); + + RootPart.IgnoreUndoUpdate = false; } /// diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index af836f6..c3aca15 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -3706,8 +3706,8 @@ namespace OpenSim.Region.Framework.Scenes m_undo.Push(nUndo); m_log.DebugFormat( - "[SCENE OBJECT PART]: Stored undo state for {0} {1}, stack size now {2}", - Name, LocalId, m_undo.Count); + "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}", + Name, LocalId, forGroup, m_undo.Count); } } } diff --git a/OpenSim/Region/Framework/Scenes/UndoState.cs b/OpenSim/Region/Framework/Scenes/UndoState.cs index faa1f9e..6f6504c 100644 --- a/OpenSim/Region/Framework/Scenes/UndoState.cs +++ b/OpenSim/Region/Framework/Scenes/UndoState.cs @@ -35,7 +35,7 @@ namespace OpenSim.Region.Framework.Scenes { public class UndoState { -// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public Vector3 Position = Vector3.Zero; public Vector3 Scale = Vector3.Zero; @@ -57,23 +57,25 @@ namespace OpenSim.Region.Framework.Scenes { if (part.ParentID == 0) { -// m_log.DebugFormat( -// "[UNDO STATE]: Storing undo position {0} for root part", part.ParentGroup.AbsolutePosition); + ForGroup = forGroup; if (ForGroup) Position = part.ParentGroup.AbsolutePosition; else Position = part.OffsetPosition; -// m_log.DebugFormat( -// "[UNDO STATE]: Storing undo rotation {0} for root part", part.RotationOffset); + m_log.DebugFormat( + "[UNDO STATE]: Storing undo position {0} for root part", Position); + Rotation = part.RotationOffset; -// m_log.DebugFormat( -// "[UNDO STATE]: Storing undo scale {0} for root part", part.Shape.Scale); + m_log.DebugFormat( + "[UNDO STATE]: Storing undo rotation {0} for root part", Rotation); + Scale = part.Shape.Scale; - ForGroup = forGroup; + m_log.DebugFormat( + "[UNDO STATE]: Storing undo scale {0} for root part", Scale); } else { @@ -132,23 +134,24 @@ namespace OpenSim.Region.Framework.Scenes if (part.ParentID == 0) { + m_log.DebugFormat( + "[UNDO STATE]: Undoing position to {0} for root part {1} {2}", + Position, part.Name, part.LocalId); + if (Position != Vector3.Zero) { -// m_log.DebugFormat( -// "[UNDO STATE]: Undoing position {0} to {1} for root part {2} {3}", -// part.ParentGroup.AbsolutePosition, Position, part.Name, part.LocalId); - if (ForGroup) part.ParentGroup.AbsolutePosition = Position; else part.OffsetPosition = Position; } -// m_log.DebugFormat( -// "[UNDO STATE]: Undoing rotation {0} to {1} for root part {2} {3}", -// part.RotationOffset, Rotation, part.Name, part.LocalId); + m_log.DebugFormat( + "[UNDO STATE]: Undoing rotation {0} to {1} for root part {2} {3}", + part.RotationOffset, Rotation, part.Name, part.LocalId); - part.RotationOffset = Rotation; + part.UpdateRotation(Rotation); + //part.RotationOffset = Rotation; if (Scale != Vector3.Zero) { -- cgit v1.1