TetMesh.Node a = tet.nodeA(); TetMesh.Node b = tet.nodeB(); TetMesh.Node c = tet.nodeC(); TetMesh.Node d = tet.nodeD(); TetMesh.Face[] meshFaces = {
Node tc = tet.nodeC(); Node td = tet.nodeD();
TetMesh.Node na = tet.nodeA(); TetMesh.Node nb = tet.nodeB(); TetMesh.Node nc = tet.nodeC(); TetMesh.Node nd = tet.nodeD(); double xa = na.xp(), ya = na.yp(), za = na.zp();
private void processTets( double xp, double yp, double zp, TetMesh mesh, TetMesh.TetList tetList) { _faceList.clear(); int ntet = tetList.ntet(); TetMesh.Tet[] tets = tetList.tets(); for (int itet=0; itet<ntet; ++itet) { TetMesh.Tet tet = tets[itet]; TetMesh.Tet ta = tet.tetA(); TetMesh.Tet tb = tet.tetB(); TetMesh.Tet tc = tet.tetC(); TetMesh.Tet td = tet.tetD(); TetMesh.Node na = tet.nodeA(); TetMesh.Node nb = tet.nodeB(); TetMesh.Node nc = tet.nodeC(); TetMesh.Node nd = tet.nodeD(); tet.centerSphere(_xyz); double xt = _xyz[0]-xp, yt = _xyz[1]-yp, zt = _xyz[2]-zp; processTetNabor(xp,yp,zp,xt,yt,zt,mesh,ta,nb,nc,nd); processTetNabor(xp,yp,zp,xt,yt,zt,mesh,tb,nc,na,nd); processTetNabor(xp,yp,zp,xt,yt,zt,mesh,tc,nd,na,nb); processTetNabor(xp,yp,zp,xt,yt,zt,mesh,td,na,nc,nb); } } private void processTetNabor(
Node na = tet.nodeA(); Node nb = tet.nodeB(); Node nc = tet.nodeC(); Node nd = tet.nodeD(); if (!leftOfPlane(na,nb,nc,nd)) {
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) {
/** * Validates the specified node. */ private void validate(Node node) { Check.state(node==node._prev._next,"node==node._prev._next"); Check.state(node==node._next._prev,"node==node._next._prev"); Tet tet = node.tet(); if (_troot!=null) { Check.state(tet!=null,"tet!=null"); Check.state(node==tet.nodeA() || node==tet.nodeB() || node==tet.nodeC() || node==tet.nodeD(), "node is one of tet nodes"); } }
private boolean needTet(double xp, double yp, double zp, TetMesh.Tet tet) { if (tet==null || _mesh.isMarked(tet)) return false; TetMesh.Node na = tet.nodeA(); TetMesh.Node nb = tet.nodeB(); TetMesh.Node nc = tet.nodeC(); TetMesh.Node nd = tet.nodeD(); double xa = na.xp(), ya = na.yp(), za = na.zp(); double xb = nb.xp(), yb = nb.yp(), zb = nb.zp(); double xc = nc.xp(), yc = nc.yp(), zc = nc.zp(); double xd = nd.xp(), yd = nd.yp(), zd = nd.zp(); return Geometry.inSphere(xa,ya,za,xb,yb,zb,xc,yc,zc,xd,yd,zd,xp,yp,zp)>0.0; }