private void addTet(Tet tet) { if (tet!=null && !isMarked(tet)) { mark(tet); if (tet.intersectsPlane(a,b,c,d)) _tets.add(tet); } } };
private void stackTet(Tet tet) { if (tet!=null && !isMarked(tet)) { mark(tet); _stack.add(tet); } } };
/** * If the point with specified (x,y,z) coordinates is nearer to the * specified node than the nearest node found so far, then replaces * the nearest node (and the node root) with the specified node. * Does nothing if the specified node is marked. * (Currently unused.) */ private void updateNodeNearest(double x, double y, double z, Node n) { if (!isMarked(n)) { mark(n); double d = distanceSquared(n,x,y,z); if (d<_dmin) { _dmin = d; _nmin = n; _nroot = n; } } }
private void addNode(TetMesh.Node node) { if (_mesh.isMarked(node)) return; _mesh.mark(node); _nodeList.add(node); NodeData data = data(node); data.volume = 0.0; } private boolean needTet(double xp, double yp, double zp, TetMesh.Tet tet) {
if (_tnext!=null) { clearTetMarks(); mark(_tnext);
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; }
private void getDelaunayFacesOpposite( Node node, Node na, Node nb, Node nc, Tet ta, Tet tb, Tet tc) { if (!isMarked(na)) { mark(na); _nodeList.add(na); } if (!isMarked(nb)) { mark(nb); _nodeList.add(nb); } if (!isMarked(nc)) { mark(nc); _nodeList.add(nc); } getDelaunayFacesOpposite(node,ta); getDelaunayFacesOpposite(node,tb); getDelaunayFacesOpposite(node,tc); }
double a, double b, double c, double d, Node node, Tet tet) mark(tet); Node n0 = tet._n0; Node n1 = tet._n1;
double x, double y, double z, Node node, Tet tet) mark(tet); Node n0 = tet._n0; Node n1 = tet._n1;
mark(node);
mark(tet); killTet(tet); Node n0 = tet._n0;
mark(tet); Node n0 = tet._n0; Node n1 = tet._n1;
/** * Beginning with a tet that contains a node located inside the * mesh, recursively adds Delaunay faces to the face set. * The tet marks must be cleared before calling this method. */ private void getDelaunayFacesInside(Node node, Tet tet) { if (tet!=null && !isMarked(tet)) { mark(tet); Node n0 = tet._n0; Node n1 = tet._n1; Node n2 = tet._n2; Node n3 = tet._n3; if (inSphere(n0,n1,n2,n3,node)) { killTet(tet); Tet t0 = tet._t0; Tet t1 = tet._t1; Tet t2 = tet._t2; Tet t3 = tet._t3; _faceSet.addMate(tet,n0); _faceSet.addMate(tet,n1); _faceSet.addMate(tet,n2); _faceSet.addMate(tet,n3); getDelaunayFacesInside(node,t0); getDelaunayFacesInside(node,t1); getDelaunayFacesInside(node,t2); getDelaunayFacesInside(node,t3); } } }
private void addTet(double xp, double yp, double zp, TetMesh.Tet tet) { _mesh.mark(tet); _tetList.add(tet); addNode(tet.nodeA()); addNode(tet.nodeB()); addNode(tet.nodeC()); addNode(tet.nodeD()); TetMesh.Tet ta = tet.tetA(); TetMesh.Tet tb = tet.tetB(); TetMesh.Tet tc = tet.tetC(); TetMesh.Tet td = tet.tetD(); if (needTet(xp,yp,zp,ta)) addTet(xp,yp,zp,ta); if (needTet(xp,yp,zp,tb)) addTet(xp,yp,zp,tb); if (needTet(xp,yp,zp,tc)) addTet(xp,yp,zp,tc); if (needTet(xp,yp,zp,td)) addTet(xp,yp,zp,td); } private void addNode(TetMesh.Node node) {
mark(tet); Node n0 = tet._n0; Node n1 = tet._n1;
mark(tet); nabors.add(tet); Node n0 = tet._n0;
mark(tet); Node n0 = tet._n0; Node n1 = tet._n1;
mark(tet); Node n0 = tet._n0; Node n1 = tet._n1;