From e52a8d388fb1fe85b78b5b584cbb7d5444f464c0 Mon Sep 17 00:00:00 2001 From: dahlia Date: Tue, 26 Nov 2013 21:07:37 -0800 Subject: [PATCH] "rotate scene" command now uses Constants.RegionSize / 2 to pick the center of rotation and center can be optionally overridden in the command line --- OpenSim/Region/Application/OpenSim.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index beb546dcb5..c2d9942ba6 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -512,9 +512,12 @@ namespace OpenSim private void HandleRotateScene(string module, string[] args) { - string usage = "Usage: rotate scene "; + string usage = "Usage: rotate scene [centerX centerY] (centerX and centerY are optional and default to Constants.RegionSize / 2"; - if (args.Length != 3) + float centerX = Constants.RegionSize * 0.5f; + float centerY = Constants.RegionSize * 0.5f; + + if (args.Length < 3 || args.Length == 4) { MainConsole.Instance.Output(usage); return; @@ -523,6 +526,14 @@ namespace OpenSim float angle = (float)(Convert.ToSingle(args[2]) / 180.0 * Math.PI); OpenMetaverse.Quaternion rot = OpenMetaverse.Quaternion.CreateFromAxisAngle(0, 0, 1, angle); + if (args.Length > 4) + { + centerX = Convert.ToSingle(args[3]); + centerY = Convert.ToSingle(args[4]); + } + + Vector3 center = new Vector3(centerX, centerY, 0.0f); + SceneManager.ForEachSelectedScene(delegate(Scene scene) { scene.ForEachSOG(delegate(SceneObjectGroup sog) @@ -530,9 +541,9 @@ namespace OpenSim if (sog.AttachmentPoint == 0) { sog.RootPart.UpdateRotation(rot * sog.GroupRotation); - Vector3 offset = sog.AbsolutePosition - new Vector3(128.0f, 128.0f, 0.0f); + Vector3 offset = sog.AbsolutePosition - center; offset *= rot; - sog.UpdateGroupPosition(new Vector3(128.0f, 128.0f, 0.0f) + offset); + sog.UpdateGroupPosition(center + offset); } }); });