private void init(Face face) { trace("init: face="+face); trace(" meshFace A="+face._meshFace.nodeA()); trace(" meshFace B="+face._meshFace.nodeB()); trace(" meshFace C="+face._meshFace.nodeC()); face._faceA = null; face._faceB = null; face._faceC = null; Node nodeA = face.nodeA(); Node nodeB = face.nodeB(); Node nodeC = face.nodeC(); nodeA.setFace(face); nodeB.setFace(face); nodeC.setFace(face); Edge edgeCB = makeEdge(nodeC,nodeB,face); Edge edgeBA = makeEdge(nodeB,nodeA,face); Edge edgeAC = makeEdge(nodeA,nodeC,face); nodeA.setEdgeBefore(edgeBA); nodeB.setEdgeBefore(edgeCB); nodeC.setEdgeBefore(edgeAC); nodeA.setEdgeAfter(edgeAC); nodeB.setEdgeAfter(edgeBA); nodeC.setEdgeAfter(edgeCB); addEdge(edgeCB); addEdge(edgeBA); addEdge(edgeAC); addFace(face); }
private void extend(Edge edge, Face face) { trace("extend: edge="+edge+" face="+face); trace(" meshEdge A="+edge._meshEdge.nodeA()); trace(" meshEdge B="+edge._meshEdge.nodeB()); trace(" meshFace A="+face._meshFace.nodeA()); trace(" meshFace B="+face._meshFace.nodeB()); trace(" meshFace C="+face._meshFace.nodeC()); assert edge.isOnBoundary(); Node nodeA = edge.nodeA(); Node nodeB = edge.nodeB(); Node nodeC = otherNode(face,nodeA,nodeB); nodeC.setFace(face); linkFaces(face,nodeC,edge.faceRight(),edge.nodeRight()); Edge edgeAC = makeEdge(nodeA,nodeC,face); Edge edgeCB = makeEdge(nodeC,nodeB,face); nodeA.setEdgeAfter(edgeAC); nodeB.setEdgeBefore(edgeCB); nodeC.setEdgeAfter(edgeCB); nodeC.setEdgeBefore(edgeAC); removeEdge(edge); addFace(face); addEdge(edgeAC); addEdge(edgeCB); }
assert nodeC==edgeTwin.nodeB(); removeEdge(edgeTwin); EdgeFace edgeFaceTwin = addEdge(edgeTwin); Face faceTwin = edgeFaceTwin.face; double gradeTwin = edgeFaceTwin.grade; assert nodeC==edgeTwin.nodeA(); removeEdge(edgeTwin); EdgeFace edgeFaceTwin = addEdge(edgeTwin); Face faceTwin = edgeFaceTwin.face; double gradeTwin = edgeFaceTwin.grade;
addEdge(edge); return true;
nodeA.setEdgeAfter(edgeAD); nodeD.setEdgeBefore(edgeAD); addEdge(edgeAD); nodeC.setEdgeAfter(edgeCB); nodeB.setEdgeBefore(edgeCB); addEdge(edgeCB); linkFaces(face,nodeB,faceTwin,nodeD); linkFaces(face,nodeC,edge.faceRight(),edge.nodeRight()); nodeD.setEdgeAfter(edgeDB); nodeB.setEdgeBefore(edgeDB); addEdge(edgeDB); nodeA.setEdgeAfter(edgeAC); nodeC.setEdgeBefore(edgeAC); addEdge(edgeAC); linkFaces(face,nodeA,faceTwin,nodeD); linkFaces(face,nodeC,edge.faceRight(),edge.nodeRight());