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);
        }
Example #2
0
        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));
        }
Example #4
0
        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);
        }
Example #9
0
        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)));
        }
Example #10
0
        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);
        }
Example #11
0
        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));
        }
Example #12
0
        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));
        }