TetMesh.Node d = tet.nodeD(); TetMesh.Face[] meshFaces = { new TetMesh.Face(a,b,c,tet), new TetMesh.Face(b,d,c,tet), new TetMesh.Face(c,d,a,tet), new TetMesh.Face(d,b,a,tet), }; for (int i=0; i<4; ++i) { TetMesh.Face meshFacei = meshFaces[i]; if (!_faceSet.contains(meshFacei.mate())) { _faceSet.add(meshFacei); trace(" init: added face"+meshFacei); trace(" node A="+meshFacei.nodeA()); trace(" node B="+meshFacei.nodeB()); trace(" node C="+meshFacei.nodeC());
while (mfi.hasNext()) { TetMesh.Face meshFacei = mfi.next(); double rr = meshFacei.centerCircle(cc); if (rr<rrmin) { meshFace = meshFacei; while (mfi.hasNext()) { TetMesh.Face meshFacei = mfi.next(); Node nodeA = (Node)meshFacei.nodeA().data; Node nodeB = (Node)meshFacei.nodeB().data; Node nodeC = (Node)meshFacei.nodeC().data; if (nodeA.isInSurface() || nodeB.isInSurface() || nodeC.isInSurface()) { faceList.add(meshFacei);
if (nb==n1) { if (nc==n2) { return new Face(tet,n3); } else if (nc==n3) { return new Face(tet,n2); } else { return null; return new Face(tet,n3); } else if (nc==n3) { return new Face(tet,n1); } else { return null; return new Face(tet,n2); } else if (nc==n2) { return new Face(tet,n1); } else { return null; if (nb==n0) { if (nc==n2) { return new Face(tet,n3); } else if (nc==n3) { return new Face(tet,n2); } else { return null; return new Face(tet,n3);
return new PointLocation(new Edge(tet,n0,n1)); } else if (d0==0.0) { return new PointLocation(new Face(tet,n0)); } else if (d1==0.0) { return new PointLocation(new Face(tet,n1)); } else if (d2==0.0) { return new PointLocation(new Face(tet,n2)); } else if (d3==0.0) { return new PointLocation(new Face(tet,n3));
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()); trace(" meshFaceTwin C="+faceTwin._meshFace.nodeC()); Node nodeA = edge.nodeA(); Node nodeB = edge.nodeB();
face = new Face(ta,tb,tc,tet); } else if (ea==tb && eb==td || ea==td && eb==tc || ea==tc && eb==tb) { face = new Face(tb,td,tc,tet); } else if (ea==tc && eb==td || ea==td && eb==ta || ea==ta && eb==tc) { face = new Face(tc,td,ta,tet); } else if (ea==td && eb==tb || ea==tb && eb==ta || ea==ta && eb==td) { face = new Face(td,tb,ta,tet); } else { assert false:"tet references edge"; Node fa = face.nodeA(); Node fb = face.nodeB(); Node fc = face.nodeC(); tet = face.tetRight(); if (tet==null) { tet = face.tetLeft(); Node nodeBack = face.nodeLeft(); Tet tetBack = tet.tetNabor(node); while (tetBack!=null) { tetBack = tet.tetNabor(node); face = new Face(null,null,tet,node); } else { face = new Face(tet,node); } while (!face.equals(firstFace));
TetMesh.Face f102 = new TetMesh.Face(n1,n0,n2,tet); assertTrue(face.equals(f102)); face = tm.findFace(n0,n1,n3); TetMesh.Face f301 = new TetMesh.Face(n3,n0,n1,tet); assertTrue(face.equals(f301)); face = tm.findFace(n0,n2,n3); TetMesh.Face f320 = new TetMesh.Face(n3,n2,n0,tet); assertTrue(face.equals(f320)); assertTrue(null==tm.findFace(n0,n1,n4)); assertTrue(null==tm.findFace(n0,n2,n4));
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); }
private Face getFaceOnHull(Tet tet) { ArrayList<Tet> stack = new ArrayList<Tet>(128); stack.add(tet); while (!stack.isEmpty()) { Tet t = stack.remove(stack.size()-1); mark(t); if (t._t0==null) return new Face(t,t._n0); if (t._t1==null) return new Face(t,t._n1); if (t._t2==null) return new Face(t,t._n2); if (t._t3==null) return new Face(t,t._n3); if (!isMarked(t._t0)) stack.add(t._t0); if (!isMarked(t._t1)) stack.add(t._t1); if (!isMarked(t._t2)) stack.add(t._t2); if (!isMarked(t._t3)) stack.add(t._t3); } return null; }
/** * Appends the tet nabors of the specified face to the specified list. * @param face the face for which to get nabors. * @param nabors the list to which nabors are appended. */ public synchronized void getTetNabors(Face face, TetList nabors) { Tet tetLeft = face.tetLeft(); Tet tetRight = face.tetRight(); if (tetLeft==null && tetRight==null) { Node na = face.nodeA(); Node nb = face.nodeB(); Node nc = face.nodeC(); face = findFace(na,nb,nc); tetLeft = face.tetLeft(); tetRight = face.tetRight(); } if (tetLeft!=null) nabors.add(tetLeft); if (tetRight!=null) nabors.add(tetRight); }
private Face(Tet tetLeft, Node nodeLeft, Tet tetRight, Node nodeRight) { if (tetLeft!=null) { initLeft(tetLeft,nodeLeft); } else if (tetRight!=null) { initRight(tetRight,nodeRight); } else { assert false:"either tetLeft or tetRight is not null"; } _tetLeft = tetLeft; _tetRight = tetRight; _nodeLeft = nodeLeft; _nodeRight = nodeRight; }
/** * Given a node referenced by one face of the hull, gets the next * face on the hull that is opposite that node. */ private Face getNextFaceOnHull(Node node, Face face) { Tet tet = face.tetLeft(); Node next = face.nodeLeft(); for (Tet tnext=tet.tetNabor(node); tnext!=null; tnext=tet.tetNabor(node)) { node = next; next = tet.nodeNabor(tnext); tet = tnext; } return new Face(tet,node); }
/** * Returns the node C referenced by this face. * @return the node C. */ public final Node nodeC() { return (Node)_meshFace.nodeC().data; }