refactor - commenting out needsMeshing() and all references as createMesh() has the same logic and obsoletes the need for it.

0.6.0-stable
Dahlia Trimble 2008-07-18 00:03:28 +00:00
parent f54828c957
commit 49adb6e09f
2 changed files with 296 additions and 178 deletions

View File

@ -917,15 +917,19 @@ namespace OpenSim.Region.Physics.OdePlugin
m_targetSpace = targetspace; m_targetSpace = targetspace;
if (_mesh == null) //if (_mesh == null)
{ //{
if (_parent_scene.needsMeshing(_pbs)) // if (_parent_scene.needsMeshing(_pbs))
{ // {
// Don't need to re-enable body.. it's done in SetMesh // // Don't need to re-enable body.. it's done in SetMesh
// _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
// // createmesh returns null when it's a shape that isn't a cube.
// }
//}
if (_mesh == null )
_mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
// createmesh returns null when it's a shape that isn't a cube.
}
}
lock (OdeScene.OdeLock) lock (OdeScene.OdeLock)
{ {
@ -1300,7 +1304,7 @@ namespace OpenSim.Region.Physics.OdePlugin
// Cleanup meshing here // Cleanup meshing here
} }
//kill body to rebuild //kill body to rebuild
if (IsPhysical && Body != (IntPtr) 0) if (IsPhysical && Body != (IntPtr)0)
{ {
disableBody(); disableBody();
} }
@ -1314,7 +1318,7 @@ namespace OpenSim.Region.Physics.OdePlugin
// we don't need to do space calculation because the client sends a position update also. // we don't need to do space calculation because the client sends a position update also.
// Construction of new prim // Construction of new prim
if (_parent_scene.needsMeshing(_pbs)) //if (_parent_scene.needsMeshing(_pbs))
{ {
float meshlod = _parent_scene.meshSculptLOD; float meshlod = _parent_scene.meshSculptLOD;
@ -1322,7 +1326,7 @@ namespace OpenSim.Region.Physics.OdePlugin
meshlod = _parent_scene.MeshSculptphysicalLOD; meshlod = _parent_scene.MeshSculptphysicalLOD;
// Don't need to re-enable body.. it's done in SetMesh // Don't need to re-enable body.. it's done in SetMesh
IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical); IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
// createmesh returns null when it's a shape that isn't a cube.
if (mesh != null) if (mesh != null)
{ {
setMesh(_parent_scene, mesh); setMesh(_parent_scene, mesh);
@ -1368,18 +1372,7 @@ namespace OpenSim.Region.Physics.OdePlugin
SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
} }
} }
//else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
//{
//Cyllinder
//if (_size.X == _size.Y)
//{
// prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
//}
//else
//{
//prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
//}
//}
else else
{ {
_parent_scene.waitForSpaceUnlock(m_targetSpace); _parent_scene.waitForSpaceUnlock(m_targetSpace);
@ -1395,55 +1388,6 @@ namespace OpenSim.Region.Physics.OdePlugin
d.GeomSetQuaternion(prim_geom, ref myrot); d.GeomSetQuaternion(prim_geom, ref myrot);
} }
} }
else
{
if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
{
if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
{
_parent_scene.waitForSpaceUnlock(m_targetSpace);
SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
}
else
{
_parent_scene.waitForSpaceUnlock(m_targetSpace);
SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
}
}
//else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
//{
//Cyllinder
//if (_size.X == _size.Y)
//{
//prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
//}
//else
//{
//prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
//}
//}
else
{
_parent_scene.waitForSpaceUnlock(m_targetSpace);
SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
}
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
d.Quaternion myrot = new d.Quaternion();
myrot.W = _orientation.w;
myrot.X = _orientation.x;
myrot.Y = _orientation.y;
myrot.Z = _orientation.z;
d.GeomSetQuaternion(prim_geom, ref myrot);
//d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
if (IsPhysical && Body == (IntPtr) 0)
{
// Re creates body on size.
// EnableBody also does setMass()
enableBody();
d.BodyEnable(Body);
}
}
_parent_scene.geom_name_map[prim_geom] = oldname; _parent_scene.geom_name_map[prim_geom] = oldname;
@ -1453,6 +1397,178 @@ namespace OpenSim.Region.Physics.OdePlugin
m_taintsize = _size; m_taintsize = _size;
} }
//public void changesize(float timestamp)
//{
// //if (!_parent_scene.geom_name_map.ContainsKey(prim_geom))
// //{
// // m_taintsize = _size;
// //return;
// //}
// string oldname = _parent_scene.geom_name_map[prim_geom];
// if (_size.X <= 0) _size.X = 0.01f;
// if (_size.Y <= 0) _size.Y = 0.01f;
// if (_size.Z <= 0) _size.Z = 0.01f;
// // Cleanup of old prim geometry
// if (_mesh != null)
// {
// // Cleanup meshing here
// }
// //kill body to rebuild
// if (IsPhysical && Body != (IntPtr) 0)
// {
// disableBody();
// }
// if (d.SpaceQuery(m_targetSpace, prim_geom))
// {
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
// d.SpaceRemove(m_targetSpace, prim_geom);
// }
// d.GeomDestroy(prim_geom);
// prim_geom = (IntPtr)0;
// // we don't need to do space calculation because the client sends a position update also.
// // Construction of new prim
// if (_parent_scene.needsMeshing(_pbs))
// {
// float meshlod = _parent_scene.meshSculptLOD;
// if (IsPhysical)
// meshlod = _parent_scene.MeshSculptphysicalLOD;
// // Don't need to re-enable body.. it's done in SetMesh
// IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
// // createmesh returns null when it's a shape that isn't a cube.
// if (mesh != null)
// {
// setMesh(_parent_scene, mesh);
// d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
// d.Quaternion myrot = new d.Quaternion();
// myrot.W = _orientation.w;
// myrot.X = _orientation.x;
// myrot.Y = _orientation.y;
// myrot.Z = _orientation.z;
// d.GeomSetQuaternion(prim_geom, ref myrot);
// //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
// if (IsPhysical && Body == (IntPtr)0)
// {
// // Re creates body on size.
// // EnableBody also does setMass()
// enableBody();
// d.BodyEnable(Body);
// }
// }
// else
// {
// if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
// {
// if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
// {
// if (((_size.X / 2f) > 0f) && ((_size.X / 2f) < 1000))
// {
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
// }
// else
// {
// m_log.Info("[PHYSICS]: Failed to load a sphere bad size");
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
// }
// }
// else
// {
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
// }
// }
// //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
// //{
// //Cyllinder
// //if (_size.X == _size.Y)
// //{
// // prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
// //}
// //else
// //{
// //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
// //}
// //}
// else
// {
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
// }
// //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
// d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
// d.Quaternion myrot = new d.Quaternion();
// myrot.W = _orientation.w;
// myrot.X = _orientation.x;
// myrot.Y = _orientation.y;
// myrot.Z = _orientation.z;
// d.GeomSetQuaternion(prim_geom, ref myrot);
// }
// }
// else
// {
// if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
// {
// if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
// {
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
// }
// else
// {
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
// }
// }
// //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
// //{
// //Cyllinder
// //if (_size.X == _size.Y)
// //{
// //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
// //}
// //else
// //{
// //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
// //}
// //}
// else
// {
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
// }
// d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
// d.Quaternion myrot = new d.Quaternion();
// myrot.W = _orientation.w;
// myrot.X = _orientation.x;
// myrot.Y = _orientation.y;
// myrot.Z = _orientation.z;
// d.GeomSetQuaternion(prim_geom, ref myrot);
// //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
// if (IsPhysical && Body == (IntPtr) 0)
// {
// // Re creates body on size.
// // EnableBody also does setMass()
// enableBody();
// d.BodyEnable(Body);
// }
// }
// _parent_scene.geom_name_map[prim_geom] = oldname;
// changeSelectedStatus(timestamp);
// resetCollisionAccounting();
// m_taintsize = _size;
//}
public void changefloatonwater(float timestep) public void changefloatonwater(float timestep)
{ {
m_collidesWater = m_taintCollidesWater; m_collidesWater = m_taintCollidesWater;
@ -1488,7 +1604,7 @@ namespace OpenSim.Region.Physics.OdePlugin
if (_size.Z <= 0) _size.Z = 0.01f; if (_size.Z <= 0) _size.Z = 0.01f;
// Construction of new prim // Construction of new prim
if (_parent_scene.needsMeshing(_pbs)) //if (_parent_scene.needsMeshing(_pbs))
{ {
// Don't need to re-enable body.. it's done in SetMesh // Don't need to re-enable body.. it's done in SetMesh
float meshlod = _parent_scene.meshSculptLOD; float meshlod = _parent_scene.meshSculptLOD;
@ -1568,55 +1684,55 @@ namespace OpenSim.Region.Physics.OdePlugin
d.GeomSetQuaternion(prim_geom, ref myrot); d.GeomSetQuaternion(prim_geom, ref myrot);
} }
} }
else
{
if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
{
if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
{
_parent_scene.waitForSpaceUnlock(m_targetSpace);
SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
}
else
{
_parent_scene.waitForSpaceUnlock(m_targetSpace);
SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
}
}
//else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
//{
//Cyllinder
//if (_size.X == _size.Y)
//{
//prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
//}
//else //else
//{ //{
//prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z); // if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
//} // {
//} // if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
else // {
{ // _parent_scene.waitForSpaceUnlock(m_targetSpace);
_parent_scene.waitForSpaceUnlock(m_targetSpace); // SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); // }
} // else
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); // {
d.Quaternion myrot = new d.Quaternion(); // _parent_scene.waitForSpaceUnlock(m_targetSpace);
myrot.W = _orientation.w; // SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
myrot.X = _orientation.x; // }
myrot.Y = _orientation.y; // }
myrot.Z = _orientation.z; // //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
d.GeomSetQuaternion(prim_geom, ref myrot); // //{
// //Cyllinder
// //if (_size.X == _size.Y)
// //{
// //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
// //}
// //else
// //{
// //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
// //}
// //}
// else
// {
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
// }
// d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
// d.Quaternion myrot = new d.Quaternion();
// myrot.W = _orientation.w;
// myrot.X = _orientation.x;
// myrot.Y = _orientation.y;
// myrot.Z = _orientation.z;
// d.GeomSetQuaternion(prim_geom, ref myrot);
//d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z); // //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
if (IsPhysical && Body == (IntPtr)0) // if (IsPhysical && Body == (IntPtr)0)
{ // {
// Re creates body on size. // // Re creates body on size.
// EnableBody also does setMass() // // EnableBody also does setMass()
enableBody(); // enableBody();
d.BodyEnable(Body); // d.BodyEnable(Body);
} // }
} //}
_parent_scene.geom_name_map[prim_geom] = oldname; _parent_scene.geom_name_map[prim_geom] = oldname;

View File

@ -1127,10 +1127,10 @@ namespace OpenSim.Region.Physics.OdePlugin
private PhysicsActor AddPrim(String name, PhysicsVector position, PhysicsVector size, Quaternion rotation, private PhysicsActor AddPrim(String name, PhysicsVector position, PhysicsVector size, Quaternion rotation,
IMesh mesh, PrimitiveBaseShape pbs, bool isphysical) IMesh mesh, PrimitiveBaseShape pbs, bool isphysical)
{ {
PhysicsVector pos = new PhysicsVector(); PhysicsVector pos = new PhysicsVector(position.X, position.Y, position.Z);
pos.X = position.X; //pos.X = position.X;
pos.Y = position.Y; //pos.Y = position.Y;
pos.Z = position.Z; //pos.Z = position.Z;
PhysicsVector siz = new PhysicsVector(); PhysicsVector siz = new PhysicsVector();
siz.X = size.X; siz.X = size.X;
siz.Y = size.Y; siz.Y = size.Y;
@ -1171,17 +1171,19 @@ namespace OpenSim.Region.Physics.OdePlugin
PhysicsActor result; PhysicsActor result;
IMesh mesh = null; IMesh mesh = null;
switch (pbs.ProfileShape) //switch (pbs.ProfileShape)
{ //{
case ProfileShape.Square: // case ProfileShape.Square:
/// support simple box & hollow box now; later, more shapes /// support simple box & hollow box now; later, more shapes
if (needsMeshing(pbs)) //if (needsMeshing(pbs))
{ //{
mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical); // mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical);
} //}
break; // break;
} //}
mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical);
result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical); result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical);
@ -1521,61 +1523,61 @@ namespace OpenSim.Region.Physics.OdePlugin
/// </summary> /// </summary>
/// <param name="pbs"></param> /// <param name="pbs"></param>
/// <returns></returns> /// <returns></returns>
public bool needsMeshing(PrimitiveBaseShape pbs) //public bool needsMeshing(PrimitiveBaseShape pbs)
{ //{
//if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle && pbs.ProfileCurve == (byte)LLObject.ProfileCurve.Circle && pbs.PathScaleY <= 0.75f) // //if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle && pbs.ProfileCurve == (byte)LLObject.ProfileCurve.Circle && pbs.PathScaleY <= 0.75f)
//Console.WriteLine("needsMeshing: " + " pathCurve: " + pbs.PathCurve.ToString() + " profileCurve: " + pbs.ProfileCurve.ToString() + " pathScaleY: " + LLObject.UnpackPathScale(pbs.PathScaleY).ToString()); // //Console.WriteLine("needsMeshing: " + " pathCurve: " + pbs.PathCurve.ToString() + " profileCurve: " + pbs.ProfileCurve.ToString() + " pathScaleY: " + LLObject.UnpackPathScale(pbs.PathScaleY).ToString());
if (pbs.SculptEntry && !meshSculptedPrim) // if (pbs.SculptEntry && !meshSculptedPrim)
{ // {
return false; // return false;
} // }
if (pbs.ProfileHollow != 0) // if (pbs.ProfileHollow != 0)
return true;
if (((Int16)pbs.PathTwistBegin != 0) || ((Int16)pbs.PathTwist != 0))
return true;
if ((pbs.ProfileBegin != 0) || pbs.ProfileEnd != 0)
return true;
if ((pbs.PathScaleX != 100) || (pbs.PathScaleY != 100))
return true;
if ((pbs.PathShearX != 0) || (pbs.PathShearY != 0))
return true;
if (pbs.ProfileShape == ProfileShape.Circle && pbs.PathCurve == (byte)Extrusion.Straight)
return true;
//if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1 && (pbs.Scale.X != pbs.Scale.Y || pbs.Scale.Y != pbs.Scale.Z || pbs.Scale.Z != pbs.Scale.X))
// return true; // return true;
if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte) Extrusion.Curve1) // if (((Int16)pbs.PathTwistBegin != 0) || ((Int16)pbs.PathTwist != 0))
return true; // return true;
// test for torus // if ((pbs.ProfileBegin != 0) || pbs.ProfileEnd != 0)
if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle // return true;
&& (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.Circle
&& LLObject.UnpackPathScale(pbs.PathScaleY) <= 0.75f)
return true;
// test for tube // if ((pbs.PathScaleX != 100) || (pbs.PathScaleY != 100))
if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle // return true;
&& (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle)
return true;
// test for ring // if ((pbs.PathShearX != 0) || (pbs.PathShearY != 0))
if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle // return true;
&& (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle)
return true;
if (pbs.ProfileShape == ProfileShape.EquilateralTriangle) // if (pbs.ProfileShape == ProfileShape.Circle && pbs.PathCurve == (byte)Extrusion.Straight)
return true; // return true;
// //if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1 && (pbs.Scale.X != pbs.Scale.Y || pbs.Scale.Y != pbs.Scale.Z || pbs.Scale.Z != pbs.Scale.X))
// // return true;
// if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte) Extrusion.Curve1)
// return true;
// // test for torus
// if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle
// && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.Circle
// && LLObject.UnpackPathScale(pbs.PathScaleY) <= 0.75f)
// return true;
// // test for tube
// if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle
// && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle)
// return true;
// // test for ring
// if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle
// && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle)
// return true;
// if (pbs.ProfileShape == ProfileShape.EquilateralTriangle)
// return true;
return false; // return false;
} //}
/// <summary> /// <summary>
/// Called after our prim properties are set Scale, position etc. /// Called after our prim properties are set Scale, position etc.