// 算法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();

}
Example #2
0
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();
}
Example #4
0
void CHTMLFont::DeleteArray(CObArray & arrArray)
{
    for ( int nObj=0; nObj < arrArray.GetSize(); nObj++)
        delete (CHTMLFont *) arrArray[nObj];
    arrArray.RemoveAll();
}