⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ibgomark.cxx

📁 Delaunay三角形的网格剖分程序
💻 CXX
📖 第 1 页 / 共 2 页
字号:
	  else if(ri<FaceType){	    if(fi<ibgFaceRelativeFar)	{ri = FaceType;}	    else 			{ri = FarFaceType;}	  }else if(rb<FarFaceType)	{ri = FarFaceType;}	}else if((fl=gg->bnUp[i][bn]) && (ff=gg->lFaceDown[fl])){	  di = gg->fPoint[ff][i]- (xi=gg->nPoint[n][i]);	  wzAssert(di>-0.0001);	  if(di<cog->Delta){	    gg->fPoint[ff][i] = gg->nPoint[n][i]; 	    gg->fPointUp[ff][i] -= di;	    gg->fPointDown[ff][i] -= di;	    rx = OnFace; continue;	  }	  fi = di/(gg->nPoint[gg->nUp[i][n]][i]-xi);	  if(fi<ibgFaceRelativeClose)	{ri = CloseFaceType;}	  else if(ri<FaceType){	    if(fi<ibgFaceRelativeFar)	{ri = FaceType;}	    else 			{ri = FarFaceType;}	  }else if(rb<FarFaceType)	{ri = FarFaceType;}	}      }    }    if(ibgBasicMode == hideAll){      rc = ibgoHidden;    }else if(rx==OnFace){		// if on face, hide always!!!!      rc = ibgoHidden;      //      near++; near(" <>(<>)\n")<<n,bn;    }else if(ibgBasicMode == hideNothing){      rc = ibgoVisible;    }else if(rx==RefinedNode){      rc = ibgoHidden;    }else if(ibgBasicMode == hideRefined){      rc = ibgoVisible;    }else if(dim==0){			// do not hide the outer corner !!      rc = ibgoVisible;    }else if (dim==1){		// hide an outer edge point only if close!      rc = ibgoHidden;      if(ibgBasicMode == hideFew){	if(ri==CloseFaceType) 	rc = ibgoHidden;	else			rc = ibgoVisible;      }    }else if (ri == FarFaceType){      if(ibgBasicMode == hideFew)	rc = ibgoVisible;      else				rc = ibgoHidden;    }else if (border==0){	// hide all other inner boundary nodes;      if(ri==Default)	rc = ibgoVisible;      else		rc = ibgoHidden;    }else if (ri == CloseFaceType){ // what remains is dim=2, border=1;      rc = ibgoHidden;    }else if (rb == CloseFaceType){ // very skew intersection - hold the point      rc = ibgoVisible;    }else if (rb == Default){      rc = ibgoHidden;    }else{      rc = ibgoVisible;    }    gg->bnType[bn] = rc;    //    gg->bnType[bn] = ibgoVisible;    if(rc == ibgoHidden)      { cogInfoOmittedNodes++; cogInfoOmittedNodes(" <>(<>)\n")<<n,bn;}  }  wzRangeLoop(gg->faces,ff){    ll = gg->fLine[ff]; 	d  = gg->lDirection(ll);    bo = gg->lNodeUp[ll];	no = gg->bnBase[bo];    bu = gg->lNodeDown[ll];	nu = gg->bnBase[bu];    dx =  (xo=gg->nPoint[no][d])   - (xu = gg->nPoint[nu][d]);    df = ((xf = gg->fPoint[ff][d]) -  xu)/dx;    if(df>0.5){      nt = nu; nu = no; no = nt; ou = bu; bu = bo; bo = ou;      df = ((xu = gg->nPoint[nu][d])-xf)/dx;    }else{      ou = bu;    }    wzAssert(df<0.50001); wzAssert(df>-0.00001);    mark = ibgoVisible;    for(s=0;s<gg->LineSides;s++){      r = gg->lsLine[d][s]; dr = gg->Up(r);      e = gg->fEdge[s][ff];      yf = gg->fPoint[ff][dr];      if(e>0){	de = gg->ePoint[e][dr] - yf;	dp = gg->ePoint[e][d]  - xf;	if(de<cog->Delta && de > -cog->Delta){	    gg->ePoint[e][dr] = gg->fPoint[ff][dr]; 	    gg->ePointFace[e][dr] -= de;	    gg->ePointUp[e][dr] -= de;	    gg->ePointDown[e][dr] -= de;	    gg->pEdge[pe = gg->bnPlane[gg->lsPlane[d][s]][ou]] = e;	    if(dp<cog->Delta && dp > -cog->Delta){	      gg->ePoint[e][d] = gg->fPoint[ff][d]; 	      gg->ePointFace[e][d] -= dp;	      gg->ePointUp[e][d] -= dp;	      gg->ePointDown[e][d] -= dp;	      mark = ibgoHidden;	    }	}	if(gg->is_undefined(nr=gg->nNext[r][nu])) nr=gg->nNext[r][no];	dy = (yr=gg->nPoint[nr][dr]) - yf; if(dy<0) dy = -dy;	de1 = de/dy; if(de1<0) de1 = -de1;	dp1 = dp/dx; if(dp1<0) dp1 = -dp1;	if(ibgBasicMode >= hideFew){	  if(de1 + ibgEdgeTooClosePar*dp1 < ibgEdgeTooClose){	    mark = ibgoHidden;	  }	}	de = gg->ePoint[e][dr] - yr;	if(de<cog->Delta && de > -cog->Delta){	    gg->ePoint[e][dr] = yr;	    gg->ePointFace[e][dr] -= de;	    gg->ePointUp[e][dr] -= de;	    gg->ePointDown[e][dr] -= de;	}	de = gg->ePoint[e][d] - xu;	if(de<cog->Delta && de > -cog->Delta){	    gg->ePoint[e][d] = xu;	    gg->ePointFace[e][d] -= de;	    gg->ePointUp[e][d] -= de;	    gg->ePointDown[e][d] -= de;	}	de = gg->ePoint[e][d] - xo;	if(de<cog->Delta && de > -cog->Delta){	    gg->ePoint[e][d] = xo;	    gg->ePointFace[e][d] -= de;	    gg->ePointUp[e][d] -= de;	    gg->ePointDown[e][d] -= de;	}      }      if(gg->is_undefined(nr=gg->nNext[r][nu])) continue;      rt = (gg->nPoint[nr][dr] - yf)/dx; if(rt<0) rt = -rt;      if(ibgBasicMode >= hideFew){	if((ls=gg->bnNext[r][bu]) &&	   (fr=gg->lFaceDown[ls])  &&	   (!gg->is_outside(gg->nNext[gg->Other(r)][nu]))){	  rf = (gg->fPoint[fr][dr] - yf)/dx; if(rf<0) rf = -rf;	  if( rt < 0.501){	    if(df > ibgOnLongSideButClose*rt)	mark = ibgoHidden;	  }else if( rt > 1.99){	    if((rf < ibgOnLongSideButClose) &&	       (df < ibgOtherFaceTooClose))	mark = ibgoHidden;	  }else if(df < ibgFaceVeryClose){	    if(rf<ibgFaceVeryClose*rt){	      if(d<dr)				mark = ibgoHidden;	    }else					;//mark = ibgoHidden;	  }else if(df > rf){	    if(df < ibgOtherFaceTooClose)		mark = ibgoHidden;	  }	}            }    }    gg->fType[ff] = mark;    gg->fType[ff] = ibgoVisible;    if(mark == ibgoHidden){       cogInfoOmittedFaces++; cogInfoOmittedFaces(" <>(<>)\n")<<ff;    }  }  //  shift(gg,cog->Delta);}// 	void CogenOctree::shift(ibgoctree gg, wzFloat delta) const;// Shifts the faces, edges and vertices which are in an absolute// delta-environment of nodes, lines and planes to the exact position// of these nodes, lines and planes.// Hides nodes under faces resp. faces/nodes under edges.void CogenOctree::shift(ibgoctree gg, wzFloat delta) const{  wzIndex ll,d,r,o,s,bo,bu,no,nu,nr,ff,ee;  wzFloat xu,du,xo,d0,xf,df,yf,de,yr,dr;  wzFloat delta2 = 2*delta;  //  wzFloat deltaN = -delta;  wzFloat delta2N = -delta2;  wzBoolean rHide = RegionNodeRemoval & UnderdogRemoval;  wzBoolean fHide = FaceNodeRemoval   & UnderdogRemoval;  //  wzBoolean eHide = EdgeNodeRemoval   & UnderdogRemoval;  //  wzBoolean vHide = VertexNodeRemoval & UnderdogRemoval;  wzRangeLoop(gg->faces,ff){    if(gg->fType[ff]&ibgoHidden) continue;    ll = gg->fLine[ff]; 	d  = gg->lDirection(ll);    bo = gg->lNodeUp[ll];	no = gg->bnBase[bo];    bu = gg->lNodeDown[ll];	nu = gg->bnBase[bu];    for(s=0;s<gg->Lines;s++){      if(s!=d)  gg->fPoint[ff][s] = gg->nPoint[nu][s];    }    du = (xf = gg->fPoint[ff][d]) - (xu = gg->nPoint[nu][d]);    wzAssert(du>deltaN);    if(du<delta){      gg->fPoint[ff][d]	= xf	 = xu;      gg->fPointUp[ff][d] 	-= du;      gg->fPointDown[ff][d]	-= du;      if(fHide&&(gg->bnType[bu]&ibgoUnderFace)) gg->fType[ff] = ibgoHidden;      if(rHide)  gg->bnType[bu]  = ibgoHidden;      gg->bnType[bu] 		|= ibgoUnderFace;    }    d0 = (xo = gg->nPoint[no][d]) - xf;    wzAssert(d0>deltaN);    if(d0<delta){      gg->fPoint[ff][d]	= xf	 = xo;      gg->fPointUp[ff][d] 	+= d0;      gg->fPointDown[ff][d]	+= d0;      if(fHide&&(gg->bnType[bo]&ibgoUnderFace)) gg->fType[ff] = ibgoHidden;      if(rHide)  gg->bnType[bo]  = ibgoHidden;      gg->bnType[bo] 		|= ibgoUnderFace;    }    for(s=0;s<gg->LineSides;s++){      r  = gg->lsLine[d][s]; o = gg->Up(r);      ee = gg->fEdge[s][ff];      if(ee>0){	du = gg->ePoint[ee][d]  - xu;	d0 = gg->ePoint[ee][d]  - xo;	df = gg->ePoint[ee][d]  - xf;	if(du < delta2 && du > delta2N){	  gg->ePoint[ee][d]	 = xu;	  gg->ePointFace[ee][d]	-= du;	  gg->ePointUp[ee][d]	-= du;	  gg->ePointDown[ee][d]	-= du;	}else if(d0 < delta2 && d0 > delta2N){	  gg->ePoint[ee][d]	 = xo;	  gg->ePointFace[ee][d]	-= d0;	  gg->ePointUp[ee][d]	-= d0;	  gg->ePointDown[ee][d]	-= d0;	}else if(df < delta2 && df > delta2N){	  gg->ePoint[ee][d]	 = xf;	  gg->ePointFace[ee][d]	-= df;	  gg->ePointUp[ee][d]	-= df;	  gg->ePointDown[ee][d]	-= df;	}	if(gg->is_undefined(nr=gg->nNext[r][nu])) nr=gg->nNext[r][no];	de = gg->ePoint[ee][o] - (yf=gg->fPoint[ff][o]);	dr = gg->ePoint[ee][o] - (yr=gg->nPoint[nr][o]);	if(de < delta2 && de > delta2N){	  gg->ePoint[ee][o] 	 = yf;	  gg->ePointFace[ee][o]	-= de;	  gg->ePointUp[ee][o] 	-= de;	  gg->ePointDown[ee][o] -= de;	  if(fHide && df < delta2 && df > delta2N) gg->fType[ff]  = ibgoHidden;	  if(rHide && du < delta2 && du > delta2N) gg->bnType[bu] = ibgoHidden;	  if(rHide && d0 < delta2 && d0 > delta2N) gg->bnType[bo] = ibgoHidden;	}	if(dr<delta2 && dr > delta2N){	  gg->ePoint[ee][o] 	 = yr;	  gg->ePointFace[ee][o] -= dr;	  gg->ePointUp[ee][o] 	-= dr;	  gg->ePointDown[ee][o] -= dr;	}      }    }  }}void CogenOctree::hideBoundaryNodes(ibgoctree gg) const{  wzIndex bb;  if(RegionNodeRemoval == 0xff){    wzRangeLoop(gg->bnodes,bb){      gg->bnType[bb] = ibgoHidden;    }  }}void CogenOctree::mark(ibgoctree gg, wzFloat delta) const{  wzIndex bn,ff;  wzRangeLoop(gg->bnodes,bn){    gg->bnType[bn] = ibgoVisible;  }  wzRangeLoop(gg->faces,ff){    gg->fType[ff] = ibgoVisible;  }  shift(gg,10*delta);  hideBoundaryNodes(gg);  hideIrregular(gg);  hideLongSideIntersections(gg);  hideForbiddenFaceDirections(gg);  return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -