From 49adb6e09f42b1b4022d6127379c79ce01b64192 Mon Sep 17 00:00:00 2001 From: Dahlia Trimble Date: Fri, 18 Jul 2008 00:03:28 +0000 Subject: [PATCH] refactor - commenting out needsMeshing() and all references as createMesh() has the same logic and obsoletes the need for it. --- OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 364 ++++++++++++------ OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | 110 +++--- 2 files changed, 296 insertions(+), 178 deletions(-) diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index f7fbaf11fb..59655d70e2 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -917,15 +917,19 @@ namespace OpenSim.Region.Physics.OdePlugin m_targetSpace = targetspace; - if (_mesh == null) - { - if (_parent_scene.needsMeshing(_pbs)) - { - // 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) + //{ + // if (_parent_scene.needsMeshing(_pbs)) + // { + // // 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); + lock (OdeScene.OdeLock) { @@ -1285,8 +1289,8 @@ namespace OpenSim.Region.Physics.OdePlugin { //if (!_parent_scene.geom_name_map.ContainsKey(prim_geom)) //{ - // m_taintsize = _size; - //return; + // m_taintsize = _size; + //return; //} string oldname = _parent_scene.geom_name_map[prim_geom]; @@ -1300,7 +1304,7 @@ namespace OpenSim.Region.Physics.OdePlugin // Cleanup meshing here } //kill body to rebuild - if (IsPhysical && Body != (IntPtr) 0) + if (IsPhysical && Body != (IntPtr)0) { 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. // Construction of new prim - if (_parent_scene.needsMeshing(_pbs)) + //if (_parent_scene.needsMeshing(_pbs)) { float meshlod = _parent_scene.meshSculptLOD; @@ -1322,7 +1326,7 @@ namespace OpenSim.Region.Physics.OdePlugin 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); @@ -1368,18 +1372,7 @@ namespace OpenSim.Region.Physics.OdePlugin 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); @@ -1395,55 +1388,6 @@ namespace OpenSim.Region.Physics.OdePlugin 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; @@ -1453,6 +1397,178 @@ namespace OpenSim.Region.Physics.OdePlugin 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) { m_collidesWater = m_taintCollidesWater; @@ -1488,7 +1604,7 @@ namespace OpenSim.Region.Physics.OdePlugin if (_size.Z <= 0) _size.Z = 0.01f; // 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 float meshlod = _parent_scene.meshSculptLOD; @@ -1568,55 +1684,55 @@ namespace OpenSim.Region.Physics.OdePlugin 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); + //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); - } - } + // //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; diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index cd5032c198..ec0e0fff69 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs @@ -1127,10 +1127,10 @@ namespace OpenSim.Region.Physics.OdePlugin private PhysicsActor AddPrim(String name, PhysicsVector position, PhysicsVector size, Quaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool isphysical) { - PhysicsVector pos = new PhysicsVector(); - pos.X = position.X; - pos.Y = position.Y; - pos.Z = position.Z; + PhysicsVector pos = new PhysicsVector(position.X, position.Y, position.Z); + //pos.X = position.X; + //pos.Y = position.Y; + //pos.Z = position.Z; PhysicsVector siz = new PhysicsVector(); siz.X = size.X; siz.Y = size.Y; @@ -1171,17 +1171,19 @@ namespace OpenSim.Region.Physics.OdePlugin PhysicsActor result; IMesh mesh = null; - switch (pbs.ProfileShape) - { - case ProfileShape.Square: + //switch (pbs.ProfileShape) + //{ + // case ProfileShape.Square: /// support simple box & hollow box now; later, more shapes - if (needsMeshing(pbs)) - { - mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical); - } + //if (needsMeshing(pbs)) + //{ + // 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); @@ -1521,61 +1523,61 @@ namespace OpenSim.Region.Physics.OdePlugin /// /// /// - public bool needsMeshing(PrimitiveBaseShape pbs) - { - //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()); - if (pbs.SculptEntry && !meshSculptedPrim) - { - return false; - } + //public bool needsMeshing(PrimitiveBaseShape pbs) + //{ + // //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()); + // if (pbs.SculptEntry && !meshSculptedPrim) + // { + // return false; + // } - if (pbs.ProfileHollow != 0) - return true; + // if (pbs.ProfileHollow != 0) + // return true; - if (((Int16)pbs.PathTwistBegin != 0) || ((Int16)pbs.PathTwist != 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.ProfileBegin != 0) || pbs.ProfileEnd != 0) + // return true; - if ((pbs.PathScaleX != 100) || (pbs.PathScaleY != 100)) - return true; + // if ((pbs.PathScaleX != 100) || (pbs.PathScaleY != 100)) + // return true; - if ((pbs.PathShearX != 0) || (pbs.PathShearY != 0)) - 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; + // 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; - if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte) Extrusion.Curve1) - 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 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 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; + // // 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; + // if (pbs.ProfileShape == ProfileShape.EquilateralTriangle) + // return true; - return false; - } + // return false; + //} /// /// Called after our prim properties are set Scale, position etc.