diff options
author | dahlia | 2013-12-10 13:57:18 -0800 |
---|---|---|
committer | dahlia | 2013-12-10 13:57:18 -0800 |
commit | 08750501617ca332ab196b2f25030e3c635c9dd6 (patch) | |
tree | 8c3699ea86258fa2f96bfd50fa92ecca1c0248b8 | |
parent | Merge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff) | |
download | opensim-SC-08750501617ca332ab196b2f25030e3c635c9dd6.zip opensim-SC-08750501617ca332ab196b2f25030e3c635c9dd6.tar.gz opensim-SC-08750501617ca332ab196b2f25030e3c635c9dd6.tar.bz2 opensim-SC-08750501617ca332ab196b2f25030e3c635c9dd6.tar.xz |
Add console utility commands "scale scene" and "translate scene". Note that repeated use of these commands will induce floating point accumulation errors. Please back up your region before using.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Application/OpenSim.cs | 90 |
1 files changed, 88 insertions, 2 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index c2d9942..0a6ae98 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -297,10 +297,20 @@ namespace OpenSim | |||
297 | HandleEditScale); | 297 | HandleEditScale); |
298 | 298 | ||
299 | m_console.Commands.AddCommand("Objects", false, "rotate scene", | 299 | m_console.Commands.AddCommand("Objects", false, "rotate scene", |
300 | "rotate scene <degrees>", | 300 | "rotate scene <degrees> [centerX, centerY]", |
301 | "Rotates all scene objects around x:128, y:128", | 301 | "Rotates all scene objects around centerX, centerY (defailt 128, 128) (please back up your region before using)", |
302 | HandleRotateScene); | 302 | HandleRotateScene); |
303 | 303 | ||
304 | m_console.Commands.AddCommand("Objects", false, "scale scene", | ||
305 | "scale scene <factor>", | ||
306 | "Scales the scene objects (please back up your region before using)", | ||
307 | HandleScaleScene); | ||
308 | |||
309 | m_console.Commands.AddCommand("Objects", false, "translate scene", | ||
310 | "translate scene xOffset yOffset zOffset", | ||
311 | "translates the scene objects (please back up your region before using)", | ||
312 | HandleTranslateScene); | ||
313 | |||
304 | m_console.Commands.AddCommand("Users", false, "kick user", | 314 | m_console.Commands.AddCommand("Users", false, "kick user", |
305 | "kick user <first> <last> [--force] [message]", | 315 | "kick user <first> <last> [--force] [message]", |
306 | "Kick a user off the simulator", | 316 | "Kick a user off the simulator", |
@@ -549,6 +559,82 @@ namespace OpenSim | |||
549 | }); | 559 | }); |
550 | } | 560 | } |
551 | 561 | ||
562 | private void HandleScaleScene(string module, string[] args) | ||
563 | { | ||
564 | string usage = "Usage: scale scene <factor>"; | ||
565 | |||
566 | if (args.Length < 3) | ||
567 | { | ||
568 | MainConsole.Instance.Output(usage); | ||
569 | return; | ||
570 | } | ||
571 | |||
572 | float factor = (float)(Convert.ToSingle(args[2])); | ||
573 | |||
574 | float minZ = float.MaxValue; | ||
575 | |||
576 | SceneManager.ForEachSelectedScene(delegate(Scene scene) | ||
577 | { | ||
578 | scene.ForEachSOG(delegate(SceneObjectGroup sog) | ||
579 | { | ||
580 | if (sog.AttachmentPoint == 0) | ||
581 | { | ||
582 | if (sog.RootPart.AbsolutePosition.Z < minZ) | ||
583 | minZ = sog.RootPart.AbsolutePosition.Z; | ||
584 | } | ||
585 | }); | ||
586 | }); | ||
587 | |||
588 | SceneManager.ForEachSelectedScene(delegate(Scene scene) | ||
589 | { | ||
590 | scene.ForEachSOG(delegate(SceneObjectGroup sog) | ||
591 | { | ||
592 | if (sog.AttachmentPoint == 0) | ||
593 | { | ||
594 | Vector3 tmpRootPos = sog.RootPart.AbsolutePosition; | ||
595 | tmpRootPos.Z -= minZ; | ||
596 | tmpRootPos *= factor; | ||
597 | tmpRootPos.Z += minZ; | ||
598 | |||
599 | foreach (SceneObjectPart sop in sog.Parts) | ||
600 | { | ||
601 | if (sop.ParentID != 0) | ||
602 | sop.OffsetPosition *= factor; | ||
603 | sop.Scale *= factor; | ||
604 | } | ||
605 | |||
606 | sog.UpdateGroupPosition(tmpRootPos); | ||
607 | } | ||
608 | }); | ||
609 | }); | ||
610 | } | ||
611 | |||
612 | private void HandleTranslateScene(string module, string[] args) | ||
613 | { | ||
614 | string usage = "Usage: translate scene <xOffset, yOffset, zOffset>"; | ||
615 | |||
616 | if (args.Length < 5) | ||
617 | { | ||
618 | MainConsole.Instance.Output(usage); | ||
619 | return; | ||
620 | } | ||
621 | |||
622 | float xOFfset = (float)Convert.ToSingle(args[2]); | ||
623 | float yOffset = (float)Convert.ToSingle(args[3]); | ||
624 | float zOffset = (float)Convert.ToSingle(args[4]); | ||
625 | |||
626 | Vector3 offset = new Vector3(xOFfset, yOffset, zOffset); | ||
627 | |||
628 | SceneManager.ForEachSelectedScene(delegate(Scene scene) | ||
629 | { | ||
630 | scene.ForEachSOG(delegate(SceneObjectGroup sog) | ||
631 | { | ||
632 | if (sog.AttachmentPoint == 0) | ||
633 | sog.UpdateGroupPosition(sog.AbsolutePosition + offset); | ||
634 | }); | ||
635 | }); | ||
636 | } | ||
637 | |||
552 | /// <summary> | 638 | /// <summary> |
553 | /// Creates a new region based on the parameters specified. This will ask the user questions on the console | 639 | /// Creates a new region based on the parameters specified. This will ask the user questions on the console |
554 | /// </summary> | 640 | /// </summary> |