some changes parcels AABB math etc
parent
4805e91d39
commit
9db987b6f9
|
@ -93,6 +93,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
private Vector2 m_startPoint = Vector2.Zero;
|
private Vector2 m_startPoint = Vector2.Zero;
|
||||||
private Vector2 m_endPoint = Vector2.Zero;
|
private Vector2 m_endPoint = Vector2.Zero;
|
||||||
private Vector2 m_centerPoint = Vector2.Zero;
|
private Vector2 m_centerPoint = Vector2.Zero;
|
||||||
|
private Vector2 m_AABBmin = Vector2.Zero;
|
||||||
|
private Vector2 m_AABBmax = Vector2.Zero;
|
||||||
|
|
||||||
public Vector2 StartPoint
|
public Vector2 StartPoint
|
||||||
{
|
{
|
||||||
|
@ -757,7 +759,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ForceUpdateLandInfo()
|
public void ForceUpdateLandInfo()
|
||||||
{
|
{
|
||||||
UpdateAABBAndAreaValues();
|
UpdateGeometryValues();
|
||||||
UpdateLandBitmapByteArray();
|
UpdateLandBitmapByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -767,11 +769,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Updates the AABBMin and AABBMax values after area/shape modification of the land object
|
/// Updates geomtric values after area/shape modification of the land object
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void UpdateAABBAndAreaValues()
|
private void UpdateGeometryValues()
|
||||||
{
|
{
|
||||||
|
|
||||||
int min_x = Int32.MaxValue;
|
int min_x = Int32.MaxValue;
|
||||||
int min_y = Int32.MaxValue;
|
int min_y = Int32.MaxValue;
|
||||||
int max_x = Int32.MinValue;
|
int max_x = Int32.MinValue;
|
||||||
|
@ -784,7 +785,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
float avgx = 0f;
|
float avgx = 0f;
|
||||||
float avgy = 0f;
|
float avgy = 0f;
|
||||||
|
|
||||||
bool needStart = true;
|
bool needFirst = true;
|
||||||
|
|
||||||
for (x = 0; x < LandBitmap.GetLength(0); x++)
|
for (x = 0; x < LandBitmap.GetLength(0); x++)
|
||||||
{
|
{
|
||||||
|
@ -801,16 +802,17 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
if (max_y < y)
|
if (max_y < y)
|
||||||
max_y = y;
|
max_y = y;
|
||||||
|
|
||||||
if(needStart)
|
if(needFirst)
|
||||||
{
|
{
|
||||||
avgx = x;
|
avgx = x;
|
||||||
avgy = y;
|
avgy = y;
|
||||||
m_startPoint.X = x * landUnit;
|
m_startPoint.X = x * landUnit;
|
||||||
m_startPoint.Y = y * landUnit;
|
m_startPoint.Y = y * landUnit;
|
||||||
needStart = false;
|
needFirst = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// keeping previus odd average
|
||||||
avgx = (avgx * tempArea + x) / (tempArea + 1);
|
avgx = (avgx * tempArea + x) / (tempArea + 1);
|
||||||
avgy = (avgy * tempArea + y) / (tempArea + 1);
|
avgy = (avgy * tempArea + y) / (tempArea + 1);
|
||||||
}
|
}
|
||||||
|
@ -831,46 +833,52 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
m_endPoint.X = lastX * landUnit + landUnit;
|
m_endPoint.X = lastX * landUnit + landUnit;
|
||||||
m_endPoint.Y = lastY * landUnit + landUnit;
|
m_endPoint.Y = lastY * landUnit + landUnit;
|
||||||
|
|
||||||
|
// next tests should not be needed
|
||||||
|
// if they fail, something is wrong
|
||||||
|
|
||||||
|
int regionSizeX = (int)Constants.RegionSize;
|
||||||
|
int regionSizeY = (int)Constants.RegionSize;
|
||||||
|
|
||||||
|
if(m_scene != null)
|
||||||
|
{
|
||||||
|
regionSizeX = (int)m_scene.RegionInfo.RegionSizeX;
|
||||||
|
regionSizeY = (int)m_scene.RegionInfo.RegionSizeX;
|
||||||
|
}
|
||||||
|
|
||||||
int tx = min_x * landUnit;
|
int tx = min_x * landUnit;
|
||||||
if (tx > ((int)m_scene.RegionInfo.RegionSizeX - 1))
|
if (tx >= regionSizeX)
|
||||||
tx = ((int)m_scene.RegionInfo.RegionSizeX - 1);
|
tx = regionSizeX - 1;
|
||||||
int htx;
|
|
||||||
if (tx >= ((int)m_scene.RegionInfo.RegionSizeX))
|
|
||||||
htx = (int)m_scene.RegionInfo.RegionSizeX - 1;
|
|
||||||
else
|
|
||||||
htx = tx;
|
|
||||||
|
|
||||||
int ty = min_y * landUnit;
|
int ty = min_y * landUnit;
|
||||||
int hty;
|
if (ty >= regionSizeY)
|
||||||
|
ty = regionSizeY - 1;
|
||||||
|
|
||||||
if (ty >= ((int)m_scene.RegionInfo.RegionSizeY))
|
m_AABBmin.X = tx;
|
||||||
hty = (int)m_scene.RegionInfo.RegionSizeY - 1;
|
m_AABBmin.Y = ty;
|
||||||
|
|
||||||
|
if(m_scene == null)
|
||||||
|
LandData.AABBMin = new Vector3(tx, ty, 0f);
|
||||||
else
|
else
|
||||||
hty = ty;
|
LandData.AABBMin = new Vector3(tx, ty, (float)m_scene.Heightmap[tx, ty]);
|
||||||
|
|
||||||
LandData.AABBMin =
|
|
||||||
new Vector3(
|
|
||||||
(float)(tx), (float)(ty), m_scene != null ? (float)m_scene.Heightmap[htx, hty] : 0);
|
|
||||||
|
|
||||||
max_x++;
|
max_x++;
|
||||||
tx = max_x * landUnit;
|
tx = max_x * landUnit;
|
||||||
if (tx >= ((int)m_scene.RegionInfo.RegionSizeX))
|
if (tx > regionSizeX)
|
||||||
htx = (int)m_scene.RegionInfo.RegionSizeX - 1;
|
tx = regionSizeX;
|
||||||
else
|
|
||||||
htx = tx;
|
|
||||||
|
|
||||||
max_y++;
|
max_y++;
|
||||||
ty = max_y * 4;
|
ty = max_y * landUnit;
|
||||||
|
if (ty > regionSizeY)
|
||||||
if (ty >= ((int)m_scene.RegionInfo.RegionSizeY))
|
ty = regionSizeY;
|
||||||
hty = (int)m_scene.RegionInfo.RegionSizeY - 1;
|
|
||||||
|
m_AABBmax.X = tx;
|
||||||
|
m_AABBmax.Y = ty;
|
||||||
|
|
||||||
|
if(m_scene == null)
|
||||||
|
LandData.AABBMax = new Vector3(tx, ty, 0f);
|
||||||
else
|
else
|
||||||
hty = ty;
|
LandData.AABBMax = new Vector3(tx, ty, (float)m_scene.Heightmap[tx - 1, ty - 1]);
|
||||||
|
|
||||||
LandData.AABBMax
|
|
||||||
= new Vector3(
|
|
||||||
(float)(tx), (float)(ty), m_scene != null ? (float)m_scene.Heightmap[htx, hty] : 0);
|
|
||||||
|
|
||||||
LandData.Area = tempArea * landUnit * landUnit;
|
LandData.Area = tempArea * landUnit * landUnit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1223,23 +1231,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
if(tempByte != 0 && byteNum < 512)
|
if(tempByte != 0 && byteNum < 512)
|
||||||
tempConvertArr[byteNum] = (byte)tempByte;
|
tempConvertArr[byteNum] = (byte)tempByte;
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
tempByte = Convert.ToByte(tempByte | Convert.ToByte(LandBitmap[x, y]) << (i++ % 8));
|
|
||||||
if (i % 8 == 0)
|
|
||||||
{
|
|
||||||
tempConvertArr[byteNum] = tempByte;
|
|
||||||
tempByte = (byte) 0;
|
|
||||||
i = 0;
|
|
||||||
byteNum++;
|
|
||||||
}
|
|
||||||
<<<<<<< HEAD
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// m_log.DebugFormat("{0} ConvertLandBitmapToBytes. BitmapSize=<{1},{2}>",
|
|
||||||
// LogHeader, LandBitmap.GetLength(0), LandBitmap.GetLength(1));
|
|
||||||
=======
|
|
||||||
*/
|
|
||||||
return tempConvertArr;
|
return tempConvertArr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue