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