aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs58
1 files changed, 29 insertions, 29 deletions
diff --git a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
index 7f0713a..163f439 100644
--- a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
+++ b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
@@ -58,8 +58,8 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
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 60
61 private bool m_Enabled = false; 61 private bool m_Enabled = false;
62 62
63 public static object diskLock = new object(); 63 public static object diskLock = new object();
64 64
65 public bool doMeshFileCache = true; 65 public bool doMeshFileCache = true;
@@ -120,7 +120,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
120 } 120 }
121 121
122 CacheExpire = TimeSpan.FromHours(fcache); 122 CacheExpire = TimeSpan.FromHours(fcache);
123 123
124 lock (diskLock) 124 lock (diskLock)
125 { 125 {
126 if(doMeshFileCache && cachePath != "") 126 if(doMeshFileCache && cachePath != "")
@@ -165,9 +165,9 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
165 if (!m_Enabled) 165 if (!m_Enabled)
166 return; 166 return;
167 } 167 }
168 168
169 #endregion 169 #endregion
170 170
171 /// <summary> 171 /// <summary>
172 /// creates a simple box mesh of the specified size. This mesh is of very low vertex count and may 172 /// creates a simple box mesh of the specified size. This mesh is of very low vertex count and may
173 /// be useful as a backup proxy when level of detail is not needed or when more complex meshes fail 173 /// be useful as a backup proxy when level of detail is not needed or when more complex meshes fail
@@ -266,7 +266,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
266 private void AddSubMesh(OSDMap subMeshData, List<Coord> coords, List<Face> faces) 266 private void AddSubMesh(OSDMap subMeshData, List<Coord> coords, List<Face> faces)
267 { 267 {
268 // Console.WriteLine("subMeshMap for {0} - {1}", primName, Util.GetFormattedXml((OSD)subMeshMap)); 268 // Console.WriteLine("subMeshMap for {0} - {1}", primName, Util.GetFormattedXml((OSD)subMeshMap));
269 269
270 // As per http://wiki.secondlife.com/wiki/Mesh/Mesh_Asset_Format, some Mesh Level 270 // As per http://wiki.secondlife.com/wiki/Mesh/Mesh_Asset_Format, some Mesh Level
271 // of Detail Blocks (maps) contain just a NoGeometry key to signal there is no 271 // of Detail Blocks (maps) contain just a NoGeometry key to signal there is no
272 // geometry for this submesh. 272 // geometry for this submesh.
@@ -294,15 +294,15 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
294 ushort uX = Utils.BytesToUInt16(posBytes, i); 294 ushort uX = Utils.BytesToUInt16(posBytes, i);
295 ushort uY = Utils.BytesToUInt16(posBytes, i + 2); 295 ushort uY = Utils.BytesToUInt16(posBytes, i + 2);
296 ushort uZ = Utils.BytesToUInt16(posBytes, i + 4); 296 ushort uZ = Utils.BytesToUInt16(posBytes, i + 4);
297 297
298 Coord c = new Coord( 298 Coord c = new Coord(
299 Utils.UInt16ToFloat(uX, posMin.X, posMax.X), 299 Utils.UInt16ToFloat(uX, posMin.X, posMax.X),
300 Utils.UInt16ToFloat(uY, posMin.Y, posMax.Y), 300 Utils.UInt16ToFloat(uY, posMin.Y, posMax.Y),
301 Utils.UInt16ToFloat(uZ, posMin.Z, posMax.Z)); 301 Utils.UInt16ToFloat(uZ, posMin.Z, posMax.Z));
302 302
303 coords.Add(c); 303 coords.Add(c);
304 } 304 }
305 305
306 byte[] triangleBytes = subMeshData["TriangleList"].AsBinary(); 306 byte[] triangleBytes = subMeshData["TriangleList"].AsBinary();
307 for (int i = 0; i < triangleBytes.Length; i += 6) 307 for (int i = 0; i < triangleBytes.Length; i += 6)
308 { 308 {
@@ -448,7 +448,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
448 if (physicsParms != null) 448 if (physicsParms != null)
449 usemesh = true; 449 usemesh = true;
450 } 450 }
451 451
452 if(!usemesh && (map.ContainsKey("physics_convex"))) 452 if(!usemesh && (map.ContainsKey("physics_convex")))
453 physicsParms = (OSDMap)map["physics_convex"]; 453 physicsParms = (OSDMap)map["physics_convex"];
454 454
@@ -488,9 +488,9 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
488 488
489 byte[] decompressedBuf = outMs.GetBuffer(); 489 byte[] decompressedBuf = outMs.GetBuffer();
490 490
491 decodedMeshOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf); 491 decodedMeshOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf);
492 } 492 }
493 } 493 }
494 } 494 }
495 } 495 }
496 catch (Exception e) 496 catch (Exception e)
@@ -622,7 +622,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
622 faces.Add(f); 622 faces.Add(f);
623 } 623 }
624 vertsoffset += vs.Count; 624 vertsoffset += vs.Count;
625 vs.Clear(); 625 vs.Clear();
626 continue; 626 continue;
627 } 627 }
628 /* 628 /*
@@ -648,7 +648,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
648 c.Z = hullr.Vertices[i].z; 648 c.Z = hullr.Vertices[i].z;
649 coords.Add(c); 649 coords.Add(c);
650 } 650 }
651 651
652 for (i = 0; i < nindexs; i += 3) 652 for (i = 0; i < nindexs; i += 3)
653 { 653 {
654 t1 = hullr.Indices[i]; 654 t1 = hullr.Indices[i];
@@ -687,7 +687,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
687 c.Z = vs[i].z; 687 c.Z = vs[i].z;
688 coords.Add(c); 688 coords.Add(c);
689 } 689 }
690 690
691 for (i = 0; i < nindexs; i += 3) 691 for (i = 0; i < nindexs; i += 3)
692 { 692 {
693 t1 = indices[i]; 693 t1 = indices[i];
@@ -707,12 +707,12 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
707 } 707 }
708 } 708 }
709 if (coords.Count > 0 && faces.Count > 0) 709 if (coords.Count > 0 && faces.Count > 0)
710 return true; 710 return true;
711 } 711 }
712 else 712 else
713 { 713 {
714 // if neither mesh or decomposition present, warn and use convex 714 // if neither mesh or decomposition present, warn and use convex
715 m_log.WarnFormat("[MESH]: Data for PRIM shape type ( mesh or decomposition) not found for prim {0}",primName); 715 m_log.WarnFormat("[MESH]: Data for PRIM shape type ( mesh or decomposition) not found for prim {0}",primName);
716 } 716 }
717 } 717 }
718 vs.Clear(); 718 vs.Clear();
@@ -947,7 +947,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
947 { 947 {
948 PrimMesh primMesh; 948 PrimMesh primMesh;
949 coords = new List<Coord>(); 949 coords = new List<Coord>();
950 faces = new List<Face>(); 950 faces = new List<Face>();
951 951
952 float pathShearX = primShape.PathShearX < 128 ? (float)primShape.PathShearX * 0.01f : (float)(primShape.PathShearX - 256) * 0.01f; 952 float pathShearX = primShape.PathShearX < 128 ? (float)primShape.PathShearX * 0.01f : (float)(primShape.PathShearX - 256) * 0.01f;
953 float pathShearY = primShape.PathShearY < 128 ? (float)primShape.PathShearY * 0.01f : (float)(primShape.PathShearY - 256) * 0.01f; 953 float pathShearY = primShape.PathShearY < 128 ? (float)primShape.PathShearY * 0.01f : (float)(primShape.PathShearY - 256) * 0.01f;
@@ -975,7 +975,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
975 profileHollow = 0.0f; 975 profileHollow = 0.0f;
976 else if (profileHollow > 0.95f) 976 else if (profileHollow > 0.95f)
977 profileHollow = 0.95f; 977 profileHollow = 0.95f;
978 978
979 int sides = 4; 979 int sides = 4;
980 LevelOfDetail iLOD = (LevelOfDetail)lod; 980 LevelOfDetail iLOD = (LevelOfDetail)lod;
981 byte profshape = (byte)(primShape.ProfileCurve & 0x07); 981 byte profshape = (byte)(primShape.ProfileCurve & 0x07);
@@ -1033,7 +1033,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
1033 } 1033 }
1034 1034
1035 primMesh = new PrimMesh(sides, profileBegin, profileEnd, profileHollow, hollowSides); 1035 primMesh = new PrimMesh(sides, profileBegin, profileEnd, profileHollow, hollowSides);
1036 1036
1037 if (primMesh.errorMessage != null) 1037 if (primMesh.errorMessage != null)
1038 if (primMesh.errorMessage.Length > 0) 1038 if (primMesh.errorMessage.Length > 0)
1039 m_log.Error("[ERROR] " + primMesh.errorMessage); 1039 m_log.Error("[ERROR] " + primMesh.errorMessage);
@@ -1162,7 +1162,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
1162 for (int i = 0; i < someBytes.Length; i++) 1162 for (int i = 0; i < someBytes.Length; i++)
1163 hash = mdjb2(hash, someBytes[i]); 1163 hash = mdjb2(hash, someBytes[i]);
1164 hash = hash << 8; 1164 hash = hash << 8;
1165 } 1165 }
1166 1166
1167 if (convex) 1167 if (convex)
1168 hash |= 4; 1168 hash |= 4;
@@ -1204,7 +1204,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
1204 { 1204 {
1205 return CreateMesh(primName, primShape, size, lod, false, false, false); 1205 return CreateMesh(primName, primShape, size, lod, false, false, false);
1206 } 1206 }
1207 1207
1208 public IMesh GetMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex) 1208 public IMesh GetMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex)
1209 { 1209 {
1210 Mesh mesh = null; 1210 Mesh mesh = null;
@@ -1245,7 +1245,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
1245 } 1245 }
1246 1246
1247 private static Vector3 m_MeshUnitSize = new Vector3(1.0f, 1.0f, 1.0f); 1247 private static Vector3 m_MeshUnitSize = new Vector3(1.0f, 1.0f, 1.0f);
1248 1248
1249 public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex, bool forOde) 1249 public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex, bool forOde)
1250 { 1250 {
1251#if SPAM 1251#if SPAM
@@ -1348,7 +1348,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
1348 m_uniqueMeshes.Add(key, mesh); 1348 m_uniqueMeshes.Add(key, mesh);
1349 } 1349 }
1350 catch { } 1350 catch { }
1351 } 1351 }
1352 1352
1353 return mesh; 1353 return mesh;
1354 } 1354 }
@@ -1380,7 +1380,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
1380 m_uniqueReleasedMeshes.Add(mesh.Key, mesh); 1380 m_uniqueReleasedMeshes.Add(mesh.Key, mesh);
1381 } 1381 }
1382 catch { } 1382 catch { }
1383 } 1383 }
1384 } 1384 }
1385 } 1385 }
1386 1386
@@ -1447,7 +1447,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
1447// BinaryFormatter bformatter = new BinaryFormatter(); 1447// BinaryFormatter bformatter = new BinaryFormatter();
1448 mesh = Mesh.FromStream(stream,key); 1448 mesh = Mesh.FromStream(stream,key);
1449 } 1449 }
1450 1450
1451 } 1451 }
1452 catch (Exception e) 1452 catch (Exception e)
1453 { 1453 {
@@ -1524,7 +1524,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
1524 } 1524 }
1525 } 1525 }
1526 } 1526 }
1527 1527
1528 public void ExpireFileCache() 1528 public void ExpireFileCache()
1529 { 1529 {
1530 if (!doCacheExpire) 1530 if (!doCacheExpire)
@@ -1543,8 +1543,8 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
1543 int ndirs = 0; 1543 int ndirs = 0;
1544 DateTime OlderTime = File.GetLastAccessTimeUtc(controlfile) - CacheExpire; 1544 DateTime OlderTime = File.GetLastAccessTimeUtc(controlfile) - CacheExpire;
1545 File.SetLastAccessTimeUtc(controlfile, DateTime.UtcNow); 1545 File.SetLastAccessTimeUtc(controlfile, DateTime.UtcNow);
1546 1546
1547 foreach (string dir in Directory.GetDirectories(cachePath)) 1547 foreach (string dir in Directory.GetDirectories(cachePath))
1548 { 1548 {
1549 try 1549 try
1550 { 1550 {