From 968c6fb1cdd7a8d40d356d4aba99f3ec843aa746 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 1 Oct 2010 00:22:06 +0000 Subject: [PATCH] * Added unit tests for Vector3.ApproxEquals() * Fixed a bug in Utils.BytesToInt64() not handling non-zero pos values git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3445 52acb1d6-8a22-11de-b505-999d5b087335 --- OpenMetaverse.Tests/TypeTests.cs | 28 +++++++++++++++++++++++ OpenMetaverseTypes/UtilsConversions.cs | 18 +++++++-------- Programs/PrimWorkshop/frmPrimWorkshop.cs | 21 ++++++++++++++++- bin/OpenMetaverse.Rendering.Linden.dll | Bin 40960 -> 40960 bytes 4 files changed, 57 insertions(+), 10 deletions(-) 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 92746eb200b9f22b8d6d3ad3408b70388b9d172e..9642a8d7c47b7fa3946b90ec06fabe38b2fab562 100644 GIT binary patch literal 40960 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