diff --git a/OpenMetaverse.Tests/TypeTests.cs b/OpenMetaverse.Tests/TypeTests.cs index 6d9d0fa4..ba9b0e51 100644 --- a/OpenMetaverse.Tests/TypeTests.cs +++ b/OpenMetaverse.Tests/TypeTests.cs @@ -71,6 +71,34 @@ namespace OpenMetaverse.Tests // TODO: CRC test } + [Test] + public void Vector3ApproxEquals() + { + Vector3 a = new Vector3(1f, 0f, 0f); + Vector3 b = new Vector3(0f, 0f, 0f); + + Assert.IsFalse(a.ApproxEquals(b, 0.9f), "ApproxEquals failed (1)"); + Assert.IsTrue(a.ApproxEquals(b, 1.0f), "ApproxEquals failed (2)"); + + a = new Vector3(-1f, 0f, 0f); + b = new Vector3(1f, 0f, 0f); + + Assert.IsFalse(a.ApproxEquals(b, 1.9f), "ApproxEquals failed (3)"); + Assert.IsTrue(a.ApproxEquals(b, 2.0f), "ApproxEquals failed (4)"); + + a = new Vector3(0f, -1f, 0f); + b = new Vector3(0f, -1.1f, 0f); + + Assert.IsFalse(a.ApproxEquals(b, 0.09f), "ApproxEquals failed (5)"); + Assert.IsTrue(a.ApproxEquals(b, 0.11f), "ApproxEquals failed (6)"); + + a = new Vector3(0f, 0f, 0.00001f); + b = new Vector3(0f, 0f, 0f); + + Assert.IsFalse(b.ApproxEquals(a, Single.Epsilon), "ApproxEquals failed (6)"); + Assert.IsTrue(b.ApproxEquals(a, 0.0001f), "ApproxEquals failed (7)"); + } + [Test] public void Quaternions() { diff --git a/OpenMetaverseTypes/UtilsConversions.cs b/OpenMetaverseTypes/UtilsConversions.cs index 1a120d8d..b4c71dcc 100644 --- a/OpenMetaverseTypes/UtilsConversions.cs +++ b/OpenMetaverseTypes/UtilsConversions.cs @@ -245,16 +245,16 @@ namespace OpenMetaverse /// at the given position public static long BytesToInt64(byte[] bytes, int pos) { - if (bytes.Length < 8) return 0; + if (bytes.Length < pos + 8) return 0; return (long) - ((long)bytes[0] + - ((long)bytes[1] << 8) + - ((long)bytes[2] << 16) + - ((long)bytes[3] << 24) + - ((long)bytes[4] << 32) + - ((long)bytes[5] << 40) + - ((long)bytes[6] << 48) + - ((long)bytes[7] << 56)); + ((long)bytes[pos + 0] + + ((long)bytes[pos + 1] << 8) + + ((long)bytes[pos + 2] << 16) + + ((long)bytes[pos + 3] << 24) + + ((long)bytes[pos + 4] << 32) + + ((long)bytes[pos + 5] << 40) + + ((long)bytes[pos + 6] << 48) + + ((long)bytes[pos + 7] << 56)); } /// diff --git a/Programs/PrimWorkshop/frmPrimWorkshop.cs b/Programs/PrimWorkshop/frmPrimWorkshop.cs index 1885e7c4..81c0089a 100644 --- a/Programs/PrimWorkshop/frmPrimWorkshop.cs +++ b/Programs/PrimWorkshop/frmPrimWorkshop.cs @@ -243,6 +243,25 @@ namespace PrimWorkshop } } + private void LoadDebugPrim() + { + Prims = new List(); + Primitive prim = new Primitive(); + prim.Textures = new Primitive.TextureEntry(UUID.Zero); + prim.Scale = Vector3.One; + prim.PrimData = ObjectManager.BuildBasicShape(PrimType.Cylinder); + prim.PrimData.ProfileHollow = 0.95f; + SimpleMesh simpleMesh = Render.Plugin.GenerateSimpleMesh(prim, DetailLevel.High); + FacetedMesh facetedMesh = new FacetedMesh(); + facetedMesh.Faces = new List { new Face { Vertices = simpleMesh.Vertices, Indices = simpleMesh.Indices } }; + facetedMesh.Path = simpleMesh.Path; + facetedMesh.Profile = simpleMesh.Profile; + facetedMesh.Prim = prim; + LoadMesh(facetedMesh, "."); + PopulatePrimCombobox(); + glControl.Invalidate(); + } + private void LoadXmlPrim(string filename) { byte[] data = File.ReadAllBytes(filename); @@ -641,7 +660,7 @@ namespace PrimWorkshop { cboFace.Items.Clear(); - if (CurrentPrim != null) + if (CurrentPrim != null && CurrentPrim.Profile.Faces != null) { for (int i = 0; i < CurrentPrim.Profile.Faces.Count; i++) cboFace.Items.Add(CurrentPrim.Profile.Faces[i]); diff --git a/bin/OpenMetaverse.Rendering.Linden.dll b/bin/OpenMetaverse.Rendering.Linden.dll index 92746eb2..9642a8d7 100644 Binary files a/bin/OpenMetaverse.Rendering.Linden.dll and b/bin/OpenMetaverse.Rendering.Linden.dll differ