public static IObject3D Minus(this IObject3D a, IObject3D b) { var resultsA = a.Clone(); SubtractObject3D.Subtract(resultsA.VisibleMeshes().Select((i) => i).ToList(), b.VisibleMeshes().Select((i) => i).ToList()); return(resultsA); }
public static IObject3D Minus(this IObject3D a, IObject3D b) { var subtract = new SubtractObject3D(); subtract.Children.Add(a.Clone()); var bClone = b.Clone(); subtract.Children.Add(bClone); subtract.ItemsToSubtract.Add(bClone.ID); subtract.Subtract(); var finalMesh = subtract.VisibleMeshes().First().Mesh; return new Object3D() { Mesh = finalMesh }; }
public async Task SubtractTests() { // Subtract has correct number of results { var root = new Object3D(); var cubeA = await CubeObject3D.Create(20, 20, 20); var cubeB = await CubeObject3D.Create(20, 20, 20); var offsetCubeB = new TranslateObject3D(cubeB, 10); var subtract = new SubtractObject3D(); subtract.Children.Add(cubeA); subtract.Children.Add(offsetCubeB); subtract.SelectedChildren.Add(offsetCubeB.ID); root.Children.Add(subtract); subtract.Subtract(); subtract.Flatten(null); Assert.AreEqual(1, root.Children.Count()); var rootAabb = root.GetAxisAlignedBoundingBox(); Assert.IsTrue(new AxisAlignedBoundingBox( -10, -10, -10, 0, 10, 10).Equals(rootAabb, .001)); } // make sure the MatterCAD subtract function is working { var cubeA = await CubeObject3D.Create(20, 20, 20); var cubeB = await CubeObject3D.Create(20, 20, 20); var offsetCubeB = new TranslateObject3D(cubeB, 10); var subtract = cubeA.Minus(offsetCubeB); Assert.AreEqual(0, subtract.Children.Count()); Assert.IsTrue(subtract.Mesh != null); var aabb = subtract.GetAxisAlignedBoundingBox(); Assert.IsTrue(new AxisAlignedBoundingBox( -10, -10, -10, 0, 10, 10).Equals(aabb, .001)); } }