//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, SH Software Co. Ltd. // = FileName : X3DFace3Pt Àà // = Version : ver2.0 // = Author : zjq // = CreateDate : 2002-09-09 // = Description: X3DFace3Pt ÀඨÒå // = Maintainers: // //-----------------------------------------------------------------------------+ #include "StdAfx.h" #include "X3DFace3Pt.h" #include "XLine.h" X3DFace3Pt::X3DFace3Pt(Entity &entFace) : X3DFace(entFace) { if (GetFlag() & FLAG_UNNORMAL) { return; } int nFlag = GetFlag(); for (int i = 0; i < 4; i++) { int j = i + 1; if (j == 4) { j = 0; } XLine aLine(GetVertex(i), GetVertex(j)); if (aLine.GetLength() < _DIST_SNAP) { switch(j) { case 1: SetVertex(1, GetVertex(2)); SetVertex(2, GetVertex(3)); if (nFlag & 0x02) { nFlag |= 0x01; } if (nFlag & 0x04) { nFlag |= 0x02; } if (nFlag & 0x08) { nFlag |= 0x04; } break; case 2: SetVertex(2, GetVertex(3)); if (nFlag & 0x04) { nFlag |= 0x02; } if (nFlag & 0x08) { nFlag |= 0x04; } break; case 3: if (nFlag & 0x08) { nFlag |= 0x04; } break; } nFlag &= ~0x08; if (nFlag == 0x01 || nFlag == 0x02 || nFlag == 0x04) { ; } else { nFlag |= FLAG_UNNORMAL; } SetFlag(nFlag); return; } } nFlag |= FLAG_UNNORMAL; SetFlag(nFlag); } X3DFace3Pt::~X3DFace3Pt() { } int X3DFace3Pt::GetMergeLine(XLine *pLine) { ASSERT(pLine != NULL); if (!(*this)) { return RTERROR; } switch (GetFlag()) { case 0x01: pLine->SetPoints(GetVertex(0), GetVertex(1)); break; case 0x02: pLine->SetPoints(GetVertex(1), GetVertex(2)); break; default: pLine->SetPoints(GetVertex(2), GetVertex(0)); break; } return RTNORM; } int X3DFace3Pt::MergeEdge() { if (!(*this)) { return -1; } int rc; switch (GetFlag()) { case 0x01: rc = 0; break; case 0x02: rc = 1; break; default: rc = 2; break; } return rc; } int X3DFace3Pt::OppHidePoint() { if (!(*this)) { return -1; } int rc; switch(GetFlag()) { case 0x01: rc = 2; break; case 0x02: rc = 0; break; default: rc = 1; break; } return rc; }