/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object can be used to retrieve data from input parameters and /// to store data in output parameters.</param> protected override void SolveInstance(IGH_DataAccess DA) { DMesh3_goo goo = null; DMesh3_goo cut = null; bool cap = false; DA.GetData(0, ref goo); DA.GetData(1, ref cut); DA.GetData(2, ref cap); DMesh3 ms = new DMesh3(goo.Value); g3.MeshMeshCut cutter = new g3.MeshMeshCut(); cutter.Target = new DMesh3(goo.Value); cutter.CutMesh = new DMesh3(cut.Value); cutter.Compute(); if (cap) { cutter.RemoveContained(); } DA.SetData(0, cutter.CutMesh); }
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); }