aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r--OpenSim/Region/Physics/Meshing/Extruder.cs13
-rw-r--r--OpenSim/Region/Physics/Meshing/Meshmerizer.cs68
-rw-r--r--OpenSim/Region/Physics/Meshing/SimpleHull.cs16
3 files changed, 83 insertions, 14 deletions
diff --git a/OpenSim/Region/Physics/Meshing/Extruder.cs b/OpenSim/Region/Physics/Meshing/Extruder.cs
index 7ef5b5b..5886c9e 100644
--- a/OpenSim/Region/Physics/Meshing/Extruder.cs
+++ b/OpenSim/Region/Physics/Meshing/Extruder.cs
@@ -36,6 +36,11 @@ namespace OpenSim.Region.Physics.Meshing
36 public float stopParameter; 36 public float stopParameter;
37 public PhysicsVector size; 37 public PhysicsVector size;
38 38
39 public float taperTopFactorX = 1f;
40 public float taperTopFactorY = 1f;
41 public float taperBotFactorX = 1f;
42 public float taperBotFactorY = 1f;
43
39 public Mesh Extrude(Mesh m) 44 public Mesh Extrude(Mesh m)
40 { 45 {
41 // Currently only works for iSteps=1; 46 // Currently only works for iSteps=1;
@@ -50,8 +55,8 @@ namespace OpenSim.Region.Physics.Meshing
50 continue; 55 continue;
51 56
52 v.Z = +.5f; 57 v.Z = +.5f;
53 v.X *= size.X; 58 v.X *= (size.X * taperTopFactorX);
54 v.Y *= size.Y; 59 v.Y *= (size.Y * taperTopFactorY);
55 v.Z *= size.Z; 60 v.Z *= size.Z;
56 } 61 }
57 62
@@ -61,8 +66,8 @@ namespace OpenSim.Region.Physics.Meshing
61 continue; 66 continue;
62 67
63 v.Z = -.5f; 68 v.Z = -.5f;
64 v.X *= size.X; 69 v.X *= (size.X * taperBotFactorX);
65 v.Y *= size.Y; 70 v.Y *= (size.Y * taperBotFactorY);
66 v.Z *= size.Z; 71 v.Z *= size.Z;
67 } 72 }
68 73
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
index 2d80287..a2bbd3a 100644
--- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
@@ -58,7 +58,7 @@ namespace OpenSim.Region.Physics.Meshing
58 // Setting baseDir to a path will enable the dumping of raw files 58 // Setting baseDir to a path will enable the dumping of raw files
59 // raw files can be imported by blender so a visual inspection of the results can be done 59 // raw files can be imported by blender so a visual inspection of the results can be done
60 // const string baseDir = "rawFiles"; 60 // const string baseDir = "rawFiles";
61 private const string baseDir = null; 61 private const string baseDir = null; //"rawFiles";
62 62
63 private static void IntersectionParameterPD(PhysicsVector p1, PhysicsVector r1, PhysicsVector p2, 63 private static void IntersectionParameterPD(PhysicsVector p1, PhysicsVector r1, PhysicsVector p2,
64 PhysicsVector r2, ref float lambda, ref float mu) 64 PhysicsVector r2, ref float lambda, ref float mu)
@@ -181,7 +181,13 @@ namespace OpenSim.Region.Physics.Meshing
181 UInt16 hollowFactor = primShape.ProfileHollow; 181 UInt16 hollowFactor = primShape.ProfileHollow;
182 UInt16 profileBegin = primShape.ProfileBegin; 182 UInt16 profileBegin = primShape.ProfileBegin;
183 UInt16 profileEnd = primShape.ProfileEnd; 183 UInt16 profileEnd = primShape.ProfileEnd;
184 UInt16 taperX = primShape.PathScaleX;
185 UInt16 taperY = primShape.PathScaleY;
184 186
187 //m_log.Error("pathShear:" + primShape.PathShearX.ToString() + "," + primShape.PathShearY.ToString());
188 //m_log.Error("pathTaper:" + primShape.PathTaperX.ToString() + "," + primShape.PathTaperY.ToString());
189 //m_log.Error("ProfileBegin:" + primShape.ProfileBegin.ToString() + "," + primShape.ProfileBegin.ToString());
190 //m_log.Error("PathScale:" + primShape.PathScaleX.ToString() + "," + primShape.PathScaleY.ToString());
185 // Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface 191 // Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface
186 // of a block are basically the same 192 // of a block are basically the same
187 // They may be warped differently but the shape is identical 193 // They may be warped differently but the shape is identical
@@ -299,6 +305,35 @@ namespace OpenSim.Region.Physics.Meshing
299 305
300 extr.size = size; 306 extr.size = size;
301 307
308 if (taperX != 100)
309 {
310 if (taperX > 100)
311 {
312 extr.taperTopFactorX = 1.0f - ((float)taperX / 200);
313 //m_log.Warn("taperTopFactorX: " + extr.taperTopFactorX.ToString());
314 }
315 else
316 {
317 extr.taperBotFactorX = 1.0f - ((100 - (float)taperX) / 100);
318 //m_log.Warn("taperBotFactorX: " + extr.taperBotFactorX.ToString());
319 }
320
321 }
322
323 if (taperY != 100)
324 {
325 if (taperY > 100)
326 {
327 extr.taperTopFactorY = 1.0f - ((float)taperY / 200);
328 //m_log.Warn("taperTopFactorY: " + extr.taperTopFactorY.ToString());
329 }
330 else
331 {
332 extr.taperBotFactorY = 1.0f - ((100 - (float)taperY) / 100);
333 //m_log.Warn("taperBotFactorY: " + extr.taperBotFactorY.ToString());
334 }
335 }
336
302 Mesh result = extr.Extrude(m); 337 Mesh result = extr.Extrude(m);
303 result.DumpRaw(baseDir, primName, "Z extruded"); 338 result.DumpRaw(baseDir, primName, "Z extruded");
304 return result; 339 return result;
@@ -309,7 +344,8 @@ namespace OpenSim.Region.Physics.Meshing
309 UInt16 hollowFactor = primShape.ProfileHollow; 344 UInt16 hollowFactor = primShape.ProfileHollow;
310 UInt16 profileBegin = primShape.ProfileBegin; 345 UInt16 profileBegin = primShape.ProfileBegin;
311 UInt16 profileEnd = primShape.ProfileEnd; 346 UInt16 profileEnd = primShape.ProfileEnd;
312 347 UInt16 taperX = primShape.PathScaleX;
348 UInt16 taperY = primShape.PathScaleY;
313 // Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface 349 // Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface
314 // of a block are basically the same 350 // of a block are basically the same
315 // They may be warped differently but the shape is identical 351 // They may be warped differently but the shape is identical
@@ -589,7 +625,35 @@ namespace OpenSim.Region.Physics.Meshing
589 Extruder extr = new Extruder(); 625 Extruder extr = new Extruder();
590 626
591 extr.size = size; 627 extr.size = size;
628 if (taperX != 100)
629 {
630 if (taperX > 100)
631 {
632 extr.taperTopFactorX = 1.0f - ((float)taperX / 200);
633 //m_log.Warn("taperTopFactorX: " + extr.taperTopFactorX.ToString());
634 }
635 else
636 {
637 extr.taperBotFactorX = 1.0f - ((100 - (float)taperX) / 100);
638 //m_log.Warn("taperBotFactorX: " + extr.taperBotFactorX.ToString());
639 }
640
641 }
592 642
643 if (taperY != 100)
644 {
645 if (taperY > 100)
646 {
647 extr.taperTopFactorY = 1.0f - ((float)taperY / 200);
648 //m_log.Warn("taperTopFactorY: " + extr.taperTopFactorY.ToString());
649 }
650 else
651 {
652 extr.taperBotFactorY = 1.0f - ((100 - (float)taperY) / 100);
653 //m_log.Warn("taperBotFactorY: " + extr.taperBotFactorY.ToString());
654 }
655 }
656
593 Mesh result = extr.Extrude(m); 657 Mesh result = extr.Extrude(m);
594 result.DumpRaw(baseDir, primName, "Z extruded"); 658 result.DumpRaw(baseDir, primName, "Z extruded");
595 return result; 659 return result;
diff --git a/OpenSim/Region/Physics/Meshing/SimpleHull.cs b/OpenSim/Region/Physics/Meshing/SimpleHull.cs
index 9209860..e9cce3b 100644
--- a/OpenSim/Region/Physics/Meshing/SimpleHull.cs
+++ b/OpenSim/Region/Physics/Meshing/SimpleHull.cs
@@ -245,9 +245,9 @@ namespace OpenSim.Region.Physics.Meshing
245 SimpleHull otherHullClone = otherHull.Clone(); 245 SimpleHull otherHullClone = otherHull.Clone();
246 bool intersects = false; 246 bool intersects = false;
247 247
248 m_log.Debug("State before intersection detection"); 248 //m_log.Debug("State before intersection detection");
249 m_log.Debug(String.Format("The baseHull is:\n{1}", 0, baseHullClone.ToString())); 249 //m_log.Debug(String.Format("The baseHull is:\n{1}", 0, baseHullClone.ToString()));
250 m_log.Debug(String.Format("The otherHull is:\n{1}", 0, otherHullClone.ToString())); 250 //m_log.Debug(String.Format("The otherHull is:\n{1}", 0, otherHullClone.ToString()));
251 251
252 { 252 {
253 int iBase, iOther; 253 int iBase, iOther;
@@ -276,8 +276,8 @@ namespace OpenSim.Region.Physics.Meshing
276 } 276 }
277 } 277 }
278 278
279 m_log.Debug("State after intersection detection for the base hull"); 279 //m_log.Debug("State after intersection detection for the base hull");
280 m_log.Debug(String.Format("The baseHull is:\n{1}", 0, baseHullClone.ToString())); 280 //m_log.Debug(String.Format("The baseHull is:\n{1}", 0, baseHullClone.ToString()));
281 281
282 { 282 {
283 int iOther, iBase; 283 int iOther, iBase;
@@ -305,8 +305,8 @@ namespace OpenSim.Region.Physics.Meshing
305 } 305 }
306 } 306 }
307 307
308 m_log.Debug("State after intersection detection for the base hull"); 308 //m_log.Debug("State after intersection detection for the base hull");
309 m_log.Debug(String.Format("The otherHull is:\n{1}", 0, otherHullClone.ToString())); 309 //m_log.Debug(String.Format("The otherHull is:\n{1}", 0, otherHullClone.ToString()));
310 310
311 311
312 bool otherIsInBase = baseHullClone.containsPointsFrom(otherHullClone); 312 bool otherIsInBase = baseHullClone.containsPointsFrom(otherHullClone);
@@ -389,7 +389,7 @@ namespace OpenSim.Region.Physics.Meshing
389 done = true; 389 done = true;
390 } 390 }
391 391
392 m_log.Debug(String.Format("The resulting Hull is:\n{1}", 0, result.ToString())); 392 //m_log.Debug(String.Format("The resulting Hull is:\n{1}", 0, result.ToString()));
393 393
394 return result; 394 return result;
395 } 395 }