refactor: move code to obtain the coalescence size and object offsets into CoalescedSceneObjects from the serializer.

bulletsim
Justin Clark-Casey (justincc) 2011-04-13 21:48:16 +01:00
parent d8d28c3737
commit 68cc5b46fe
3 changed files with 39 additions and 16 deletions

View File

@ -84,7 +84,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess.Tests
public void TestRezCoalescedObject()
{
TestHelper.InMethod();
log4net.Config.XmlConfigurator.Configure();
// log4net.Config.XmlConfigurator.Configure();
// Create asset
SceneObjectGroup object1;

View File

@ -124,5 +124,31 @@ namespace OpenSim.Region.Framework.Scenes
lock (m_memberObjects)
return m_memberObjects.Remove(obj);
}
/// <summary>
/// Get the total size of the coalescence (the size required to cover all the objects within it) and the
/// offsets of each of those objects.
/// </summary>
/// <param name="size"></param>
/// <returns>
/// An array of offsets. The order of objects is the same as returned from the Objects property
/// </returns>
public Vector3[] GetSizeAndOffsets(out Vector3 size)
{
float minX, minY, minZ;
float maxX, maxY, maxZ;
Vector3[] offsets
= Scene.GetCombinedBoundingBox(
Objects, out minX, out maxX, out minY, out maxY, out minZ, out maxZ);
float sizeX = maxX - minX;
float sizeY = maxY - minY;
float sizeZ = maxZ - minZ;
size = new Vector3(sizeX, sizeY, sizeZ);
return offsets;
}
}
}

View File

@ -42,6 +42,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
/// <summary>
/// Serialize and deserialize coalesced scene objects.
/// </summary>
/// <remarks>
/// Deserialization not yet here.
/// </remarks>
public class CoalescedSceneObjectsSerializer
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -61,28 +64,22 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
{
using (XmlTextWriter writer = new XmlTextWriter(sw))
{
Vector3 size;
List<SceneObjectGroup> coaObjects = coa.Objects;
// m_log.DebugFormat(
// "[COALESCED SCENE OBJECTS SERIALIZER]: Writing {0} objects for coalesced object",
// coaObjects.Count);
float minX, minY, minZ;
float maxX, maxY, maxZ;
Vector3[] offsets = Scene.GetCombinedBoundingBox(coaObjects,
out minX, out maxX, out minY, out maxY,
out minZ, out maxZ);
// This is weak - we're relying on the set of coalesced objects still being identical
Vector3[] offsets = coa.GetSizeAndOffsets(out size);
writer.WriteStartElement("CoalescedObject");
float sizeX = maxX - minX;
float sizeY = maxY - minY;
float sizeZ = maxZ - minZ;
writer.WriteAttributeString("x", sizeX.ToString());
writer.WriteAttributeString("y", sizeY.ToString());
writer.WriteAttributeString("z", sizeZ.ToString());
writer.WriteAttributeString("x", size.X.ToString());
writer.WriteAttributeString("y", size.Y.ToString());
writer.WriteAttributeString("z", size.Z.ToString());
// Embed the offsets into the group XML
for (int i = 0; i < coaObjects.Count; i++)
@ -100,7 +97,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
SceneObjectSerializer.ToOriginalXmlFormat(obj, writer, true);
writer.WriteEndElement();
writer.WriteEndElement(); // SceneObjectGroup
}
writer.WriteEndElement(); // CoalescedObject