📄 cogcube.cxx
字号:
#include "cog.hxx"// This file contains the implementations for cells other than simplices:/*cogIndex Cogeometry::Square(cogFlag2& f, const cogFlag1& o, const cogSquare& s) const;cogIndex Cogeometry::Cube(cogFlag3& f, const cogFlag2& o, const cogCube& c) const; */cogIndex Cogeometry::Square(cogFlag2& f, const cogFlag1& o, const cogSquare& s) const{ cogTriangle t0(s.c0,s.c1,s.c2); cogIndex rc = Triangle(f,o,t0); cogIndex rt,i; switch(rc){ case cogRCEdgeFound: return cogRCEdgeFound; case cogRCFaceFoundOn01: return cogRCFaceFoundOn01; case cogRCFaceFoundOn02: rt = 3; break; case cogRCFaceFoundOn12: return cogRCFaceFoundOn12; } cogTriangle t1(s.c2,s.c0,s.c1); cogTriangle t3(s.c0,s.c2,s.c3); cogPoint p1,po,p0; cogFlag1 t(p1,p0,po); t = f; for(i=0;i<5;i++){ switch(rt){ case 1: rc=Triangle(f,t,t1); switch(rc){ case cogRCEdgeFound: return cogRCEdgeFound; case cogRCFaceFoundOn01: rt = 3; break; case cogRCFaceFoundOn02: return cogRCFaceFoundOn12; case cogRCFaceFoundOn12: return cogRCFaceFoundOn01; } break; case 3: rc=Triangle(f,t,t3); switch(rc){ case cogRCEdgeFound: return cogRCEdgeFound; case cogRCFaceFoundOn01: rt = 1; break; case cogRCFaceFoundOn02: return cogRCFaceFoundOn03; case cogRCFaceFoundOn12: return cogRCFaceFoundOn23; } break; } } return cogRCError;}cogIndex Cogeometry::Cube(cogFlag3& f, const cogFlag2& o, const cogCube& c) const{ cogTetrahedron vol(c.c6,c.c0,c.c2,o.p2); cogIndex rc,rt,i; if(vol.volume()>0){ // incoming triangle 012 cogTetrahedron t1(c.c0,c.c1,c.c2,c.c6); rc = Tetrahedron(f,o,t1); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: return cogRCEdgeFoundOn0123; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn1256; case cogRCEdgeFoundOn013: rt = 15; break; case cogRCEdgeFoundOn023: rt = 23; break; } }else{ // incoming triangle 023 cogTetrahedron t1(c.c0,c.c2,c.c3,c.c6); rc = Tetrahedron(f,o,t1); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: return cogRCEdgeFoundOn0123; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn2367; case cogRCEdgeFoundOn013: rt = 21; break; case cogRCEdgeFoundOn023: rt = 37; break; } } cogTetrahedron t15(c.c6,c.c0,c.c1,c.c5); cogTetrahedron t54(c.c6,c.c0,c.c5,c.c4); cogTetrahedron t47(c.c6,c.c0,c.c4,c.c7); cogTetrahedron t73(c.c6,c.c0,c.c7,c.c3); cogTetrahedron t32(c.c6,c.c0,c.c3,c.c2); cogTetrahedron t21(c.c6,c.c0,c.c2,c.c1); cogTetrahedron t51(c.c0,c.c6,c.c5,c.c1); cogTetrahedron t45(c.c0,c.c6,c.c4,c.c5); cogTetrahedron t74(c.c0,c.c6,c.c7,c.c4); cogTetrahedron t37(c.c0,c.c6,c.c3,c.c7); cogTetrahedron t23(c.c0,c.c6,c.c2,c.c3); cogTetrahedron t12(c.c0,c.c6,c.c1,c.c2); cogPoint p2,p1,po,p0; cogFlag2 t(p2,p1,p0,po); wzAssert(t21.volume()>0); for(i=0;i<20;i++){ t=f; switch(rt){ case 12: rc = Tetrahedron(f,t,t12); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 15; break; case cogRCEdgeFoundOn013: rt = 23; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0123; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn1256; } break; case 23: rc = Tetrahedron(f,t,t23); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 21; break; case cogRCEdgeFoundOn013: rt = 37; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0123; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn2367; } break; case 37: rc = Tetrahedron(f,t,t37); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 32; break; case cogRCEdgeFoundOn013: rt = 74; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0347; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn2367; } break; case 74: rc = Tetrahedron(f,t,t74); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 73; break; case cogRCEdgeFoundOn013: rt = 45; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0347; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn4567; } break; case 45: rc = Tetrahedron(f,t,t45); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 47; break; case cogRCEdgeFoundOn013: rt = 51; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0145; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn4567; } break; case 51: rc = Tetrahedron(f,t,t51); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 54; break; case cogRCEdgeFoundOn013: rt = 12; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0145; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn1256; } break; case 15: rc = Tetrahedron(f,t,t15); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 12; break; case cogRCEdgeFoundOn013: rt = 54; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn1256; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0145; } break; case 54: rc = Tetrahedron(f,t,t54); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 51; break; case cogRCEdgeFoundOn013: rt = 47; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn4567; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0145; } break; case 47: rc = Tetrahedron(f,t,t47); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 45; break; case cogRCEdgeFoundOn013: rt = 73; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn4567; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0347; } break; case 73: rc = Tetrahedron(f,t,t73); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 74; break; case cogRCEdgeFoundOn013: rt = 32; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn2367; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0347; } break; case 32: rc = Tetrahedron(f,t,t32); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 37; break; case cogRCEdgeFoundOn013: rt = 21; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn2367; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0123; } break; case 21: rc = Tetrahedron(f,t,t21); switch(rc){ case cogRCVertexFound: return rc; case cogRCEdgeFoundOn012: rt = 23; break; case cogRCEdgeFoundOn013: rt = 15; break; case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn1256; case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0123; } break; default: wzAssert(0); } } wzAssert(0); return cogRCError;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -