jsketcher/web/app/brep/null-face-merge.js
2020-07-18 22:18:03 -07:00

43 lines
No EOL
1,014 B
JavaScript

import * as math from '../../../modules/math/commons'
import {Edge} from './topo/edge'
export default function({curve, start}) {
let aE = start.prev;
let bE = start;
// let aStop = end;
// let bStop = end.next;
while (aE.vertexA !== bE.vertexB) {
const aTip = curve.closestParam(aE.vertexA.point.data());
const bTip = curve.closestParam(bE.vertexB.point.data());
if (math.equal(aTip, bTip)) {
//swap vertex everywhere
updateVertex(bE, bE, aE.vertexA);
} else if (aTip > bTip) {
aE.split(bE.vertexB);
aE = aE.next
} else if (aTip < bTip) {
bE.split(aE.vertexA);
} else {
throw 'illegal state'
}
connect(aE, bE);
aE = aE.prev;
bE = bE.next
}
}
function connect(aE, bE) {
new Edge(aE.edge.curve).link(aE.twin(), bE.twin());
}
function updateVertex(edge, stopEdge, vertex) {
if (edge === stopEdge) return;
const twin = edge.twin();
edge.vertexB = twin.vertexA = vertex;
updateVertex(twin.prev, stopEdge, vertex);
}