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)); }
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); }
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); } }