remove the need to supply SceneObjectGroup.GroupResize() with a localId.
This is utterly pointless scene we already know which sog we're dealing with.bulletsim
parent
50bd48542c
commit
27fae36a21
|
@ -1234,7 +1234,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (m_parentScene.Permissions.CanEditObject(group.UUID, remoteClient.AgentId))
|
if (m_parentScene.Permissions.CanEditObject(group.UUID, remoteClient.AgentId))
|
||||||
{
|
{
|
||||||
group.GroupResize(scale, localID);
|
group.GroupResize(scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2658,164 +2658,165 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GroupResize(Vector3 scale, uint localID)
|
/// <summary>
|
||||||
|
/// Resize the entire group of prims.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scale"></param>
|
||||||
|
public void GroupResize(Vector3 scale)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = GetChildPart(localID);
|
|
||||||
if (part != null)
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT GROUP]: Group resizing {0} {1} from {2} to {3}", Name, localID, part.Scale, scale);
|
// "[SCENE OBJECT GROUP]: Group resizing {0} {1} from {2} to {3}", Name, localID, RootPart.Scale, scale);
|
||||||
|
|
||||||
part.IgnoreUndoUpdate = true;
|
RootPart.IgnoreUndoUpdate = true;
|
||||||
|
|
||||||
if (scale.X > m_scene.m_maxNonphys)
|
if (scale.X > m_scene.m_maxNonphys)
|
||||||
scale.X = m_scene.m_maxNonphys;
|
scale.X = m_scene.m_maxNonphys;
|
||||||
if (scale.Y > m_scene.m_maxNonphys)
|
if (scale.Y > m_scene.m_maxNonphys)
|
||||||
scale.Y = m_scene.m_maxNonphys;
|
scale.Y = m_scene.m_maxNonphys;
|
||||||
if (scale.Z > m_scene.m_maxNonphys)
|
if (scale.Z > m_scene.m_maxNonphys)
|
||||||
scale.Z = m_scene.m_maxNonphys;
|
scale.Z = m_scene.m_maxNonphys;
|
||||||
|
|
||||||
if (part.PhysActor != null && part.PhysActor.IsPhysical)
|
if (RootPart.PhysActor != null && RootPart.PhysActor.IsPhysical)
|
||||||
{
|
{
|
||||||
if (scale.X > m_scene.m_maxPhys)
|
if (scale.X > m_scene.m_maxPhys)
|
||||||
scale.X = m_scene.m_maxPhys;
|
scale.X = m_scene.m_maxPhys;
|
||||||
if (scale.Y > m_scene.m_maxPhys)
|
if (scale.Y > m_scene.m_maxPhys)
|
||||||
scale.Y = m_scene.m_maxPhys;
|
scale.Y = m_scene.m_maxPhys;
|
||||||
if (scale.Z > m_scene.m_maxPhys)
|
if (scale.Z > m_scene.m_maxPhys)
|
||||||
scale.Z = m_scene.m_maxPhys;
|
scale.Z = m_scene.m_maxPhys;
|
||||||
}
|
}
|
||||||
float x = (scale.X / part.Scale.X);
|
|
||||||
float y = (scale.Y / part.Scale.Y);
|
|
||||||
float z = (scale.Z / part.Scale.Z);
|
|
||||||
|
|
||||||
SceneObjectPart[] parts;
|
float x = (scale.X / RootPart.Scale.X);
|
||||||
if (x > 1.0f || y > 1.0f || z > 1.0f)
|
float y = (scale.Y / RootPart.Scale.Y);
|
||||||
{
|
float z = (scale.Z / RootPart.Scale.Z);
|
||||||
parts = m_parts.GetArray();
|
|
||||||
for (int i = 0; i < parts.Length; i++)
|
|
||||||
{
|
|
||||||
SceneObjectPart obPart = parts[i];
|
|
||||||
if (obPart.UUID != m_rootPart.UUID)
|
|
||||||
{
|
|
||||||
obPart.IgnoreUndoUpdate = true;
|
|
||||||
Vector3 oldSize = new Vector3(obPart.Scale);
|
|
||||||
|
|
||||||
float f = 1.0f;
|
|
||||||
float a = 1.0f;
|
|
||||||
|
|
||||||
if (part.PhysActor != null && part.PhysActor.IsPhysical)
|
|
||||||
{
|
|
||||||
if (oldSize.X * x > m_scene.m_maxPhys)
|
|
||||||
{
|
|
||||||
f = m_scene.m_maxPhys / oldSize.X;
|
|
||||||
a = f / x;
|
|
||||||
x *= a;
|
|
||||||
y *= a;
|
|
||||||
z *= a;
|
|
||||||
}
|
|
||||||
if (oldSize.Y * y > m_scene.m_maxPhys)
|
|
||||||
{
|
|
||||||
f = m_scene.m_maxPhys / oldSize.Y;
|
|
||||||
a = f / y;
|
|
||||||
x *= a;
|
|
||||||
y *= a;
|
|
||||||
z *= a;
|
|
||||||
}
|
|
||||||
if (oldSize.Z * z > m_scene.m_maxPhys)
|
|
||||||
{
|
|
||||||
f = m_scene.m_maxPhys / oldSize.Z;
|
|
||||||
a = f / z;
|
|
||||||
x *= a;
|
|
||||||
y *= a;
|
|
||||||
z *= a;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (oldSize.X * x > m_scene.m_maxNonphys)
|
|
||||||
{
|
|
||||||
f = m_scene.m_maxNonphys / oldSize.X;
|
|
||||||
a = f / x;
|
|
||||||
x *= a;
|
|
||||||
y *= a;
|
|
||||||
z *= a;
|
|
||||||
}
|
|
||||||
if (oldSize.Y * y > m_scene.m_maxNonphys)
|
|
||||||
{
|
|
||||||
f = m_scene.m_maxNonphys / oldSize.Y;
|
|
||||||
a = f / y;
|
|
||||||
x *= a;
|
|
||||||
y *= a;
|
|
||||||
z *= a;
|
|
||||||
}
|
|
||||||
if (oldSize.Z * z > m_scene.m_maxNonphys)
|
|
||||||
{
|
|
||||||
f = m_scene.m_maxNonphys / oldSize.Z;
|
|
||||||
a = f / z;
|
|
||||||
x *= a;
|
|
||||||
y *= a;
|
|
||||||
z *= a;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
obPart.IgnoreUndoUpdate = false;
|
|
||||||
obPart.StoreUndoState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 prevScale = part.Scale;
|
|
||||||
prevScale.X *= x;
|
|
||||||
prevScale.Y *= y;
|
|
||||||
prevScale.Z *= z;
|
|
||||||
part.Resize(prevScale);
|
|
||||||
|
|
||||||
|
SceneObjectPart[] parts;
|
||||||
|
if (x > 1.0f || y > 1.0f || z > 1.0f)
|
||||||
|
{
|
||||||
parts = m_parts.GetArray();
|
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];
|
||||||
obPart.IgnoreUndoUpdate = true;
|
|
||||||
if (obPart.UUID != m_rootPart.UUID)
|
if (obPart.UUID != m_rootPart.UUID)
|
||||||
{
|
{
|
||||||
Vector3 currentpos = new Vector3(obPart.OffsetPosition);
|
obPart.IgnoreUndoUpdate = true;
|
||||||
currentpos.X *= x;
|
Vector3 oldSize = new Vector3(obPart.Scale);
|
||||||
currentpos.Y *= y;
|
|
||||||
currentpos.Z *= z;
|
|
||||||
Vector3 newSize = new Vector3(obPart.Scale);
|
|
||||||
newSize.X *= x;
|
|
||||||
newSize.Y *= y;
|
|
||||||
newSize.Z *= z;
|
|
||||||
obPart.Resize(newSize);
|
|
||||||
obPart.UpdateOffSet(currentpos);
|
|
||||||
|
|
||||||
if (obPart.PhysActor != null)
|
float f = 1.0f;
|
||||||
|
float a = 1.0f;
|
||||||
|
|
||||||
|
if (RootPart.PhysActor != null && RootPart.PhysActor.IsPhysical)
|
||||||
{
|
{
|
||||||
obPart.PhysActor.Size = newSize;
|
if (oldSize.X * x > m_scene.m_maxPhys)
|
||||||
|
{
|
||||||
// If we're a sculpt wait for the trigger when the sculpt texture is retrieved.
|
f = m_scene.m_maxPhys / oldSize.X;
|
||||||
if (((OpenMetaverse.SculptType)obPart.Shape.SculptType) != SculptType.Mesh)
|
a = f / x;
|
||||||
m_scene.PhysicsScene.AddPhysicsActorTaint(obPart.PhysActor);
|
x *= a;
|
||||||
|
y *= a;
|
||||||
|
z *= a;
|
||||||
|
}
|
||||||
|
if (oldSize.Y * y > m_scene.m_maxPhys)
|
||||||
|
{
|
||||||
|
f = m_scene.m_maxPhys / oldSize.Y;
|
||||||
|
a = f / y;
|
||||||
|
x *= a;
|
||||||
|
y *= a;
|
||||||
|
z *= a;
|
||||||
|
}
|
||||||
|
if (oldSize.Z * z > m_scene.m_maxPhys)
|
||||||
|
{
|
||||||
|
f = m_scene.m_maxPhys / oldSize.Z;
|
||||||
|
a = f / z;
|
||||||
|
x *= a;
|
||||||
|
y *= a;
|
||||||
|
z *= a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (oldSize.X * x > m_scene.m_maxNonphys)
|
||||||
|
{
|
||||||
|
f = m_scene.m_maxNonphys / oldSize.X;
|
||||||
|
a = f / x;
|
||||||
|
x *= a;
|
||||||
|
y *= a;
|
||||||
|
z *= a;
|
||||||
|
}
|
||||||
|
if (oldSize.Y * y > m_scene.m_maxNonphys)
|
||||||
|
{
|
||||||
|
f = m_scene.m_maxNonphys / oldSize.Y;
|
||||||
|
a = f / y;
|
||||||
|
x *= a;
|
||||||
|
y *= a;
|
||||||
|
z *= a;
|
||||||
|
}
|
||||||
|
if (oldSize.Z * z > m_scene.m_maxNonphys)
|
||||||
|
{
|
||||||
|
f = m_scene.m_maxNonphys / oldSize.Z;
|
||||||
|
a = f / z;
|
||||||
|
x *= a;
|
||||||
|
y *= a;
|
||||||
|
z *= a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
obPart.IgnoreUndoUpdate = false;
|
||||||
|
obPart.StoreUndoState();
|
||||||
}
|
}
|
||||||
|
|
||||||
obPart.IgnoreUndoUpdate = false;
|
|
||||||
obPart.StoreUndoState();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (part.PhysActor != null)
|
|
||||||
{
|
|
||||||
part.PhysActor.Size = prevScale;
|
|
||||||
|
|
||||||
// If we're a sculpt wait for the trigger when the sculpt texture is retrieved.
|
|
||||||
if (((OpenMetaverse.SculptType)part.Shape.SculptType) != SculptType.Mesh)
|
|
||||||
m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor);
|
|
||||||
}
|
|
||||||
|
|
||||||
part.IgnoreUndoUpdate = false;
|
|
||||||
part.StoreUndoState();
|
|
||||||
HasGroupChanged = true;
|
|
||||||
m_rootPart.TriggerScriptChangedEvent(Changed.SCALE);
|
|
||||||
ScheduleGroupForTerseUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector3 prevScale = RootPart.Scale;
|
||||||
|
prevScale.X *= x;
|
||||||
|
prevScale.Y *= y;
|
||||||
|
prevScale.Z *= z;
|
||||||
|
RootPart.Resize(prevScale);
|
||||||
|
|
||||||
|
parts = m_parts.GetArray();
|
||||||
|
for (int i = 0; i < parts.Length; i++)
|
||||||
|
{
|
||||||
|
SceneObjectPart obPart = parts[i];
|
||||||
|
obPart.IgnoreUndoUpdate = true;
|
||||||
|
if (obPart.UUID != m_rootPart.UUID)
|
||||||
|
{
|
||||||
|
Vector3 currentpos = new Vector3(obPart.OffsetPosition);
|
||||||
|
currentpos.X *= x;
|
||||||
|
currentpos.Y *= y;
|
||||||
|
currentpos.Z *= z;
|
||||||
|
Vector3 newSize = new Vector3(obPart.Scale);
|
||||||
|
newSize.X *= x;
|
||||||
|
newSize.Y *= y;
|
||||||
|
newSize.Z *= z;
|
||||||
|
obPart.Resize(newSize);
|
||||||
|
obPart.UpdateOffSet(currentpos);
|
||||||
|
|
||||||
|
if (obPart.PhysActor != null)
|
||||||
|
{
|
||||||
|
obPart.PhysActor.Size = newSize;
|
||||||
|
|
||||||
|
// If we're a sculpt wait for the trigger when the sculpt texture is retrieved.
|
||||||
|
if (((OpenMetaverse.SculptType)obPart.Shape.SculptType) != SculptType.Mesh)
|
||||||
|
m_scene.PhysicsScene.AddPhysicsActorTaint(obPart.PhysActor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
obPart.IgnoreUndoUpdate = false;
|
||||||
|
obPart.StoreUndoState();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RootPart.PhysActor != null)
|
||||||
|
{
|
||||||
|
RootPart.PhysActor.Size = prevScale;
|
||||||
|
|
||||||
|
// If we're a sculpt wait for the trigger when the sculpt texture is retrieved.
|
||||||
|
if (((OpenMetaverse.SculptType)RootPart.Shape.SculptType) != SculptType.Mesh)
|
||||||
|
m_scene.PhysicsScene.AddPhysicsActorTaint(RootPart.PhysActor);
|
||||||
|
}
|
||||||
|
|
||||||
|
RootPart.IgnoreUndoUpdate = false;
|
||||||
|
RootPart.StoreUndoState();
|
||||||
|
HasGroupChanged = true;
|
||||||
|
RootPart.TriggerScriptChangedEvent(Changed.SCALE);
|
||||||
|
ScheduleGroupForTerseUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -55,7 +55,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
Scene scene = SceneSetupHelpers.SetupScene();
|
Scene scene = SceneSetupHelpers.SetupScene();
|
||||||
SceneObjectGroup g1 = SceneSetupHelpers.AddSceneObject(scene).ParentGroup;
|
SceneObjectGroup g1 = SceneSetupHelpers.AddSceneObject(scene).ParentGroup;
|
||||||
|
|
||||||
g1.GroupResize(new Vector3(2, 3, 4), g1.LocalId);
|
g1.GroupResize(new Vector3(2, 3, 4));
|
||||||
|
|
||||||
SceneObjectGroup g1Post = scene.GetSceneObjectGroup(g1.UUID);
|
SceneObjectGroup g1Post = scene.GetSceneObjectGroup(g1.UUID);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue