in UVAtlas/isochart/progressivemesh.cpp [387:474]
bool CProgressiveMesh::IsProgressiveMeshToplogicValid(
PMISOCHARTEDGE* pEdge,
PMISOCHARTVERTEX* pReserveVertex,
PMISOCHARTVERTEX* pDeleteVertex) const
{
for (size_t k = 0; k < 2; k++)
{
if (pEdge->dwOppositVertID[k] == INVALID_VERT_ID)
{
break;
}
PMISOCHARTVERTEX* pThirdVertex =
m_pVertArray + pEdge->dwOppositVertID[k];
for (size_t j = 0; j < pThirdVertex->edgeAdjacent.size(); j++)
{
PMISOCHARTEDGE* pEdge1 = m_pEdgeArray + pThirdVertex->edgeAdjacent[j];
if (IsEdgeOppositeToVertex(pEdge1, pReserveVertex)
&& (IsEdgeOppositeToVertex(pEdge1, pDeleteVertex)))
{
return false;
}
}
}
PMISOCHARTFACE* pFace1 =
m_pFaceArray + pEdge->dwFaceID[0];
PMISOCHARTFACE* pFace2 = nullptr;
if (!pEdge->bIsBoundary)
{
pFace2 = m_pFaceArray + pEdge->dwFaceID[1];
}
for (size_t j = 0; j < pReserveVertex->edgeAdjacent.size(); j++)
{
PMISOCHARTEDGE* pEdge1 = m_pEdgeArray + pReserveVertex->edgeAdjacent[j];
if (pEdge1->dwID == pFace1->dwEdgeID[0]
|| pEdge1->dwID == pFace1->dwEdgeID[1]
|| pEdge1->dwID == pFace1->dwEdgeID[2])
{
continue;
}
if (pFace2)
{
if (pEdge1->dwID == pFace2->dwEdgeID[0]
|| pEdge1->dwID == pFace2->dwEdgeID[1]
|| pEdge1->dwID == pFace2->dwEdgeID[2])
{
continue;
}
}
for (size_t k = 0; k < pDeleteVertex->edgeAdjacent.size(); k++)
{
PMISOCHARTEDGE* pEdge2 = m_pEdgeArray + pDeleteVertex->edgeAdjacent[k];
if (pEdge2->dwID == pFace1->dwEdgeID[0]
|| pEdge2->dwID == pFace1->dwEdgeID[1]
|| pEdge2->dwID == pFace1->dwEdgeID[2])
{
continue;
}
if (pFace2)
{
if (pEdge2->dwID == pFace2->dwEdgeID[0]
|| pEdge2->dwID == pFace2->dwEdgeID[1]
|| pEdge2->dwID == pFace2->dwEdgeID[2])
{
continue;
}
}
// If true, the face (pReserveVertex, pDeleteVertex, pEdge1->dwVertexID[0])
// or face (pReserveVertex, pDeleteVertex, pEdge1->dwVertexID[1) will
// degenerate to a segment.
if (pEdge2->dwVertexID[0] == pEdge1->dwVertexID[0]
|| pEdge2->dwVertexID[0] == pEdge1->dwVertexID[1]
|| pEdge2->dwVertexID[1] == pEdge1->dwVertexID[0]
|| pEdge2->dwVertexID[1] == pEdge1->dwVertexID[1])
{
return false;
}
}
}
return true;
}