aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs366
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs110
2 files changed, 297 insertions, 179 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index f7fbaf1..59655d7 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -917,15 +917,19 @@ namespace OpenSim.Region.Physics.OdePlugin
917 917
918 m_targetSpace = targetspace; 918 m_targetSpace = targetspace;
919 919
920 if (_mesh == null) 920 //if (_mesh == null)
921 { 921 //{
922 if (_parent_scene.needsMeshing(_pbs)) 922 // if (_parent_scene.needsMeshing(_pbs))
923 { 923 // {
924 // Don't need to re-enable body.. it's done in SetMesh 924 // // Don't need to re-enable body.. it's done in SetMesh
925 _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); 925 // _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
926 // createmesh returns null when it's a shape that isn't a cube. 926 // // createmesh returns null when it's a shape that isn't a cube.
927 } 927 // }
928 } 928 //}
929
930 if (_mesh == null )
931 _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
932
929 933
930 lock (OdeScene.OdeLock) 934 lock (OdeScene.OdeLock)
931 { 935 {
@@ -1285,8 +1289,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1285 { 1289 {
1286 //if (!_parent_scene.geom_name_map.ContainsKey(prim_geom)) 1290 //if (!_parent_scene.geom_name_map.ContainsKey(prim_geom))
1287 //{ 1291 //{
1288 // m_taintsize = _size; 1292 // m_taintsize = _size;
1289 //return; 1293 //return;
1290 //} 1294 //}
1291 string oldname = _parent_scene.geom_name_map[prim_geom]; 1295 string oldname = _parent_scene.geom_name_map[prim_geom];
1292 1296
@@ -1300,7 +1304,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1300 // Cleanup meshing here 1304 // Cleanup meshing here
1301 } 1305 }
1302 //kill body to rebuild 1306 //kill body to rebuild
1303 if (IsPhysical && Body != (IntPtr) 0) 1307 if (IsPhysical && Body != (IntPtr)0)
1304 { 1308 {
1305 disableBody(); 1309 disableBody();
1306 } 1310 }
@@ -1314,7 +1318,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1314 // we don't need to do space calculation because the client sends a position update also. 1318 // we don't need to do space calculation because the client sends a position update also.
1315 1319
1316 // Construction of new prim 1320 // Construction of new prim
1317 if (_parent_scene.needsMeshing(_pbs)) 1321 //if (_parent_scene.needsMeshing(_pbs))
1318 { 1322 {
1319 float meshlod = _parent_scene.meshSculptLOD; 1323 float meshlod = _parent_scene.meshSculptLOD;
1320 1324
@@ -1322,7 +1326,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1322 meshlod = _parent_scene.MeshSculptphysicalLOD; 1326 meshlod = _parent_scene.MeshSculptphysicalLOD;
1323 // Don't need to re-enable body.. it's done in SetMesh 1327 // Don't need to re-enable body.. it's done in SetMesh
1324 IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical); 1328 IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
1325 // createmesh returns null when it's a shape that isn't a cube. 1329
1326 if (mesh != null) 1330 if (mesh != null)
1327 { 1331 {
1328 setMesh(_parent_scene, mesh); 1332 setMesh(_parent_scene, mesh);
@@ -1368,18 +1372,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1368 SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); 1372 SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1369 } 1373 }
1370 } 1374 }
1371 //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight) 1375
1372 //{
1373 //Cyllinder
1374 //if (_size.X == _size.Y)
1375 //{
1376 // prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
1377 //}
1378 //else
1379 //{
1380 //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
1381 //}
1382 //}
1383 else 1376 else
1384 { 1377 {
1385 _parent_scene.waitForSpaceUnlock(m_targetSpace); 1378 _parent_scene.waitForSpaceUnlock(m_targetSpace);
@@ -1395,55 +1388,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1395 d.GeomSetQuaternion(prim_geom, ref myrot); 1388 d.GeomSetQuaternion(prim_geom, ref myrot);
1396 } 1389 }
1397 } 1390 }
1398 else
1399 {
1400 if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
1401 {
1402 if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
1403 {
1404 _parent_scene.waitForSpaceUnlock(m_targetSpace);
1405 SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
1406 }
1407 else
1408 {
1409 _parent_scene.waitForSpaceUnlock(m_targetSpace);
1410 SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1411 }
1412 }
1413 //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
1414 //{
1415 //Cyllinder
1416 //if (_size.X == _size.Y)
1417 //{
1418 //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
1419 //}
1420 //else
1421 //{
1422 //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
1423 //}
1424 //}
1425 else
1426 {
1427 _parent_scene.waitForSpaceUnlock(m_targetSpace);
1428 SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1429 }
1430 d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
1431 d.Quaternion myrot = new d.Quaternion();
1432 myrot.W = _orientation.w;
1433 myrot.X = _orientation.x;
1434 myrot.Y = _orientation.y;
1435 myrot.Z = _orientation.z;
1436 d.GeomSetQuaternion(prim_geom, ref myrot);
1437
1438 //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
1439 if (IsPhysical && Body == (IntPtr) 0)
1440 {
1441 // Re creates body on size.
1442 // EnableBody also does setMass()
1443 enableBody();
1444 d.BodyEnable(Body);
1445 }
1446 }
1447 1391
1448 _parent_scene.geom_name_map[prim_geom] = oldname; 1392 _parent_scene.geom_name_map[prim_geom] = oldname;
1449 1393
@@ -1453,6 +1397,178 @@ namespace OpenSim.Region.Physics.OdePlugin
1453 m_taintsize = _size; 1397 m_taintsize = _size;
1454 } 1398 }
1455 1399
1400 //public void changesize(float timestamp)
1401 //{
1402 // //if (!_parent_scene.geom_name_map.ContainsKey(prim_geom))
1403 // //{
1404 // // m_taintsize = _size;
1405 // //return;
1406 // //}
1407 // string oldname = _parent_scene.geom_name_map[prim_geom];
1408
1409 // if (_size.X <= 0) _size.X = 0.01f;
1410 // if (_size.Y <= 0) _size.Y = 0.01f;
1411 // if (_size.Z <= 0) _size.Z = 0.01f;
1412
1413 // // Cleanup of old prim geometry
1414 // if (_mesh != null)
1415 // {
1416 // // Cleanup meshing here
1417 // }
1418 // //kill body to rebuild
1419 // if (IsPhysical && Body != (IntPtr) 0)
1420 // {
1421 // disableBody();
1422 // }
1423 // if (d.SpaceQuery(m_targetSpace, prim_geom))
1424 // {
1425 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1426 // d.SpaceRemove(m_targetSpace, prim_geom);
1427 // }
1428 // d.GeomDestroy(prim_geom);
1429 // prim_geom = (IntPtr)0;
1430 // // we don't need to do space calculation because the client sends a position update also.
1431
1432 // // Construction of new prim
1433 // if (_parent_scene.needsMeshing(_pbs))
1434 // {
1435 // float meshlod = _parent_scene.meshSculptLOD;
1436
1437 // if (IsPhysical)
1438 // meshlod = _parent_scene.MeshSculptphysicalLOD;
1439 // // Don't need to re-enable body.. it's done in SetMesh
1440 // IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
1441 // // createmesh returns null when it's a shape that isn't a cube.
1442 // if (mesh != null)
1443 // {
1444 // setMesh(_parent_scene, mesh);
1445 // d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
1446 // d.Quaternion myrot = new d.Quaternion();
1447 // myrot.W = _orientation.w;
1448 // myrot.X = _orientation.x;
1449 // myrot.Y = _orientation.y;
1450 // myrot.Z = _orientation.z;
1451 // d.GeomSetQuaternion(prim_geom, ref myrot);
1452
1453 // //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
1454 // if (IsPhysical && Body == (IntPtr)0)
1455 // {
1456 // // Re creates body on size.
1457 // // EnableBody also does setMass()
1458 // enableBody();
1459 // d.BodyEnable(Body);
1460 // }
1461 // }
1462 // else
1463 // {
1464 // if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
1465 // {
1466 // if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
1467 // {
1468 // if (((_size.X / 2f) > 0f) && ((_size.X / 2f) < 1000))
1469 // {
1470 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1471 // SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
1472 // }
1473 // else
1474 // {
1475 // m_log.Info("[PHYSICS]: Failed to load a sphere bad size");
1476 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1477 // SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1478 // }
1479
1480 // }
1481 // else
1482 // {
1483 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1484 // SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1485 // }
1486 // }
1487 // //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
1488 // //{
1489 // //Cyllinder
1490 // //if (_size.X == _size.Y)
1491 // //{
1492 // // prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
1493 // //}
1494 // //else
1495 // //{
1496 // //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
1497 // //}
1498 // //}
1499 // else
1500 // {
1501 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1502 // SetGeom(prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1503 // }
1504 // //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
1505 // d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
1506 // d.Quaternion myrot = new d.Quaternion();
1507 // myrot.W = _orientation.w;
1508 // myrot.X = _orientation.x;
1509 // myrot.Y = _orientation.y;
1510 // myrot.Z = _orientation.z;
1511 // d.GeomSetQuaternion(prim_geom, ref myrot);
1512 // }
1513 // }
1514 // else
1515 // {
1516 // if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
1517 // {
1518 // if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
1519 // {
1520 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1521 // SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
1522 // }
1523 // else
1524 // {
1525 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1526 // SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1527 // }
1528 // }
1529 // //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
1530 // //{
1531 // //Cyllinder
1532 // //if (_size.X == _size.Y)
1533 // //{
1534 // //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
1535 // //}
1536 // //else
1537 // //{
1538 // //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
1539 // //}
1540 // //}
1541 // else
1542 // {
1543 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1544 // SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1545 // }
1546 // d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
1547 // d.Quaternion myrot = new d.Quaternion();
1548 // myrot.W = _orientation.w;
1549 // myrot.X = _orientation.x;
1550 // myrot.Y = _orientation.y;
1551 // myrot.Z = _orientation.z;
1552 // d.GeomSetQuaternion(prim_geom, ref myrot);
1553
1554 // //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
1555 // if (IsPhysical && Body == (IntPtr) 0)
1556 // {
1557 // // Re creates body on size.
1558 // // EnableBody also does setMass()
1559 // enableBody();
1560 // d.BodyEnable(Body);
1561 // }
1562 // }
1563
1564 // _parent_scene.geom_name_map[prim_geom] = oldname;
1565
1566 // changeSelectedStatus(timestamp);
1567
1568 // resetCollisionAccounting();
1569 // m_taintsize = _size;
1570 //}
1571
1456 public void changefloatonwater(float timestep) 1572 public void changefloatonwater(float timestep)
1457 { 1573 {
1458 m_collidesWater = m_taintCollidesWater; 1574 m_collidesWater = m_taintCollidesWater;
@@ -1488,7 +1604,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1488 if (_size.Z <= 0) _size.Z = 0.01f; 1604 if (_size.Z <= 0) _size.Z = 0.01f;
1489 // Construction of new prim 1605 // Construction of new prim
1490 1606
1491 if (_parent_scene.needsMeshing(_pbs)) 1607 //if (_parent_scene.needsMeshing(_pbs))
1492 { 1608 {
1493 // Don't need to re-enable body.. it's done in SetMesh 1609 // Don't need to re-enable body.. it's done in SetMesh
1494 float meshlod = _parent_scene.meshSculptLOD; 1610 float meshlod = _parent_scene.meshSculptLOD;
@@ -1568,55 +1684,55 @@ namespace OpenSim.Region.Physics.OdePlugin
1568 d.GeomSetQuaternion(prim_geom, ref myrot); 1684 d.GeomSetQuaternion(prim_geom, ref myrot);
1569 } 1685 }
1570 } 1686 }
1571 else 1687 //else
1572 { 1688 //{
1573 if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1) 1689 // if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
1574 { 1690 // {
1575 if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z) 1691 // if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
1576 { 1692 // {
1577 _parent_scene.waitForSpaceUnlock(m_targetSpace); 1693 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1578 SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2)); 1694 // SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
1579 } 1695 // }
1580 else 1696 // else
1581 { 1697 // {
1582 _parent_scene.waitForSpaceUnlock(m_targetSpace); 1698 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1583 SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); 1699 // SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1584 } 1700 // }
1585 } 1701 // }
1586 //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight) 1702 // //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
1587 //{ 1703 // //{
1588 //Cyllinder 1704 // //Cyllinder
1589 //if (_size.X == _size.Y) 1705 // //if (_size.X == _size.Y)
1590 //{ 1706 // //{
1591 //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z); 1707 // //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
1592 //} 1708 // //}
1593 //else 1709 // //else
1594 //{ 1710 // //{
1595 //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z); 1711 // //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
1596 //} 1712 // //}
1597 //} 1713 // //}
1598 else 1714 // else
1599 { 1715 // {
1600 _parent_scene.waitForSpaceUnlock(m_targetSpace); 1716 // _parent_scene.waitForSpaceUnlock(m_targetSpace);
1601 SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); 1717 // SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
1602 } 1718 // }
1603 d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); 1719 // d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
1604 d.Quaternion myrot = new d.Quaternion(); 1720 // d.Quaternion myrot = new d.Quaternion();
1605 myrot.W = _orientation.w; 1721 // myrot.W = _orientation.w;
1606 myrot.X = _orientation.x; 1722 // myrot.X = _orientation.x;
1607 myrot.Y = _orientation.y; 1723 // myrot.Y = _orientation.y;
1608 myrot.Z = _orientation.z; 1724 // myrot.Z = _orientation.z;
1609 d.GeomSetQuaternion(prim_geom, ref myrot); 1725 // d.GeomSetQuaternion(prim_geom, ref myrot);
1610 1726
1611 //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z); 1727 // //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
1612 if (IsPhysical && Body == (IntPtr)0) 1728 // if (IsPhysical && Body == (IntPtr)0)
1613 { 1729 // {
1614 // Re creates body on size. 1730 // // Re creates body on size.
1615 // EnableBody also does setMass() 1731 // // EnableBody also does setMass()
1616 enableBody(); 1732 // enableBody();
1617 d.BodyEnable(Body); 1733 // d.BodyEnable(Body);
1618 } 1734 // }
1619 } 1735 //}
1620 1736
1621 _parent_scene.geom_name_map[prim_geom] = oldname; 1737 _parent_scene.geom_name_map[prim_geom] = oldname;
1622 1738
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
index cd5032c..ec0e0ff 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -1127,10 +1127,10 @@ namespace OpenSim.Region.Physics.OdePlugin
1127 private PhysicsActor AddPrim(String name, PhysicsVector position, PhysicsVector size, Quaternion rotation, 1127 private PhysicsActor AddPrim(String name, PhysicsVector position, PhysicsVector size, Quaternion rotation,
1128 IMesh mesh, PrimitiveBaseShape pbs, bool isphysical) 1128 IMesh mesh, PrimitiveBaseShape pbs, bool isphysical)
1129 { 1129 {
1130 PhysicsVector pos = new PhysicsVector(); 1130 PhysicsVector pos = new PhysicsVector(position.X, position.Y, position.Z);
1131 pos.X = position.X; 1131 //pos.X = position.X;
1132 pos.Y = position.Y; 1132 //pos.Y = position.Y;
1133 pos.Z = position.Z; 1133 //pos.Z = position.Z;
1134 PhysicsVector siz = new PhysicsVector(); 1134 PhysicsVector siz = new PhysicsVector();
1135 siz.X = size.X; 1135 siz.X = size.X;
1136 siz.Y = size.Y; 1136 siz.Y = size.Y;
@@ -1171,17 +1171,19 @@ namespace OpenSim.Region.Physics.OdePlugin
1171 PhysicsActor result; 1171 PhysicsActor result;
1172 IMesh mesh = null; 1172 IMesh mesh = null;
1173 1173
1174 switch (pbs.ProfileShape) 1174 //switch (pbs.ProfileShape)
1175 { 1175 //{
1176 case ProfileShape.Square: 1176 // case ProfileShape.Square:
1177 /// support simple box & hollow box now; later, more shapes 1177 /// support simple box & hollow box now; later, more shapes
1178 if (needsMeshing(pbs)) 1178 //if (needsMeshing(pbs))
1179 { 1179 //{
1180 mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical); 1180 // mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical);
1181 } 1181 //}
1182 1182
1183 break; 1183 // break;
1184 } 1184 //}
1185
1186 mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical);
1185 1187
1186 result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical); 1188 result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical);
1187 1189
@@ -1521,61 +1523,61 @@ namespace OpenSim.Region.Physics.OdePlugin
1521 /// </summary> 1523 /// </summary>
1522 /// <param name="pbs"></param> 1524 /// <param name="pbs"></param>
1523 /// <returns></returns> 1525 /// <returns></returns>
1524 public bool needsMeshing(PrimitiveBaseShape pbs) 1526 //public bool needsMeshing(PrimitiveBaseShape pbs)
1525 { 1527 //{
1526 //if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle && pbs.ProfileCurve == (byte)LLObject.ProfileCurve.Circle && pbs.PathScaleY <= 0.75f) 1528 // //if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle && pbs.ProfileCurve == (byte)LLObject.ProfileCurve.Circle && pbs.PathScaleY <= 0.75f)
1527 //Console.WriteLine("needsMeshing: " + " pathCurve: " + pbs.PathCurve.ToString() + " profileCurve: " + pbs.ProfileCurve.ToString() + " pathScaleY: " + LLObject.UnpackPathScale(pbs.PathScaleY).ToString()); 1529 // //Console.WriteLine("needsMeshing: " + " pathCurve: " + pbs.PathCurve.ToString() + " profileCurve: " + pbs.ProfileCurve.ToString() + " pathScaleY: " + LLObject.UnpackPathScale(pbs.PathScaleY).ToString());
1528 if (pbs.SculptEntry && !meshSculptedPrim) 1530 // if (pbs.SculptEntry && !meshSculptedPrim)
1529 { 1531 // {
1530 return false; 1532 // return false;
1531 } 1533 // }
1532 1534
1533 if (pbs.ProfileHollow != 0) 1535 // if (pbs.ProfileHollow != 0)
1534 return true; 1536 // return true;
1535 1537
1536 if (((Int16)pbs.PathTwistBegin != 0) || ((Int16)pbs.PathTwist != 0)) 1538 // if (((Int16)pbs.PathTwistBegin != 0) || ((Int16)pbs.PathTwist != 0))
1537 return true; 1539 // return true;
1538 1540
1539 if ((pbs.ProfileBegin != 0) || pbs.ProfileEnd != 0) 1541 // if ((pbs.ProfileBegin != 0) || pbs.ProfileEnd != 0)
1540 return true; 1542 // return true;
1541 1543
1542 if ((pbs.PathScaleX != 100) || (pbs.PathScaleY != 100)) 1544 // if ((pbs.PathScaleX != 100) || (pbs.PathScaleY != 100))
1543 return true; 1545 // return true;
1544 1546
1545 if ((pbs.PathShearX != 0) || (pbs.PathShearY != 0)) 1547 // if ((pbs.PathShearX != 0) || (pbs.PathShearY != 0))
1546 return true; 1548 // return true;
1547 1549
1548 if (pbs.ProfileShape == ProfileShape.Circle && pbs.PathCurve == (byte)Extrusion.Straight) 1550 // if (pbs.ProfileShape == ProfileShape.Circle && pbs.PathCurve == (byte)Extrusion.Straight)
1549 return true; 1551 // return true;
1550 //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)) 1552 // //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))
1551 // return true; 1553 // // return true;
1552 1554
1553 if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte) Extrusion.Curve1) 1555 // if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte) Extrusion.Curve1)
1554 return true; 1556 // return true;
1555 1557
1556 // test for torus 1558 // // test for torus
1557 if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle 1559 // if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle
1558 && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.Circle 1560 // && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.Circle
1559 && LLObject.UnpackPathScale(pbs.PathScaleY) <= 0.75f) 1561 // && LLObject.UnpackPathScale(pbs.PathScaleY) <= 0.75f)
1560 return true; 1562 // return true;
1561 1563
1562 // test for tube 1564 // // test for tube
1563 if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle 1565 // if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle
1564 && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle) 1566 // && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle)
1565 return true; 1567 // return true;
1566 1568
1567 // test for ring 1569 // // test for ring
1568 if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle 1570 // if (pbs.PathCurve == (byte)LLObject.PathCurve.Circle
1569 && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle) 1571 // && (pbs.ProfileCurve & 0x07) == (byte)LLObject.ProfileCurve.EqualTriangle)
1570 return true; 1572 // return true;
1571 1573
1572 if (pbs.ProfileShape == ProfileShape.EquilateralTriangle) 1574 // if (pbs.ProfileShape == ProfileShape.EquilateralTriangle)
1573 return true; 1575 // return true;
1574 1576
1575 1577
1576 1578
1577 return false; 1579 // return false;
1578 } 1580 //}
1579 1581
1580 /// <summary> 1582 /// <summary>
1581 /// Called after our prim properties are set Scale, position etc. 1583 /// Called after our prim properties are set Scale, position etc.