From fdfa0519dff35bafed25ea46cc26d2f9d0bf5c45 Mon Sep 17 00:00:00 2001 From: Val Erastov Date: Tue, 26 Dec 2017 23:08:38 -0700 Subject: [PATCH] fix edge priorities --- web/app/brep/operations/boolean.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/web/app/brep/operations/boolean.js b/web/app/brep/operations/boolean.js index b582a865..01d597f8 100644 --- a/web/app/brep/operations/boolean.js +++ b/web/app/brep/operations/boolean.js @@ -410,7 +410,7 @@ function mergeFaces(facesA, facesB, opType) { let detectedLoops = detectLoops(originFace.surface, graph); for (let loop of detectedLoops) { for (let edge of loop.halfEdges) { - EdgeSolveData.setPriority(edge, 1); + // EdgeSolveData.setPriority(edge, 1); discardedEdges.delete(edge); allPoints.push(edge.vertexA.point); } @@ -810,10 +810,11 @@ export function chooseValidEdge(edge, face, operationType) { function transferEdges(faceSource, faceDest, operationType) { for (let loop of faceSource.loops) { for (let edge of loop.halfEdges) { - if (isEdgeTransferred(edge.edge)) { - continue; - } if (edgeCollinearToFace(edge, faceDest)) { + if (isEdgeTransferred(edge.edge)) { + EdgeSolveData.addPriority(edge.twin(), 1); + continue; + } let validEdge = chooseValidEdge(edge, faceDest, operationType); BREP_DEBUG.transferEdge(edge, faceDest, validEdge); let twin = validEdge.twin(); @@ -1060,6 +1061,7 @@ export function isCurveEntersEdgeAtPoint(curve, edge, point) { //TODO: rename to HalfEdgeSolveData function EdgeSolveData() { + this.priority = 0; } EdgeSolveData.EMPTY = new EdgeSolveData(); @@ -1086,8 +1088,12 @@ EdgeSolveData.transfer = function(from, to) { to.data[MY] = from.data[MY]; }; -EdgeSolveData.setPriority = function(halfEdge) { - EdgeSolveData.createIfEmpty(halfEdge).priority = true; +EdgeSolveData.setPriority = function(halfEdge, value) { + EdgeSolveData.createIfEmpty(halfEdge).priority = value; +}; + +EdgeSolveData.addPriority = function(halfEdge, value) { + EdgeSolveData.createIfEmpty(halfEdge).priority += value; }; function getPriority(edge) {