diff options
Diffstat (limited to 'OpenSim/Region/Application')
-rw-r--r-- | OpenSim/Region/Application/OpenSim.cs | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index beb546d..c2d9942 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -512,9 +512,12 @@ namespace OpenSim | |||
512 | 512 | ||
513 | private void HandleRotateScene(string module, string[] args) | 513 | private void HandleRotateScene(string module, string[] args) |
514 | { | 514 | { |
515 | string usage = "Usage: rotate scene <angle in degrees>"; | 515 | string usage = "Usage: rotate scene <angle in degrees> [centerX centerY] (centerX and centerY are optional and default to Constants.RegionSize / 2"; |
516 | 516 | ||
517 | if (args.Length != 3) | 517 | float centerX = Constants.RegionSize * 0.5f; |
518 | float centerY = Constants.RegionSize * 0.5f; | ||
519 | |||
520 | if (args.Length < 3 || args.Length == 4) | ||
518 | { | 521 | { |
519 | MainConsole.Instance.Output(usage); | 522 | MainConsole.Instance.Output(usage); |
520 | return; | 523 | return; |
@@ -523,6 +526,14 @@ namespace OpenSim | |||
523 | float angle = (float)(Convert.ToSingle(args[2]) / 180.0 * Math.PI); | 526 | float angle = (float)(Convert.ToSingle(args[2]) / 180.0 * Math.PI); |
524 | OpenMetaverse.Quaternion rot = OpenMetaverse.Quaternion.CreateFromAxisAngle(0, 0, 1, angle); | 527 | OpenMetaverse.Quaternion rot = OpenMetaverse.Quaternion.CreateFromAxisAngle(0, 0, 1, angle); |
525 | 528 | ||
529 | if (args.Length > 4) | ||
530 | { | ||
531 | centerX = Convert.ToSingle(args[3]); | ||
532 | centerY = Convert.ToSingle(args[4]); | ||
533 | } | ||
534 | |||
535 | Vector3 center = new Vector3(centerX, centerY, 0.0f); | ||
536 | |||
526 | SceneManager.ForEachSelectedScene(delegate(Scene scene) | 537 | SceneManager.ForEachSelectedScene(delegate(Scene scene) |
527 | { | 538 | { |
528 | scene.ForEachSOG(delegate(SceneObjectGroup sog) | 539 | scene.ForEachSOG(delegate(SceneObjectGroup sog) |
@@ -530,9 +541,9 @@ namespace OpenSim | |||
530 | if (sog.AttachmentPoint == 0) | 541 | if (sog.AttachmentPoint == 0) |
531 | { | 542 | { |
532 | sog.RootPart.UpdateRotation(rot * sog.GroupRotation); | 543 | sog.RootPart.UpdateRotation(rot * sog.GroupRotation); |
533 | Vector3 offset = sog.AbsolutePosition - new Vector3(128.0f, 128.0f, 0.0f); | 544 | Vector3 offset = sog.AbsolutePosition - center; |
534 | offset *= rot; | 545 | offset *= rot; |
535 | sog.UpdateGroupPosition(new Vector3(128.0f, 128.0f, 0.0f) + offset); | 546 | sog.UpdateGroupPosition(center + offset); |
536 | } | 547 | } |
537 | }); | 548 | }); |
538 | }); | 549 | }); |