aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs70
1 files changed, 67 insertions, 3 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index e987445..00ae504 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -625,6 +625,8 @@ namespace OpenSim.Region.Framework.Scenes
625 Vector3 backBottomLeft; 625 Vector3 backBottomLeft;
626 Vector3 backBottomRight; 626 Vector3 backBottomRight;
627 627
628 // Vector3[] corners = new Vector3[8];
629
628 Vector3 orig = Vector3.Zero; 630 Vector3 orig = Vector3.Zero;
629 631
630 frontTopLeft.X = orig.X - (part.Scale.X / 2); 632 frontTopLeft.X = orig.X - (part.Scale.X / 2);
@@ -660,6 +662,36 @@ namespace OpenSim.Region.Framework.Scenes
660 backBottomRight.Y = orig.Y + (part.Scale.Y / 2); 662 backBottomRight.Y = orig.Y + (part.Scale.Y / 2);
661 backBottomRight.Z = orig.Z - (part.Scale.Z / 2); 663 backBottomRight.Z = orig.Z - (part.Scale.Z / 2);
662 664
665 //m_log.InfoFormat("pre corner 1 is {0} {1} {2}", frontTopLeft.X, frontTopLeft.Y, frontTopLeft.Z);
666 //m_log.InfoFormat("pre corner 2 is {0} {1} {2}", frontTopRight.X, frontTopRight.Y, frontTopRight.Z);
667 //m_log.InfoFormat("pre corner 3 is {0} {1} {2}", frontBottomRight.X, frontBottomRight.Y, frontBottomRight.Z);
668 //m_log.InfoFormat("pre corner 4 is {0} {1} {2}", frontBottomLeft.X, frontBottomLeft.Y, frontBottomLeft.Z);
669 //m_log.InfoFormat("pre corner 5 is {0} {1} {2}", backTopLeft.X, backTopLeft.Y, backTopLeft.Z);
670 //m_log.InfoFormat("pre corner 6 is {0} {1} {2}", backTopRight.X, backTopRight.Y, backTopRight.Z);
671 //m_log.InfoFormat("pre corner 7 is {0} {1} {2}", backBottomRight.X, backBottomRight.Y, backBottomRight.Z);
672 //m_log.InfoFormat("pre corner 8 is {0} {1} {2}", backBottomLeft.X, backBottomLeft.Y, backBottomLeft.Z);
673
674 //for (int i = 0; i < 8; i++)
675 //{
676 // corners[i] = corners[i] * worldRot;
677 // corners[i] += offset;
678
679 // if (corners[i].X > maxX)
680 // maxX = corners[i].X;
681 // if (corners[i].X < minX)
682 // minX = corners[i].X;
683
684 // if (corners[i].Y > maxY)
685 // maxY = corners[i].Y;
686 // if (corners[i].Y < minY)
687 // minY = corners[i].Y;
688
689 // if (corners[i].Z > maxZ)
690 // maxZ = corners[i].Y;
691 // if (corners[i].Z < minZ)
692 // minZ = corners[i].Z;
693 //}
694
663 frontTopLeft = frontTopLeft * worldRot; 695 frontTopLeft = frontTopLeft * worldRot;
664 frontTopRight = frontTopRight * worldRot; 696 frontTopRight = frontTopRight * worldRot;
665 frontBottomLeft = frontBottomLeft * worldRot; 697 frontBottomLeft = frontBottomLeft * worldRot;
@@ -681,6 +713,15 @@ namespace OpenSim.Region.Framework.Scenes
681 backTopLeft += offset; 713 backTopLeft += offset;
682 backTopRight += offset; 714 backTopRight += offset;
683 715
716 //m_log.InfoFormat("corner 1 is {0} {1} {2}", frontTopLeft.X, frontTopLeft.Y, frontTopLeft.Z);
717 //m_log.InfoFormat("corner 2 is {0} {1} {2}", frontTopRight.X, frontTopRight.Y, frontTopRight.Z);
718 //m_log.InfoFormat("corner 3 is {0} {1} {2}", frontBottomRight.X, frontBottomRight.Y, frontBottomRight.Z);
719 //m_log.InfoFormat("corner 4 is {0} {1} {2}", frontBottomLeft.X, frontBottomLeft.Y, frontBottomLeft.Z);
720 //m_log.InfoFormat("corner 5 is {0} {1} {2}", backTopLeft.X, backTopLeft.Y, backTopLeft.Z);
721 //m_log.InfoFormat("corner 6 is {0} {1} {2}", backTopRight.X, backTopRight.Y, backTopRight.Z);
722 //m_log.InfoFormat("corner 7 is {0} {1} {2}", backBottomRight.X, backBottomRight.Y, backBottomRight.Z);
723 //m_log.InfoFormat("corner 8 is {0} {1} {2}", backBottomLeft.X, backBottomLeft.Y, backBottomLeft.Z);
724
684 if (frontTopRight.X > maxX) 725 if (frontTopRight.X > maxX)
685 maxX = frontTopRight.X; 726 maxX = frontTopRight.X;
686 if (frontTopLeft.X > maxX) 727 if (frontTopLeft.X > maxX)
@@ -801,15 +842,15 @@ namespace OpenSim.Region.Framework.Scenes
801 if (lower > maxZ) 842 if (lower > maxZ)
802 { 843 {
803 offsetHeight = lower - (boundingBox.Z / 2); 844 offsetHeight = lower - (boundingBox.Z / 2);
804 845
805 } 846 }
806 else if (maxZ > lower) 847 else if (maxZ > lower)
807 { 848 {
808 offsetHeight = maxZ - (boundingBox.Z / 2); 849 offsetHeight = maxZ - (boundingBox.Z / 2);
809 offsetHeight *= -1; 850 offsetHeight *= -1;
810 } 851 }
811 852
812 // m_log.InfoFormat("BoundingBox is {0} , {1} , {2} ", boundingBox.X, boundingBox.Y, boundingBox.Z); 853 // m_log.InfoFormat("BoundingBox is {0} , {1} , {2} ", boundingBox.X, boundingBox.Y, boundingBox.Z);
813 return boundingBox; 854 return boundingBox;
814 } 855 }
815 #endregion 856 #endregion
@@ -3017,6 +3058,29 @@ namespace OpenSim.Region.Framework.Scenes
3017 /// 3058 ///
3018 /// </summary> 3059 /// </summary>
3019 /// <param name="rot"></param> 3060 /// <param name="rot"></param>
3061 /// <param name="localID"></param>
3062 public void UpdateSingleRotation(Quaternion rot, Vector3 pos, uint localID)
3063 {
3064 SceneObjectPart part = GetChildPart(localID);
3065 if (part != null)
3066 {
3067 if (part.UUID == m_rootPart.UUID)
3068 {
3069 UpdateRootRotation(rot);
3070 AbsolutePosition = pos;
3071 }
3072 else
3073 {
3074 part.UpdateRotation(rot);
3075 part.OffsetPosition = pos;
3076 }
3077 }
3078 }
3079
3080 /// <summary>
3081 ///
3082 /// </summary>
3083 /// <param name="rot"></param>
3020 private void UpdateRootRotation(Quaternion rot) 3084 private void UpdateRootRotation(Quaternion rot)
3021 { 3085 {
3022 Quaternion axRot = rot; 3086 Quaternion axRot = rot;