public bool Compute() { // Alternate strategy: // - don't do RemoveContained // - match embedded vertices, split where possible // - find min-cut path through shared edges // - remove contiguous patches that are inside both/etc (use MWN) // ** no good for coplanar regions... cutTargetOp = new MeshMeshCut() { Target = new DMesh3(Target), CutMesh = Tool, VertexSnapTol = VertexSnapTol }; cutTargetOp.Compute(); cutTargetOp.RemoveContained(); cutTargetMesh = cutTargetOp.Target; cutToolOp = new MeshMeshCut() { Target = new DMesh3(Tool), CutMesh = Target, VertexSnapTol = VertexSnapTol }; cutToolOp.Compute(); cutToolOp.RemoveContained(); cutToolMesh = cutToolOp.Target; resolve_vtx_pairs(); Result = cutToolMesh; MeshEditor.Append(Result, cutTargetMesh); return(true); }
public bool Compute(boolOperation op = boolOperation.Union) { if (!Target.IsClosed()) { Debug.WriteLine("Target mesh is not closed;"); } if (!Tool.IsClosed()) { Debug.WriteLine("Tool mesh is not closed;"); } Util.gDevAssert(Target.IsClosed() && Tool.IsClosed()); // Alternate strategy: // - don't do RemoveContained // - match embedded vertices, split where possible // - find min-cut path through shared edges // - remove contiguous patches that are inside both/etc (use MWN) // ** no good for coplanar regions... cutTargetOp = new MeshMeshCut() { Target = new DMesh3(Target), CutMesh = Tool, VertexSnapTol = VertexSnapTol, AttemptPlanarRemoval = AttemptPlanarRemoval }; cutTargetOp.Compute(); if (op == boolOperation.Union || op == boolOperation.Subtraction) { cutTargetOp.RemoveContained(); } else if (op == boolOperation.Intersection) { cutTargetOp.RemoveExternal(); } cutTargetMesh = cutTargetOp.Target; cutToolOp = new MeshMeshCut() { Target = new DMesh3(Tool), CutMesh = Target, VertexSnapTol = VertexSnapTol, AttemptPlanarRemoval = AttemptPlanarRemoval }; cutToolOp.Compute(); if (op == boolOperation.Union || op == boolOperation.Intersection) { cutToolOp.RemoveContained(); } else if (op == boolOperation.Subtraction) { cutToolOp.RemoveExternal(); } cutToolMesh = cutToolOp.Target; resolve_vtx_pairs(); Result = cutToolMesh; MeshEditor.Append(Result, cutTargetMesh); return(true); }