aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/OdePlugin
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/OdePlugin')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs107
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs13
2 files changed, 70 insertions, 50 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 79c4041..c1077f8 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -1332,7 +1332,13 @@ namespace OpenSim.Region.Physics.OdePlugin
1332 if (IsPhysical) 1332 if (IsPhysical)
1333 meshlod = _parent_scene.MeshSculptphysicalLOD; 1333 meshlod = _parent_scene.MeshSculptphysicalLOD;
1334 // Don't need to re-enable body.. it's done in SetMesh 1334 // Don't need to re-enable body.. it's done in SetMesh
1335 IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical); 1335
1336 IMesh mesh = null;
1337
1338 if(_parent_scene.needsMeshing(_pbs))
1339 mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
1340
1341 //IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
1336 1342
1337 if (mesh != null) 1343 if (mesh != null)
1338 { 1344 {
@@ -1691,55 +1697,56 @@ namespace OpenSim.Region.Physics.OdePlugin
1691 d.GeomSetQuaternion(prim_geom, ref myrot); 1697 d.GeomSetQuaternion(prim_geom, ref myrot);
1692 } 1698 }
1693 } 1699 }
1694 //else 1700 else
1695 //{ 1701 {
1696 // if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1) 1702 if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
1697 // { 1703 {
1698 // if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z) 1704 if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
1699 // { 1705 {
1700 // _parent_scene.waitForSpaceUnlock(m_targetSpace); 1706 _parent_scene.waitForSpaceUnlock(m_targetSpace);
1701 // SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2)); 1707 SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
1702 // } 1708 }
1703 // else 1709 else
1704 // { 1710 {
1705 // _parent_scene.waitForSpaceUnlock(m_targetSpace); 1711 _parent_scene.waitForSpaceUnlock(m_targetSpace);
1706 // SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); 1712 SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1707 // } 1713 }
1708 // } 1714 }
1709 // //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight) 1715 //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
1710 // //{ 1716 //{
1711 // //Cyllinder 1717 //Cyllinder
1712 // //if (_size.X == _size.Y) 1718 //if (_size.X == _size.Y)
1713 // //{ 1719 //{
1714 // //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z); 1720 //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
1715 // //} 1721 //}
1716 // //else 1722 //else
1717 // //{ 1723 //{
1718 // //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z); 1724 //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
1719 // //} 1725 //}
1720 // //} 1726 //}
1721 // else 1727 else
1722 // { 1728 {
1723 // _parent_scene.waitForSpaceUnlock(m_targetSpace); 1729 _parent_scene.waitForSpaceUnlock(m_targetSpace);
1724 // SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); 1730 SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1725 // } 1731 }
1726 // d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); 1732 d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
1727 // d.Quaternion myrot = new d.Quaternion(); 1733 d.Quaternion myrot = new d.Quaternion();
1728 // myrot.W = _orientation.w; 1734 //myrot.W = _orientation.w;
1729 // myrot.X = _orientation.X; 1735 myrot.W = _orientation.W;
1730 // myrot.Y = _orientation.Y; 1736 myrot.X = _orientation.X;
1731 // myrot.Z = _orientation.Z; 1737 myrot.Y = _orientation.Y;
1732 // d.GeomSetQuaternion(prim_geom, ref myrot); 1738 myrot.Z = _orientation.Z;
1733 1739 d.GeomSetQuaternion(prim_geom, ref myrot);
1734 // //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z); 1740
1735 // if (IsPhysical && Body == (IntPtr)0) 1741 //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
1736 // { 1742 if (IsPhysical && Body == (IntPtr)0)
1737 // // Re creates body on size. 1743 {
1738 // // EnableBody also does setMass() 1744 // Re creates body on size.
1739 // enableBody(); 1745 // EnableBody also does setMass()
1740 // d.BodyEnable(Body); 1746 enableBody();
1741 // } 1747 d.BodyEnable(Body);
1742 //} 1748 }
1749 }
1743 1750
1744 _parent_scene.geom_name_map[prim_geom] = oldname; 1751 _parent_scene.geom_name_map[prim_geom] = oldname;
1745 1752
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
index 245c757..5212c29 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -1526,6 +1526,19 @@ namespace OpenSim.Region.Physics.OdePlugin
1526 return false; 1526 return false;
1527 } 1527 }
1528 1528
1529 // if it's a standard box or sphere with no cuts or hollows or twist, return false since ODE can use an internal representation for the prim
1530 if ((pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1)
1531 || (pbs.ProfileShape == ProfileShape.Square && pbs.PathCurve == (byte)Extrusion.Straight))
1532 {
1533 if (pbs.ProfileBegin == 0 && pbs.ProfileEnd == 0
1534 && pbs.ProfileHollow == 0
1535 && pbs.PathTwist == 0 && pbs.PathTwistBegin == 0
1536 && pbs.PathBegin == 0 && pbs.PathEnd == 0
1537 //&& pbs.PathTaperX == 0 && pbs.PathTaperY == 0
1538 && pbs.PathScaleX == 100 && pbs.PathScaleY == 100)
1539 return false;
1540 }
1541
1529 // if (pbs.ProfileHollow != 0) 1542 // if (pbs.ProfileHollow != 0)
1530 // return true; 1543 // return true;
1531 1544