public void Clone() { DynamicAabbTree <int> partition = new DynamicAabbTree <int>(); partition.GetAabbForItem = i => new Aabb(); partition.EnableSelfOverlaps = true; partition.Filter = new DelegatePairFilter <int>(pair => true); partition.EnableMotionPrediction = true; partition.MotionPrediction = 0.25f; partition.OptimizationPerFrame = 0.1f; partition.RelativeMargin = 0.33f; partition.Add(0); partition.Add(1); partition.Add(2); partition.Add(3); var clone = (DynamicAabbTree <int>)partition.Clone(); Assert.NotNull(clone); Assert.AreNotSame(clone, partition); Assert.AreEqual(clone.EnableSelfOverlaps, partition.EnableSelfOverlaps); Assert.AreEqual(clone.Filter, partition.Filter); Assert.AreEqual(clone.EnableMotionPrediction, partition.EnableMotionPrediction); Assert.AreEqual(clone.MotionPrediction, partition.MotionPrediction); Assert.AreEqual(clone.OptimizationPerFrame, partition.OptimizationPerFrame); Assert.AreEqual(clone.RelativeMargin, partition.RelativeMargin); Assert.AreEqual(0, clone.Count); clone.Add(0); Assert.AreEqual(4, partition.Count); Assert.AreEqual(1, clone.Count); }
public void Clone() { AdaptiveAabbTree <int> staticPartition = new AdaptiveAabbTree <int>(); DynamicAabbTree <int> dynamicPartition = new DynamicAabbTree <int>(); DualPartition <int> partition = new DualPartition <int>(staticPartition, dynamicPartition); partition.GetAabbForItem = i => new Aabb(); partition.EnableSelfOverlaps = true; partition.Filter = new DelegatePairFilter <int>(pair => true); partition.Add(0); partition.Add(1); partition.Add(2); partition.Add(3); var clone = partition.Clone(); Assert.NotNull(clone); Assert.AreNotSame(clone, partition); Assert.AreEqual(clone.EnableSelfOverlaps, partition.EnableSelfOverlaps); Assert.AreEqual(clone.Filter, partition.Filter); Assert.AreEqual(0, clone.Count); clone.Add(0); Assert.AreEqual(4, partition.Count); Assert.AreEqual(1, clone.Count); }
public void NaNWithValidation() { GlobalSettings.ValidationLevel = 0xff; var partition = new DynamicAabbTree <int>(); partition.EnableSelfOverlaps = true; partition.GetAabbForItem = GetAabbForItem; partition.Add(1); partition.Add(4); partition.Add(2); partition.Add(3); // Full rebuild. Assert.Throws <GeometryException>(() => partition.Update(true)); partition = new DynamicAabbTree <int>(); partition.EnableSelfOverlaps = true; partition.GetAabbForItem = GetAabbForItem; partition.Add(1); partition.Add(2); partition.Add(3); partition.Update(true); partition.Add(4); // Partial rebuild. Assert.Throws <GeometryException>(() => partition.Update(false)); }
public void Clone() { DynamicAabbTree<int> partition = new DynamicAabbTree<int>(); partition.GetAabbForItem = i => new Aabb(); partition.EnableSelfOverlaps = true; partition.Filter = new DelegatePairFilter<int>(pair => true); partition.EnableMotionPrediction = true; partition.MotionPrediction = 0.25f; partition.OptimizationPerFrame = 0.1f; partition.RelativeMargin = 0.33f; partition.Add(0); partition.Add(1); partition.Add(2); partition.Add(3); var clone = (DynamicAabbTree<int>)partition.Clone(); Assert.NotNull(clone); Assert.AreNotSame(clone, partition); Assert.AreEqual(clone.EnableSelfOverlaps, partition.EnableSelfOverlaps); Assert.AreEqual(clone.Filter, partition.Filter); Assert.AreEqual(clone.EnableMotionPrediction, partition.EnableMotionPrediction); Assert.AreEqual(clone.MotionPrediction, partition.MotionPrediction); Assert.AreEqual(clone.OptimizationPerFrame, partition.OptimizationPerFrame); Assert.AreEqual(clone.RelativeMargin, partition.RelativeMargin); Assert.AreEqual(0, clone.Count); clone.Add(0); Assert.AreEqual(4, partition.Count); Assert.AreEqual(1, clone.Count); }
protected override void Write(ContentWriter output, DynamicAabbTree <T> value) { // BasePartition<T> output.Write(value.EnableSelfOverlaps); output.WriteSharedResource(value.Filter); // DynamicAabbTree<T> output.Write(value.BottomUpBuildThreshold); output.Write(value.EnableMotionPrediction); output.Write(value.MotionPrediction); output.Write(value.OptimizationPerFrame); output.Write(value.RelativeMargin); }
public void NaN() { GlobalSettings.ValidationLevel = 0x00; var partition = new DynamicAabbTree <int> { EnableSelfOverlaps = true, GetAabbForItem = GetAabbForItem }; partition.Add(1); partition.Add(4); partition.Add(2); partition.Add(3); // Aabb builder throws exception. Assert.Throws <GeometryException>(() => partition.Update(false)); }
public void Infinite() { GlobalSettings.ValidationLevel = 0xff; var partition = new DynamicAabbTree <int> { EnableSelfOverlaps = true, GetAabbForItem = GetAabbForItem }; partition.Add(1); partition.Add(0); partition.Add(2); partition.Add(3); Assert.AreEqual(new Aabb(new Vector3F(float.NegativeInfinity), new Vector3F(float.PositiveInfinity)), partition.Aabb); var overlaps = partition.GetOverlaps().ToArray(); Assert.AreEqual(4, overlaps.Length); Assert.IsTrue(overlaps.Contains(new Pair <int>(0, 1))); Assert.IsTrue(overlaps.Contains(new Pair <int>(0, 2))); Assert.IsTrue(overlaps.Contains(new Pair <int>(0, 3))); Assert.IsTrue(overlaps.Contains(new Pair <int>(1, 2))); partition.Add(5); partition.Add(6); partition.Add(7); partition.Update(true); Assert.AreEqual(new Aabb(new Vector3F(float.NegativeInfinity), new Vector3F(float.PositiveInfinity)), partition.Aabb); overlaps = partition.GetOverlaps().ToArray(); Assert.IsTrue(overlaps.Contains(new Pair <int>(0, 1))); Assert.IsTrue(overlaps.Contains(new Pair <int>(0, 2))); Assert.IsTrue(overlaps.Contains(new Pair <int>(0, 3))); Assert.IsTrue(overlaps.Contains(new Pair <int>(1, 2))); Assert.IsTrue(overlaps.Contains(new Pair <int>(1, 5))); }
protected override DynamicAabbTree <T> Read(ContentReader input, DynamicAabbTree <T> existingInstance) { if (existingInstance == null) { existingInstance = new DynamicAabbTree <T>(); } else { existingInstance.Clear(); } // BasePartition<T> existingInstance.EnableSelfOverlaps = input.ReadBoolean(); input.ReadSharedResource <IPairFilter <T> >(filter => existingInstance.Filter = filter); // DynamicAabbTree<T> existingInstance.BottomUpBuildThreshold = input.ReadInt32(); existingInstance.EnableMotionPrediction = input.ReadBoolean(); existingInstance.MotionPrediction = input.ReadSingle(); existingInstance.OptimizationPerFrame = input.ReadSingle(); existingInstance.RelativeMargin = input.ReadSingle(); return(existingInstance); }
public void Infinite() { GlobalSettings.ValidationLevel = 0xff; var partition = new DynamicAabbTree<int> { EnableSelfOverlaps = true, GetAabbForItem = GetAabbForItem }; partition.Add(1); partition.Add(0); partition.Add(2); partition.Add(3); Assert.AreEqual(new Aabb(new Vector3F(float.NegativeInfinity), new Vector3F(float.PositiveInfinity)), partition.Aabb); var overlaps = partition.GetOverlaps().ToArray(); Assert.AreEqual(4, overlaps.Length); Assert.IsTrue(overlaps.Contains(new Pair<int>(0, 1))); Assert.IsTrue(overlaps.Contains(new Pair<int>(0, 2))); Assert.IsTrue(overlaps.Contains(new Pair<int>(0, 3))); Assert.IsTrue(overlaps.Contains(new Pair<int>(1, 2))); partition.Add(5); partition.Add(6); partition.Add(7); partition.Update(true); Assert.AreEqual(new Aabb(new Vector3F(float.NegativeInfinity), new Vector3F(float.PositiveInfinity)), partition.Aabb); overlaps = partition.GetOverlaps().ToArray(); Assert.IsTrue(overlaps.Contains(new Pair<int>(0, 1))); Assert.IsTrue(overlaps.Contains(new Pair<int>(0, 2))); Assert.IsTrue(overlaps.Contains(new Pair<int>(0, 3))); Assert.IsTrue(overlaps.Contains(new Pair<int>(1, 2))); Assert.IsTrue(overlaps.Contains(new Pair<int>(1, 5))); }
public void Clone() { AdaptiveAabbTree<int> staticPartition = new AdaptiveAabbTree<int>(); DynamicAabbTree<int> dynamicPartition = new DynamicAabbTree<int>(); DualPartition<int> partition = new DualPartition<int>(staticPartition, dynamicPartition); partition.GetAabbForItem = i => new Aabb(); partition.EnableSelfOverlaps = true; partition.Filter = new DelegatePairFilter<int>(pair => true); partition.Add(0); partition.Add(1); partition.Add(2); partition.Add(3); var clone = partition.Clone(); Assert.NotNull(clone); Assert.AreNotSame(clone, partition); Assert.AreEqual(clone.EnableSelfOverlaps, partition.EnableSelfOverlaps); Assert.AreEqual(clone.Filter, partition.Filter); Assert.AreEqual(0, clone.Count); clone.Add(0); Assert.AreEqual(4, partition.Count); Assert.AreEqual(1, clone.Count); }
public void NaN() { GlobalSettings.ValidationLevel = 0x00; var partition = new DynamicAabbTree<int> { EnableSelfOverlaps = true, GetAabbForItem = GetAabbForItem }; partition.Add(1); partition.Add(4); partition.Add(2); partition.Add(3); // Aabb builder throws exception. Assert.Throws<GeometryException>(() => partition.Update(false)); }
public void NaNWithValidation() { GlobalSettings.ValidationLevel = 0xff; var partition = new DynamicAabbTree<int>(); partition.EnableSelfOverlaps = true; partition.GetAabbForItem = GetAabbForItem; partition.Add(1); partition.Add(4); partition.Add(2); partition.Add(3); // Full rebuild. Assert.Throws<GeometryException>(() => partition.Update(true)); partition = new DynamicAabbTree<int>(); partition.EnableSelfOverlaps = true; partition.GetAabbForItem = GetAabbForItem; partition.Add(1); partition.Add(2); partition.Add(3); partition.Update(true); partition.Add(4); // Partial rebuild. Assert.Throws<GeometryException>(() => partition.Update(false)); }