Example #1
0
        public void TopIsSolid()
        {
            int       sides    = 3;
            CsgObject keep     = new Cylinder(20, 20, sides);
            var       keepMesh = CsgToMesh.Convert(keep, true);
            CsgObject subtract = new Cylinder(10, 21, sides);

            subtract = new SetCenter(subtract, keep.GetCenter());
            var       subtractMesh = CsgToMesh.Convert(subtract, true);
            CsgObject result       = keep - subtract;
            var       resultMesh   = CsgToMesh.Convert(result, true);

            Assert.AreEqual(0, keepMesh.GetNonManifoldEdges().Count, "All faces should be 2 manifold");
            Assert.AreEqual(0, subtractMesh.GetNonManifoldEdges().Count, "All faces should be 2 manifold");
            //Assert.AreEqual(0, resultMesh.GetNonManifoldEdges().Count, "All faces of this subtract should be 2 manifold");
        }
Example #2
0
        public void SubtractHasAllFaces()
        {
            double    XOffset      = -.4;
            CsgObject keep         = new Box(10, 10, 10);
            var       keepMesh     = CsgToMesh.Convert(keep, true);
            var       subtract     = new Translate(new Box(10, 10, 10), XOffset, -3, 2);
            var       subtractMesh = CsgToMesh.Convert(subtract, true);
            CsgObject result       = keep - subtract;
            var       resultMesh   = CsgToMesh.Convert(result);
            //mesh.Save("C:/Temp/TempCsgMesh.stl");
            var bottomOfSubtractFaces = resultMesh.Faces.Where((f) =>
                                                               AreEqual(f.Normal.Z, 1)
                                                               &&
                                                               FaceAtHeight(f, -3)
                                                               ).ToArray();

            HashSet <IVertex> allVertices = new HashSet <IVertex>();

            foreach (var face in bottomOfSubtractFaces)
            {
                foreach (var vertex in face.Vertices())
                {
                    if (!allVertices.Contains(vertex))
                    {
                        allVertices.Add(vertex);
                    }
                }
            }

            // back right
            Assert.IsTrue(HasPosition(allVertices, new Vector3(4.6, 2, -3)));
            // front right
            Assert.IsTrue(HasPosition(allVertices, new Vector3(4.6, -5, -3)));
            // back left
            Assert.IsTrue(HasPosition(allVertices, new Vector3(-5, 2, -3)));
            // front left
            Assert.IsTrue(HasPosition(allVertices, new Vector3(-5, -5, -3)), "Must have front left corner point");

            Assert.AreEqual(0, keepMesh.GetNonManifoldEdges().Count, "All faces should be 2 manifold");
            Assert.AreEqual(0, subtractMesh.GetNonManifoldEdges().Count, "All faces should be 2 manifold");
            //Assert.AreEqual(0, resultMesh.GetNonManifoldEdges().Count, "All faces of this subtract should be 2 manifold");
        }