// 算法2.4:链条扩展算法 void CFaceIdentification::ExtendLoopByPriority() { CObArray extdLoopArr; m_pFLPool->GetExtendLoopsByPriority(extdLoopArr); if (extdLoopArr.GetSize() == 0) { // Do partition CFaceClipping::BodyPartition(&(m_pFLPool->m_faceLoopArray), m_pAsmbBody); CFaceClipping::BodyRestCopy(&(m_pFLPool->m_loopArray), m_pAsmbBody); return; } // 搜索得到所有扩展对的类型:Merg1,Thrd2和Math3 CP_ParaLoopsGroupsArr * plgArr = m_pFLPool->GetExtendLoopPair(extdLoopArr); extdLoopArr.RemoveAll(); if(plgArr == NULL) return TopologyDeduce(); CP_ParallelLoopsGroup * bestParaGroup = *(std::max_element(plgArr->begin(), plgArr->end(), CP_ParallelLoopsGroup::CompareTo)); m_pFLPool->ConnectLoop((CP_LoopExt *&)bestParaGroup->loopExtd, (CP_LoopExt *&)bestParaGroup->loopNext, (CP_LoopExt *&)bestParaGroup->loopRest, m_pAsmbBody); DeleteParaLoopsGroupsArr(plgArr); TopologyDeduce(); }
int CSTDFUFILESApp::ExitInstance() { int i; for (i=0;i<=g_Images.GetUpperBound();i++) { CImage *pImage=(CImage*)g_Images.GetAt(i); delete pImage; } g_Images.RemoveAll(); for (i=0;i<=g_DFUFiles.GetUpperBound();i++) { CDFUFile *pFile=(CDFUFile*)g_DFUFiles.GetAt(i); delete pFile; } g_DFUFiles.RemoveAll(); return CWinApp::ExitInstance(); }
// 合并之后重新计算loop的邻接优先级 void CP_LoopExt::CalcLoopAdjFaceNum() { CObArray tmpAdjLoopArr; int halfSize = GetHalfNumber(); for(int i = 0; i < halfSize; i++) { CP_LoopExt * adjLoop = (CP_LoopExt *)GetHalf(i)->m_pTwin->m_pLoop; if(adjLoop->m_adjFaceNum != -1) continue; int j; for (j = 0; j < tmpAdjLoopArr.GetSize(); ++j) { if (tmpAdjLoopArr[j] == adjLoop) break; } if (j == tmpAdjLoopArr.GetSize()) tmpAdjLoopArr.Add(adjLoop); } m_adjFaceNum = tmpAdjLoopArr.GetSize(); tmpAdjLoopArr.RemoveAll(); }
void CHTMLFont::DeleteArray(CObArray & arrArray) { for ( int nObj=0; nObj < arrArray.GetSize(); nObj++) delete (CHTMLFont *) arrArray[nObj]; arrArray.RemoveAll(); }