aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-09-26 23:17:21 +0100
committerMelanie2012-09-27 15:48:47 +0100
commit9eca154bced7423867e8f9597b8baf214de79087 (patch)
treeffbb038aebe837ee5ec560a607eb55891cdb3ca5 /OpenSim
parentMerge commit '327320d1a7acbba969d26c281f92f64ce8ff365f' into careminster (diff)
downloadopensim-SC-9eca154bced7423867e8f9597b8baf214de79087.zip
opensim-SC-9eca154bced7423867e8f9597b8baf214de79087.tar.gz
opensim-SC-9eca154bced7423867e8f9597b8baf214de79087.tar.bz2
opensim-SC-9eca154bced7423867e8f9597b8baf214de79087.tar.xz
Make it possible to rescale SOGs when they are not in a scene.
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs53
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs20
2 files changed, 42 insertions, 31 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index f1df6d6..ddcc956 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -3483,27 +3483,35 @@ namespace OpenSim.Region.Framework.Scenes
3483 /// <param name="scale"></param> 3483 /// <param name="scale"></param>
3484 public void GroupResize(Vector3 scale) 3484 public void GroupResize(Vector3 scale)
3485 { 3485 {
3486 scale.X = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.X)); 3486// m_log.DebugFormat(
3487 scale.Y = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Y)); 3487// "[SCENE OBJECT GROUP]: Group resizing {0} {1} from {2} to {3}", Name, LocalId, RootPart.Scale, scale);
3488 scale.Z = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Z));
3489 3488
3490 PhysicsActor pa = m_rootPart.PhysActor; 3489 PhysicsActor pa = m_rootPart.PhysActor;
3491 3490
3492 if (pa != null && pa.IsPhysical) 3491 RootPart.StoreUndoState(true);
3492
3493 if (Scene != null)
3493 { 3494 {
3494 scale.X = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.X)); 3495 scale.X = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.X));
3495 scale.Y = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Y)); 3496 scale.Y = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Y));
3496 scale.Z = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Z)); 3497 scale.Z = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Z));
3498
3499 if (pa != null && pa.IsPhysical)
3500 {
3501 scale.X = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.X));
3502 scale.Y = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Y));
3503 scale.Z = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Z));
3504 }
3497 } 3505 }
3498 3506
3499 float x = (scale.X / RootPart.Scale.X); 3507 float x = (scale.X / RootPart.Scale.X);
3500 float y = (scale.Y / RootPart.Scale.Y); 3508 float y = (scale.Y / RootPart.Scale.Y);
3501 float z = (scale.Z / RootPart.Scale.Z); 3509 float z = (scale.Z / RootPart.Scale.Z);
3502 3510
3503 SceneObjectPart[] parts; 3511 SceneObjectPart[] parts = m_parts.GetArray();
3504 if (x > 1.0f || y > 1.0f || z > 1.0f) 3512
3513 if (Scene != null & (x > 1.0f || y > 1.0f || z > 1.0f))
3505 { 3514 {
3506 parts = m_parts.GetArray();
3507 for (int i = 0; i < parts.Length; i++) 3515 for (int i = 0; i < parts.Length; i++)
3508 { 3516 {
3509 SceneObjectPart obPart = parts[i]; 3517 SceneObjectPart obPart = parts[i];
@@ -3516,7 +3524,7 @@ namespace OpenSim.Region.Framework.Scenes
3516 3524
3517 if (pa != null && pa.IsPhysical) 3525 if (pa != null && pa.IsPhysical)
3518 { 3526 {
3519 if (oldSize.X * x > m_scene.m_maxPhys) 3527 if (oldSize.X * x > Scene.m_maxPhys)
3520 { 3528 {
3521 f = m_scene.m_maxPhys / oldSize.X; 3529 f = m_scene.m_maxPhys / oldSize.X;
3522 a = f / x; 3530 a = f / x;
@@ -3524,7 +3532,7 @@ namespace OpenSim.Region.Framework.Scenes
3524 y *= a; 3532 y *= a;
3525 z *= a; 3533 z *= a;
3526 } 3534 }
3527 else if (oldSize.X * x < m_scene.m_minPhys) 3535 else if (oldSize.X * x < Scene.m_minPhys)
3528 { 3536 {
3529 f = m_scene.m_minPhys / oldSize.X; 3537 f = m_scene.m_minPhys / oldSize.X;
3530 a = f / x; 3538 a = f / x;
@@ -3533,7 +3541,7 @@ namespace OpenSim.Region.Framework.Scenes
3533 z *= a; 3541 z *= a;
3534 } 3542 }
3535 3543
3536 if (oldSize.Y * y > m_scene.m_maxPhys) 3544 if (oldSize.Y * y > Scene.m_maxPhys)
3537 { 3545 {
3538 f = m_scene.m_maxPhys / oldSize.Y; 3546 f = m_scene.m_maxPhys / oldSize.Y;
3539 a = f / y; 3547 a = f / y;
@@ -3541,7 +3549,7 @@ namespace OpenSim.Region.Framework.Scenes
3541 y *= a; 3549 y *= a;
3542 z *= a; 3550 z *= a;
3543 } 3551 }
3544 else if (oldSize.Y * y < m_scene.m_minPhys) 3552 else if (oldSize.Y * y < Scene.m_minPhys)
3545 { 3553 {
3546 f = m_scene.m_minPhys / oldSize.Y; 3554 f = m_scene.m_minPhys / oldSize.Y;
3547 a = f / y; 3555 a = f / y;
@@ -3550,7 +3558,7 @@ namespace OpenSim.Region.Framework.Scenes
3550 z *= a; 3558 z *= a;
3551 } 3559 }
3552 3560
3553 if (oldSize.Z * z > m_scene.m_maxPhys) 3561 if (oldSize.Z * z > Scene.m_maxPhys)
3554 { 3562 {
3555 f = m_scene.m_maxPhys / oldSize.Z; 3563 f = m_scene.m_maxPhys / oldSize.Z;
3556 a = f / z; 3564 a = f / z;
@@ -3558,7 +3566,7 @@ namespace OpenSim.Region.Framework.Scenes
3558 y *= a; 3566 y *= a;
3559 z *= a; 3567 z *= a;
3560 } 3568 }
3561 else if (oldSize.Z * z < m_scene.m_minPhys) 3569 else if (oldSize.Z * z < Scene.m_minPhys)
3562 { 3570 {
3563 f = m_scene.m_minPhys / oldSize.Z; 3571 f = m_scene.m_minPhys / oldSize.Z;
3564 a = f / z; 3572 a = f / z;
@@ -3569,7 +3577,7 @@ namespace OpenSim.Region.Framework.Scenes
3569 } 3577 }
3570 else 3578 else
3571 { 3579 {
3572 if (oldSize.X * x > m_scene.m_maxNonphys) 3580 if (oldSize.X * x > Scene.m_maxNonphys)
3573 { 3581 {
3574 f = m_scene.m_maxNonphys / oldSize.X; 3582 f = m_scene.m_maxNonphys / oldSize.X;
3575 a = f / x; 3583 a = f / x;
@@ -3577,7 +3585,7 @@ namespace OpenSim.Region.Framework.Scenes
3577 y *= a; 3585 y *= a;
3578 z *= a; 3586 z *= a;
3579 } 3587 }
3580 else if (oldSize.X * x < m_scene.m_minNonphys) 3588 else if (oldSize.X * x < Scene.m_minNonphys)
3581 { 3589 {
3582 f = m_scene.m_minNonphys / oldSize.X; 3590 f = m_scene.m_minNonphys / oldSize.X;
3583 a = f / x; 3591 a = f / x;
@@ -3586,7 +3594,7 @@ namespace OpenSim.Region.Framework.Scenes
3586 z *= a; 3594 z *= a;
3587 } 3595 }
3588 3596
3589 if (oldSize.Y * y > m_scene.m_maxNonphys) 3597 if (oldSize.Y * y > Scene.m_maxNonphys)
3590 { 3598 {
3591 f = m_scene.m_maxNonphys / oldSize.Y; 3599 f = m_scene.m_maxNonphys / oldSize.Y;
3592 a = f / y; 3600 a = f / y;
@@ -3594,7 +3602,7 @@ namespace OpenSim.Region.Framework.Scenes
3594 y *= a; 3602 y *= a;
3595 z *= a; 3603 z *= a;
3596 } 3604 }
3597 else if (oldSize.Y * y < m_scene.m_minNonphys) 3605 else if (oldSize.Y * y < Scene.m_minNonphys)
3598 { 3606 {
3599 f = m_scene.m_minNonphys / oldSize.Y; 3607 f = m_scene.m_minNonphys / oldSize.Y;
3600 a = f / y; 3608 a = f / y;
@@ -3603,7 +3611,7 @@ namespace OpenSim.Region.Framework.Scenes
3603 z *= a; 3611 z *= a;
3604 } 3612 }
3605 3613
3606 if (oldSize.Z * z > m_scene.m_maxNonphys) 3614 if (oldSize.Z * z > Scene.m_maxNonphys)
3607 { 3615 {
3608 f = m_scene.m_maxNonphys / oldSize.Z; 3616 f = m_scene.m_maxNonphys / oldSize.Z;
3609 a = f / z; 3617 a = f / z;
@@ -3611,7 +3619,7 @@ namespace OpenSim.Region.Framework.Scenes
3611 y *= a; 3619 y *= a;
3612 z *= a; 3620 z *= a;
3613 } 3621 }
3614 else if (oldSize.Z * z < m_scene.m_minNonphys) 3622 else if (oldSize.Z * z < Scene.m_minNonphys)
3615 { 3623 {
3616 f = m_scene.m_minNonphys / oldSize.Z; 3624 f = m_scene.m_minNonphys / oldSize.Z;
3617 a = f / z; 3625 a = f / z;
@@ -3631,7 +3639,6 @@ namespace OpenSim.Region.Framework.Scenes
3631 3639
3632 RootPart.Resize(prevScale); 3640 RootPart.Resize(prevScale);
3633 3641
3634 parts = m_parts.GetArray();
3635 for (int i = 0; i < parts.Length; i++) 3642 for (int i = 0; i < parts.Length; i++)
3636 { 3643 {
3637 SceneObjectPart obPart = parts[i]; 3644 SceneObjectPart obPart = parts[i];
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 4af508e..44573eb 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -2972,16 +2972,20 @@ namespace OpenSim.Region.Framework.Scenes
2972 /// <param name="scale"></param> 2972 /// <param name="scale"></param>
2973 public void Resize(Vector3 scale) 2973 public void Resize(Vector3 scale)
2974 { 2974 {
2975 scale.X = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.X));
2976 scale.Y = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Y));
2977 scale.Z = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Z));
2978
2979 PhysicsActor pa = PhysActor; 2975 PhysicsActor pa = PhysActor;
2980 if (pa != null && pa.IsPhysical) 2976
2977 if (ParentGroup.Scene != null)
2981 { 2978 {
2982 scale.X = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.X)); 2979 scale.X = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.X));
2983 scale.Y = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Y)); 2980 scale.Y = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Y));
2984 scale.Z = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Z)); 2981 scale.Z = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Z));
2982
2983 if (pa != null && pa.IsPhysical)
2984 {
2985 scale.X = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.X));
2986 scale.Y = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Y));
2987 scale.Z = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Z));
2988 }
2985 } 2989 }
2986 2990
2987// m_log.DebugFormat("[SCENE OBJECT PART]: Resizing {0} {1} to {2}", Name, LocalId, scale); 2991// m_log.DebugFormat("[SCENE OBJECT PART]: Resizing {0} {1} to {2}", Name, LocalId, scale);