查看单个帖子
旧 2007-03-26, 08:37 AM   #1
huangyhg
超级版主
 
huangyhg的头像
 
注册日期: 04-03
帖子: 18592
精华: 36
现金: 249466 标准币
资产: 1080358888 标准币
huangyhg 向着好的方向发展
默认 【转帖】CDocView::DisplayEnumBodiesTessellation

void CDocView::DisplayEnumBodiesTessellation (CComPtr <IEnumBodies2> pEnumBody)
{
try
{
HRESULT hr = S_OK;
CComPtr <IBody2> pBody;
CComPtr <IEnumFaces2> pEnumFaces;
CComPtr <IFace2> pFace;
long nFetchedBodies = -1;
long nFetchedFaces = -1;
long nNumTessTriang = -1;
float* pTessTriang = NULL;
long i = 0;


hr = pEnumBody->Reset();
hr = pEnumBody->Next(1, &pBody, &nFetchedBodies);
while (nFetchedBodies > 0)
{
hr = pBody->EnumFaces(&pEnumFaces);
_ASSERT(pEnumFaces);

// set colour to blue
AutoColor Color(0, 0, 128);

// set line width to 1 pixel
AutoLineWidth LineWidth(1.0);

// get the first face
hr = pEnumFaces->Reset();
hr = pEnumFaces->Next(1, &pFace, &nFetchedFaces);
while (nFetchedFaces > 0)
{
// get display tessellation for this face
hr = pFace->GetTessTriangleCount(&nNumTessTriang);
_ASSERT(nNumTessTriang > 0);

pTessTriang = new float[9 * sizeof(float) * nNumTessTriang];
_ASSERT(pTessTriang);

ZeroMemory(pTessTriang, 9 * sizeof(float) * nNumTessTriang);

hr = pFace->IGetTessTriangles(VARIANT_TRUE, pTessTriang);
_ASSERT(pTessTriang);

// draw display tessellation
glBegin(GL_LINE_STRIP);
{
for (i = 0; i < nNumTessTriang; i++)
{
glVertex3f
(
pTessTriang[9 * i + 0],
pTessTriang[9 * i + 1],
pTessTriang[9 * i + 2]
);

glVertex3f
(
pTessTriang[9 * i + 3],
pTessTriang[9 * i + 4],
pTessTriang[9 * i + 5]
);

glVertex3f
(
pTessTriang[9 * i + 6],
pTessTriang[9 * i + 7],
pTessTriang[9 * i + 8]
);
}
}
glEnd();

delete [] pTessTriang;

// reset current face and get the next face
pFace = NULL;
hr = pEnumFaces->Next(1, &pFace, &nFetchedFaces);
}

// reset face enumerator
pEnumFaces = NULL;

// reset current body and get the next body
pBody = NULL;
hr = pEnumBody->Next(1, &pBody, &nFetchedBodies);
}
}
catch (...)
{
DebugBreak();
}
}
huangyhg离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)