【MSCE U13 C++】如何分离body中lump,并把lump转换成body?

附图是一个智能实体,由不连接的4个lump组成。请教老师:

(1)如何用 mdlSolid_bodyData 和 mdlSolid_lumpData函数分离body中的lump?

(2)分离出的lump是否可以直接用 mdlSolid_bodyToElement 转换成元素描述符?还是需要lump先转换成body后再转换?

我用下面代码测试了一下没有成功,后来只好用 mdlSolid_booleanDisjoint 布尔运算函数来得到多个分开的body,非常感谢。

bool getSheetOrSolidBody(BODY_TAG* pBody, Transform& bodyTransform, EditElementHandleCR elemHandle)
{
if (nullptr == pBody || !elemHandle.IsValid())
return false;

MSElementDescrCP edP = elemHandle.GetElementDescrCP();

if (SUCCESS != mdlSolid_elementToBody(pBody, &bodyTransform, const_cast<MSElementDescrP>(edP), ACTIVEMODEL, 1L))
{
return false;
}

if (NULL == pBody)
return false;

if (!mdlSolid_isSolidBody(*pBody) && !mdlSolid_isSheetBody(*pBody))
{
mdlSolid_deleteEntity(*pBody);
return false;
}

return true;
}

bool doubleClickCallbackFunc(DisplayPathCP path)
{
	BODY_TAG pBody;
	Transform bodyTransform;
	EditElementHandle eeh(path->GetHeadElem(), path->GetRoot());
	if (!getSheetOrSolidBody(&pBody, bodyTransform, eeh))
		return false;

	int lumpCount = 0;
	LUMP_TAG lump;
	mdlSolid_bodyData(nullptr, &lump, nullptr, pBody);
	while(lump)
	{
		LUMP_TAG next;
		lumpCount++;
		mdlSolid_lumpData(nullptr, &next, lump);
		lump = next;
	}

	mdlDialog_dmsgsPrint(WPrintfString(L"lump Count: %d", lumpCount));

	return false;
}

extern "C" DLLEXPORT void MdlMain (int argc, WCharCP argv[])
{
	LocateCallback::SetElementDoubleClickFunction(doubleClickCallbackFunc);
}

Parents Reply Children
No Data