Make it possible to rescale SOGs when they are not in a scene.
parent
33bbb107c1
commit
9eca154bce
|
@ -3483,27 +3483,35 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="scale"></param>
|
/// <param name="scale"></param>
|
||||||
public void GroupResize(Vector3 scale)
|
public void GroupResize(Vector3 scale)
|
||||||
{
|
{
|
||||||
scale.X = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.X));
|
// m_log.DebugFormat(
|
||||||
scale.Y = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Y));
|
// "[SCENE OBJECT GROUP]: Group resizing {0} {1} from {2} to {3}", Name, LocalId, RootPart.Scale, scale);
|
||||||
scale.Z = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Z));
|
|
||||||
|
|
||||||
PhysicsActor pa = m_rootPart.PhysActor;
|
PhysicsActor pa = m_rootPart.PhysActor;
|
||||||
|
|
||||||
if (pa != null && pa.IsPhysical)
|
RootPart.StoreUndoState(true);
|
||||||
|
|
||||||
|
if (Scene != null)
|
||||||
{
|
{
|
||||||
scale.X = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.X));
|
scale.X = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.X));
|
||||||
scale.Y = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Y));
|
scale.Y = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Y));
|
||||||
scale.Z = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Z));
|
scale.Z = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Z));
|
||||||
|
|
||||||
|
if (pa != null && pa.IsPhysical)
|
||||||
|
{
|
||||||
|
scale.X = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.X));
|
||||||
|
scale.Y = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Y));
|
||||||
|
scale.Z = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Z));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float x = (scale.X / RootPart.Scale.X);
|
float x = (scale.X / RootPart.Scale.X);
|
||||||
float y = (scale.Y / RootPart.Scale.Y);
|
float y = (scale.Y / RootPart.Scale.Y);
|
||||||
float z = (scale.Z / RootPart.Scale.Z);
|
float z = (scale.Z / RootPart.Scale.Z);
|
||||||
|
|
||||||
SceneObjectPart[] parts;
|
SceneObjectPart[] parts = m_parts.GetArray();
|
||||||
if (x > 1.0f || y > 1.0f || z > 1.0f)
|
|
||||||
|
if (Scene != null & (x > 1.0f || y > 1.0f || z > 1.0f))
|
||||||
{
|
{
|
||||||
parts = m_parts.GetArray();
|
|
||||||
for (int i = 0; i < parts.Length; i++)
|
for (int i = 0; i < parts.Length; i++)
|
||||||
{
|
{
|
||||||
SceneObjectPart obPart = parts[i];
|
SceneObjectPart obPart = parts[i];
|
||||||
|
@ -3516,7 +3524,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (pa != null && pa.IsPhysical)
|
if (pa != null && pa.IsPhysical)
|
||||||
{
|
{
|
||||||
if (oldSize.X * x > m_scene.m_maxPhys)
|
if (oldSize.X * x > Scene.m_maxPhys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_maxPhys / oldSize.X;
|
f = m_scene.m_maxPhys / oldSize.X;
|
||||||
a = f / x;
|
a = f / x;
|
||||||
|
@ -3524,7 +3532,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
y *= a;
|
y *= a;
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
else if (oldSize.X * x < m_scene.m_minPhys)
|
else if (oldSize.X * x < Scene.m_minPhys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_minPhys / oldSize.X;
|
f = m_scene.m_minPhys / oldSize.X;
|
||||||
a = f / x;
|
a = f / x;
|
||||||
|
@ -3533,7 +3541,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldSize.Y * y > m_scene.m_maxPhys)
|
if (oldSize.Y * y > Scene.m_maxPhys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_maxPhys / oldSize.Y;
|
f = m_scene.m_maxPhys / oldSize.Y;
|
||||||
a = f / y;
|
a = f / y;
|
||||||
|
@ -3541,7 +3549,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
y *= a;
|
y *= a;
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
else if (oldSize.Y * y < m_scene.m_minPhys)
|
else if (oldSize.Y * y < Scene.m_minPhys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_minPhys / oldSize.Y;
|
f = m_scene.m_minPhys / oldSize.Y;
|
||||||
a = f / y;
|
a = f / y;
|
||||||
|
@ -3550,7 +3558,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldSize.Z * z > m_scene.m_maxPhys)
|
if (oldSize.Z * z > Scene.m_maxPhys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_maxPhys / oldSize.Z;
|
f = m_scene.m_maxPhys / oldSize.Z;
|
||||||
a = f / z;
|
a = f / z;
|
||||||
|
@ -3558,7 +3566,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
y *= a;
|
y *= a;
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
else if (oldSize.Z * z < m_scene.m_minPhys)
|
else if (oldSize.Z * z < Scene.m_minPhys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_minPhys / oldSize.Z;
|
f = m_scene.m_minPhys / oldSize.Z;
|
||||||
a = f / z;
|
a = f / z;
|
||||||
|
@ -3569,7 +3577,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (oldSize.X * x > m_scene.m_maxNonphys)
|
if (oldSize.X * x > Scene.m_maxNonphys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_maxNonphys / oldSize.X;
|
f = m_scene.m_maxNonphys / oldSize.X;
|
||||||
a = f / x;
|
a = f / x;
|
||||||
|
@ -3577,7 +3585,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
y *= a;
|
y *= a;
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
else if (oldSize.X * x < m_scene.m_minNonphys)
|
else if (oldSize.X * x < Scene.m_minNonphys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_minNonphys / oldSize.X;
|
f = m_scene.m_minNonphys / oldSize.X;
|
||||||
a = f / x;
|
a = f / x;
|
||||||
|
@ -3586,7 +3594,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldSize.Y * y > m_scene.m_maxNonphys)
|
if (oldSize.Y * y > Scene.m_maxNonphys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_maxNonphys / oldSize.Y;
|
f = m_scene.m_maxNonphys / oldSize.Y;
|
||||||
a = f / y;
|
a = f / y;
|
||||||
|
@ -3594,7 +3602,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
y *= a;
|
y *= a;
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
else if (oldSize.Y * y < m_scene.m_minNonphys)
|
else if (oldSize.Y * y < Scene.m_minNonphys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_minNonphys / oldSize.Y;
|
f = m_scene.m_minNonphys / oldSize.Y;
|
||||||
a = f / y;
|
a = f / y;
|
||||||
|
@ -3603,7 +3611,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldSize.Z * z > m_scene.m_maxNonphys)
|
if (oldSize.Z * z > Scene.m_maxNonphys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_maxNonphys / oldSize.Z;
|
f = m_scene.m_maxNonphys / oldSize.Z;
|
||||||
a = f / z;
|
a = f / z;
|
||||||
|
@ -3611,7 +3619,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
y *= a;
|
y *= a;
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
else if (oldSize.Z * z < m_scene.m_minNonphys)
|
else if (oldSize.Z * z < Scene.m_minNonphys)
|
||||||
{
|
{
|
||||||
f = m_scene.m_minNonphys / oldSize.Z;
|
f = m_scene.m_minNonphys / oldSize.Z;
|
||||||
a = f / z;
|
a = f / z;
|
||||||
|
@ -3631,7 +3639,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
RootPart.Resize(prevScale);
|
RootPart.Resize(prevScale);
|
||||||
|
|
||||||
parts = m_parts.GetArray();
|
|
||||||
for (int i = 0; i < parts.Length; i++)
|
for (int i = 0; i < parts.Length; i++)
|
||||||
{
|
{
|
||||||
SceneObjectPart obPart = parts[i];
|
SceneObjectPart obPart = parts[i];
|
||||||
|
|
|
@ -2972,16 +2972,20 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="scale"></param>
|
/// <param name="scale"></param>
|
||||||
public void Resize(Vector3 scale)
|
public void Resize(Vector3 scale)
|
||||||
{
|
{
|
||||||
scale.X = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.X));
|
|
||||||
scale.Y = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Y));
|
|
||||||
scale.Z = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Z));
|
|
||||||
|
|
||||||
PhysicsActor pa = PhysActor;
|
PhysicsActor pa = PhysActor;
|
||||||
if (pa != null && pa.IsPhysical)
|
|
||||||
|
if (ParentGroup.Scene != null)
|
||||||
{
|
{
|
||||||
scale.X = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.X));
|
scale.X = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.X));
|
||||||
scale.Y = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Y));
|
scale.Y = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Y));
|
||||||
scale.Z = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Z));
|
scale.Z = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Z));
|
||||||
|
|
||||||
|
if (pa != null && pa.IsPhysical)
|
||||||
|
{
|
||||||
|
scale.X = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.X));
|
||||||
|
scale.Y = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Y));
|
||||||
|
scale.Z = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Z));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// m_log.DebugFormat("[SCENE OBJECT PART]: Resizing {0} {1} to {2}", Name, LocalId, scale);
|
// m_log.DebugFormat("[SCENE OBJECT PART]: Resizing {0} {1} to {2}", Name, LocalId, scale);
|
||||||
|
|
Loading…
Reference in New Issue