示例#1
0
        public void CanQueryPointsInsideBox_1()
        {
            var filename = Config.TEST_FILE_NAME_PTS;

            if (!File.Exists(filename))
            {
                Assert.Ignore($"File not found: {filename}");
            }
            var config = ImportConfig.Default
                         .WithInMemoryStore()
                         .WithKey("key1")
                         .WithOctreeSplitLimit(16 * 1024)
                         .WithReadBufferSizeInBytes(128 * 1024 * 1024)
            ;
            var pointset = PointCloud.Import(filename, config);

            var box    = Box3d.FromMinAndSize(new V3d(0.5, 0.5, 0.0), new V3d(0.5, 0.5, 0.5));
            var result = new List <V3d>();

            foreach (var x in pointset.QueryPointsInsideBox(box))
            {
                result.AddRange(x.Positions);
            }
            Assert.IsTrue(result.Count > 0 && result.Count < pointset.PointCount);

            var resultBounds = new Box3d(result);

            Assert.IsTrue(box.Contains(resultBounds));
        }
示例#2
0
        public void QueryOctreeLevelWithBounds()
        {
            var pointset = _CreateRandomPointSetForOctreeLevelTests();
            var bounds   = Box3d.FromMinAndSize(new V3d(0.2, 0.4, 0.8), new V3d(0.2, 0.15, 0.1));

            var depth = pointset.Root.Value.CountOctreeLevels();

            Assert.IsTrue(depth > 0);

            for (var i = 1; i < depth; i++)
            {
                var countNodes0  = 0;
                var countPoints0 = 0;
                var countNodes1  = 0;
                var countPoints1 = 0;
                foreach (var x in pointset.QueryPointsInOctreeLevel(i))
                {
                    countNodes0++; countPoints0 += x.Count;
                }
                foreach (var x in pointset.QueryPointsInOctreeLevel(i, bounds))
                {
                    countNodes1++; countPoints1 += x.Count;
                }
                Assert.IsTrue(countPoints0 > countPoints1);
                Assert.IsTrue(countNodes0 > countNodes1);
            }
        }
        public void TestConvexClipped()
        {
            var points      = new[] { V3d.OOO, V3d.IOO, V3d.OIO };
            var poly        = new Polygon3d(points);
            var box         = Box3d.FromMinAndSize(-V3d.OOI, new V3d(1, 0.5, 2));
            var newHull     = Hull3d.Create(box).Reversed(); // requires non-intuitive reversed (or using obsolte Hull3d constructor that points inside)
            var polyClipped = poly.ConvexClipped(newHull);   // will return positive part of planes (outside of Hull3d)
            var clippedBox  = polyClipped.BoundingBox3d;
            var test        = new Box3d(0, 0, 0, 1, 0.5, 0);

            Test.IsTrue(clippedBox == test);
        }
示例#4
0
        public void CountPointsInOctreeLevelWithBounds()
        {
            var pointset = _CreateRandomPointSetForOctreeLevelTests();
            var bounds   = Box3d.FromMinAndSize(new V3d(0.2, 0.4, 0.8), new V3d(0.2, 0.15, 0.1));

            var depth = pointset.Root.Value.CountOctreeLevels();

            Assert.IsTrue(depth > 0);

            for (var i = 1; i < depth; i++)
            {
                var c0 = pointset.CountPointsInOctreeLevel(i);
                var c1 = pointset.CountPointsInOctreeLevel(i, bounds);
                Assert.IsTrue(c0 > c1);
            }
        }