public void FilterIntersectionList() { string[] str = new string[3] { "union", "intersection", "difference" }; int[,] intersectionIndices = new int[3, 2] { //lhit inl inr result { 0, 3 }, { 1, 2 }, { 0, 1 } }; Shape s1 = new Sphere(); Shape s2 = new Cube(); List <Intersection> xs = new List <Intersection>(); xs.Add(new Intersection(1, s1)); xs.Add(new Intersection(2, s2)); xs.Add(new Intersection(3, s1)); xs.Add(new Intersection(4, s2)); for (int i = 0; i < 3; i++) { CSG c = new CSG(str[i], s1, s2); List <Intersection> result = c.FilterIntersections(xs); Assert.AreEqual(result.Count, 2); Assert.AreEqual(result[0], xs[intersectionIndices[i, 0]]); Assert.AreEqual(result[1], xs[intersectionIndices[i, 1]]); } }
public void TestCsgFilteringIntersections() { var s1 = new Sphere(); var s2 = new Cube(); var i1 = new Intersection(1, s1); var i2 = new Intersection(2, s2); var i3 = new Intersection(3, s1); var i4 = new Intersection(4, s2); var xs = new Intersections(i1, i2, i3, i4); var op = new CsgOperation[] { CsgOperation.Union, CsgOperation.Intersection, CsgOperation.Difference }; var x0 = new int[] { 0, 1, 0 }; var x1 = new int[] { 3, 2, 1 }; for (int i = 0; i < op.Length; i++) { var c = new CSG(op[i], s1, s2); Intersections result = c.FilterIntersections(xs); Assert.AreEqual(result.Count, 2, i.ToString()); Assert.AreEqual(result[0], xs[x0[i]], i.ToString()); Assert.AreEqual(result[1], xs[x1[i]], i.ToString()); } }
public void FilteringAListOfIntersections(string operation, int x0, int x1) { var s1 = new Sphere(); var s2 = new Cube(); var c = new CSG(Operation.OfKind(operation), s1, s1); var xs = new Intersections( new Intersection(1, s1), new Intersection(2, s2), new Intersection(3, s1), new Intersection(4, s2)); var result = c.FilterIntersections(xs); Assert.AreEqual(2, result.Count); Assert.AreEqual(xs[x0], result[0]); Assert.AreEqual(xs[x1], result[1]); }
public void T05_FilteringAListOfIntersections() { Sphere s1 = new Sphere(); Cube s2 = new Cube(); CSG c1 = new CSG(CSG.Operation.Union, s1, s2); CSG c2 = new CSG(CSG.Operation.Intersection, s1, s2); CSG c3 = new CSG(CSG.Operation.Difference, s1, s2); List <Intersection> xs = new List <Intersection>(); xs.Add(new Intersection(s1, 1)); xs.Add(new Intersection(s2, 2)); xs.Add(new Intersection(s1, 3)); xs.Add(new Intersection(s2, 4)); List <CSG.Operation> operation = new List <CSG.Operation>(); List <int> x0 = new List <int>(); List <int> x1 = new List <int>(); operation.Add(CSG.Operation.Union); operation.Add(CSG.Operation.Intersection); operation.Add(CSG.Operation.Difference); x0.Add(0); x0.Add(1); x0.Add(0); x1.Add(3); x1.Add(2); x1.Add(1); //Union List <Intersection> result = c1.FilterIntersections(xs); Assert.AreEqual(2, result.Count); Assert.AreEqual(xs[x0[0]], result[0]); Assert.AreEqual(xs[x1[0]], result[1]); //Intersection result = c2.FilterIntersections(xs); Assert.AreEqual(2, result.Count); Assert.AreEqual(xs[x0[1]], result[0]); Assert.AreEqual(xs[x1[1]], result[1]); //Difference result = c3.FilterIntersections(xs); Assert.AreEqual(2, result.Count); Assert.AreEqual(xs[x0[2]], result[0]); Assert.AreEqual(xs[x1[2]], result[1]); }