コード例 #1
0
        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);
        }
コード例 #2
0
		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
			};
		}
コード例 #3
0
        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));
            }
        }