diff options
Diffstat (limited to 'OpenSim/Region/Physics/OdePlugin')
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 107 | ||||
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | 13 |
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 | ||