📄 ibgoplane.cxx
字号:
#include "ibgoctree.hxx"ibgIndex ibgOctree::getPlane(ibgIndex e, ibgIndex s){ ibgIndex bnu=lNodeDown[e]; ibgIndex d = lDirection(e); ibgIndex pi = lsPlane[d][s]; ibgIndex pp = bnPlane[pi][bnu]; if(!pp) return createSimplePlane(e,s); return pp;}ibgIndex ibgOctree::createSimplePlane(ibgIndex e, ibgIndex s){ ibgIndex bnu=lNodeDown[e],nu=bnBase[bnu],bnur; ibgIndex bno=lNodeUp[e], no=bnBase[bno],bnor; ibgIndex bnh,bnuh,bnoh,bnrh; ibgIndex nur,nor,nuro,nh=0,nuh=0,noh=0,nrh=0,nt; ibgIndex d = lDirection(e),rd,dd; ibgInteger cl,cr,cb; wzAssert(nUp[d][nu]==no); ibgIndex r = lsLine[d][s],p,p00,p10,p01,p11; if(is_undefined(nur=nNext[r][nu])){ nh = nu; if(is_undefined(nu=nDown[d][nu])) return 0; if(is_undefined(nur=nNext[r][nu])) return 0; if(is_undefined(nor=nNext[r][no])) return 0; }else if(is_undefined(nor=nNext[r][no])){ nh = no; if(is_undefined(no=nUp[d][no])) return 0; if(is_undefined(nor=nNext[r][no])) return 0; } if(is_undefined(nuro=nUp[d][nur])){ nuh = nur; if(is_undefined(nur=nNext[r][nur])) return 0; if(is_undefined(nuro=nUp[d][nur])) return 0; } if(nuro==nor){ }else if(nor==nUp[d][nuro]){ nrh = nuro; }else if(nuro==nNext[r][nor]){ noh = nor; nor = nuro; }else{ noh = nor; nrh = nuro; if(is_undefined(nor=nUp[d][nuro])) return 0; if(nor != nNext[r][noh]) return 0; } if(isDown(r)){ r = up(r); nt=no;no=nor;nor=nt; nt=nu;nu=nur;nur=nt; nt=nh;nh=nrh;nrh=nt; } if(r<d){ dd = r; r=d; d=dd; nt=nh;nh=nuh;nuh=nt; nt=no;no=nur;nur=nt; nt=noh;noh=nrh;nrh=nt; } wzAssert(d<r); dd = down(d); rd = down(r); if(!(bnu=nBoundary[nu])) bnu=createSimpleBoundaryNode(nu); if(!(bno=nBoundary[no])) bno=createSimpleBoundaryNode(no); if(!(bnur=nBoundary[nur])) bnur=createSimpleBoundaryNode(nur); if(!(bnor=nBoundary[nor])) bnor=createSimpleBoundaryNode(nor); p00=llPlane[d][r]; wzAssert(bnPlane[p00][bnu]==0); p10=llPlane[dd][r]; wzAssert(bnPlane[p10][bno]==0); p01=llPlane[d][rd]; wzAssert(bnPlane[p01][bnur]==0); p11=llPlane[dd][rd];wzAssert(bnPlane[p11][bnor]==0); if(PlaneSides){ cl = nCell[llCell[pSide0[p00]][pSide1[p00]]][nu]; cr = nCell[llCell[pSide1[p00]][pSide0[p00]]][nu]; if(cl==cr){return 0;} } p = planes.create(); bnPlane[p00][bnu]=p; pNode[pReverse[p00]][p] = bnu; bnPlane[p10][bno]=p; pNode[pReverse[p10]][p] = bno; bnPlane[p01][bnur]=p; pNode[pReverse[p01]][p] = bnur; bnPlane[p11][bnor]=p; pNode[pReverse[p11]][p] = bnor; pEdge[p] = 0; pType[p] = pOrtho[p00]; if(PlaneSides){ if(cl) if(cb=cBoundary[cl]) pCell[0][p] = cb; else pCell[0][p] = -cl; else pCell[0][p] = 0; if(cr) if(cb=cBoundary[cr]) pCell[1][p] = cb; else pCell[1][p] = -cr; else pCell[1][p] = 0; } if(nh){ if(!(bnh=nBoundary[nh])) bnh=createSimpleBoundaryNode(nh); wzAssert(bnPlane[p00][bnh]==0); bnPlane[p00][bnh]=p; wzAssert(bnPlane[p10][bnh]==0); bnPlane[p10][bnh]=p; } if(nuh){ if(!(bnuh=nBoundary[nuh])) bnuh=createSimpleBoundaryNode(nuh); wzAssert(bnPlane[p00][bnuh]==0); bnPlane[p00][bnuh]=p; wzAssert(bnPlane[p01][bnuh]==0); bnPlane[p01][bnuh]=p; } if(noh){ if(!(bnoh=nBoundary[noh])) bnoh=createSimpleBoundaryNode(noh); wzAssert(bnPlane[p11][bnoh]==0); bnPlane[p11][bnoh]=p; wzAssert(bnPlane[p10][bnoh]==0); bnPlane[p10][bnoh]=p; } if(nrh){ if(!(bnrh=nBoundary[nrh])) bnrh=createSimpleBoundaryNode(nrh); wzAssert(bnPlane[p11][bnrh]==0); bnPlane[p11][bnrh]=p; wzAssert(bnPlane[p01][bnrh]==0); bnPlane[p01][bnrh]=p; } return p;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -