Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }