if (edgeSet.add(na,nb,null,null)) { Tet tet = findTet(na,nb); Edge edge = new Edge(tet,na,nb); edgeList.add(edge);
return new PointLocation(new Edge(tet,n2,n3)); } else if (d0==0.0 && d2==0.0) { return new PointLocation(new Edge(tet,n3,n1)); } else if (d0==0.0 && d3==0.0) { return new PointLocation(new Edge(tet,n1,n2)); } else if (d1==0.0 && d2==0.0) { return new PointLocation(new Edge(tet,n0,n3)); } else if (d1==0.0 && d3==0.0) { return new PointLocation(new Edge(tet,n2,n0)); } else if (d2==0.0 && d3==0.0) { return new PointLocation(new Edge(tet,n0,n1)); } else if (d0==0.0) { return new PointLocation(new Face(tet,n0));
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()); trace(" meshEdgeTwin A="+edgeTwin._meshEdge.nodeA()); trace(" meshEdgeTwin B="+edgeTwin._meshEdge.nodeB()); trace(" meshFaceTwin A="+faceTwin._meshFace.nodeA()); trace(" meshFaceTwin B="+faceTwin._meshFace.nodeB());
TetMesh.Edge e01 = new TetMesh.Edge(n0,n1,tet); TetMesh.Edge e10 = new TetMesh.Edge(n1,n0,tet); assertTrue(edge.equals(e01) || edge.equals(e10)); edge = tm.findEdge(n0,n2); TetMesh.Edge e02 = new TetMesh.Edge(n0,n2,tet); TetMesh.Edge e20 = new TetMesh.Edge(n2,n0,tet); assertTrue(edge.equals(e02) || edge.equals(e20)); edge = tm.findEdge(n0,n3); TetMesh.Edge e03 = new TetMesh.Edge(n0,n3,tet); TetMesh.Edge e30 = new TetMesh.Edge(n3,n0,tet); assertTrue(edge.equals(e03) || edge.equals(e30)); edge = tm.findEdge(n1,n2); TetMesh.Edge e12 = new TetMesh.Edge(n1,n2,tet); TetMesh.Edge e21 = new TetMesh.Edge(n2,n1,tet); assertTrue(edge.equals(e12) || edge.equals(e21)); edge = tm.findEdge(n1,n3); TetMesh.Edge e13 = new TetMesh.Edge(n1,n3,tet); TetMesh.Edge e31 = new TetMesh.Edge(n3,n1,tet); assertTrue(edge.equals(e13) || edge.equals(e31)); edge = tm.findEdge(n2,n3); TetMesh.Edge e23 = new TetMesh.Edge(n2,n3,tet); TetMesh.Edge e32 = new TetMesh.Edge(n3,n2,tet); assertTrue(edge.equals(e23) || edge.equals(e32));
if (!isMarked(n1)) { mark(n1); nabors.add(new Edge(tet,n1,node)); nabors.add(new Edge(tet,n2,node)); nabors.add(new Edge(tet,n3,node)); nabors.add(new Edge(tet,n0,node)); nabors.add(new Edge(tet,n2,node)); nabors.add(new Edge(tet,n3,node)); nabors.add(new Edge(tet,n0,node)); nabors.add(new Edge(tet,n1,node)); nabors.add(new Edge(tet,n3,node)); nabors.add(new Edge(tet,n0,node)); nabors.add(new Edge(tet,n1,node)); nabors.add(new Edge(tet,n2,node));
if (na==n0) { if (nb==n1) { return new Edge(tet,n0,n1); } else if (nb==n2) { return new Edge(tet,n0,n2); } else if (nb==n3) { return new Edge(tet,n0,n3); } else { return null; return new Edge(tet,n0,n1); } else if (nb==n2) { return new Edge(tet,n1,n2); } else if (nb==n3) { return new Edge(tet,n1,n3); } else { return null; return new Edge(tet,n0,n2); } else if (nb==n1) { return new Edge(tet,n1,n2); } else if (nb==n3) { return new Edge(tet,n2,n3); } else { return null; return new Edge(tet,n0,n3); } else if (nb==n1) { return new Edge(tet,n1,n3);
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); }
/** * Determines whether the specified edge is an inner edge. * @param edge an edge. * @return true, if inner; false, otherwise. */ public boolean isInner(Edge edge) { Tet tet = edge.tet(); if (tet==null) tet = findTet(edge.nodeA(),edge.nodeB()); if (tet==null) return false; if (tet.isInner()) return true; Tet[] tets = getTetNabors(edge); int ntet = tets.length; for (int itet=0; itet<ntet; ++itet) { if (isInner(tets[itet])) return true; } return false; }
private Edge(TetMesh.Edge meshEdge, Face face) { _meshEdge = meshEdge; Node nodeA = (Node)meshEdge.nodeA().data; Node nodeB = (Node)meshEdge.nodeB().data; Node nodeC = (face!=null)?otherNode(face,nodeA,nodeB):null; Check.argument(face==null || nodeC!=null,"face references edge"); if (nodeC!=null) { if (nodesInOrder(face,nodeA,nodeB,nodeC)) { _faceLeft = face; _faceRight = face.faceNabor(nodeC); } else { _faceLeft = face.faceNabor(nodeC); _faceRight = face; } } } }
/** * Appends the tet nabors of the specified edge to the specified list. * @param edge the edge for which to get nabors. * @param nabors the list to which nabors are appended. */ public synchronized void getTetNabors(Edge edge, TetList nabors) { Node na = edge.nodeA(); Node nb = edge.nodeB(); Tet tet = edge.tet(); if (tet==null) tet = findTet(na,nb); if (tet==null) return; clearTetMarks(); getTetNabors(na,nb,tet,nabors); }
public Node nodeB() { return (Node)_meshEdge.nodeB().data; } public Face faceLeft() {
/** * Returns the midpoint of this face. * @return array of midpoint coordinates {xc,yc,zc}. */ public double[] midpoint() { double[] c = new double[3]; midpoint(c); return c; }
private TetMesh.Edge findMeshEdge(Node nodeA, Node nodeB) { TetMesh.Node meshNodeA = nodeA._meshNode; TetMesh.Node meshNodeB = nodeB._meshNode; TetMesh.Edge meshEdge = _mesh.findEdge(meshNodeA,meshNodeB); if (meshEdge!=null && meshNodeA!=meshEdge.nodeA()) meshEdge = meshEdge.mate(); return meshEdge; }
public Edge mate() { return new Edge(_meshEdge.mate(),_faceRight); } public boolean isInSurface() {
public Node nodeA() { return (Node)_meshEdge.nodeA().data; } public Node nodeB() {
/** * Returns the mate of this edge. * @return the mate. */ public Edge mate() { return new Edge(_b,_a,_tet); }