public static (Mesh subtract, Mesh intersect) IntersectAndSubtract(Mesh recieveSubtraction, Mesh recieveIntersection, Action <string, double> reporter, CancellationToken cancellationToken) { if (recieveSubtraction.Faces.Count == 0) { return(recieveSubtraction, recieveIntersection); } if (recieveIntersection.Faces.Count == 0) { return(recieveSubtraction, recieveIntersection); } reporter?.Invoke("Mesh to Solid A", 0); var A = SolidFromMesh(recieveSubtraction); reporter?.Invoke("Mesh to Solid B", .2); var B = SolidFromMesh(recieveIntersection); reporter?.Invoke("BooleanModeller", .4); var modeller = new BooleanModeller(A, B, (status, progress0To1) => { reporter?.Invoke(status, .4 + progress0To1 * .2); }, cancellationToken); reporter?.Invoke("Intersection", .6); var intersection = modeller.GetIntersection(); reporter?.Invoke("Difference", .6); var difference = modeller.GetDifference(); reporter?.Invoke("Solid to Mesh", .8); var results = (MeshFromSolid(difference), MeshFromSolid(intersection)); reporter?.Invoke("Solid to Mesh", 1); return(results); }
public static Mesh Subtract(this Mesh a, Mesh b, Action <string, double> reporter, CancellationToken cancellationToken) { if (a.Faces.Count == 0) { return(b); } if (b.Faces.Count == 0) { return(a); } reporter?.Invoke("Mesh to Solid A", 0); var A = SolidFromMesh(a); reporter?.Invoke("Mesh to Solid B", .2); var B = SolidFromMesh(b); reporter?.Invoke("BooleanModeller", .4); var modeller = new BooleanModeller(A, B, (status, progress0To1) => { reporter?.Invoke(status, .4 + progress0To1 * .2); }, cancellationToken); reporter?.Invoke("Difference", .6); var result = modeller.GetDifference(); reporter?.Invoke("Solid to Mesh", .8); var solidMesh = MeshFromSolid(result); reporter?.Invoke("Solid to Mesh", 1); return(solidMesh); }
public static Mesh GetDifference(MeshFilter meshF1, MeshFilter meshF2) { using (var booleanModeller = new BooleanModeller(meshF1.ToSolidInWCS(), meshF2.ToSolidInWCS())) { var end = booleanModeller.GetDifference(); return(OperateAndMerge(end, meshF1.transform)); } }