Mesh中的隐藏边


我们在《Mesh的数据格式》这篇wiki中介绍了Mesh的底层数据格式,Mesh元素的每一个面都是由顶点数组的索引构成的。我们知道索引都是正整数,但是有时候在通过keyin命令“analyze element”查看Mesh的数据时,会碰到索引为负数的情况,如下截图所示:

为什么会出现负数呢?我们以上图中的第三个(索引为2)面的数据为例说明,这个面是由顶点数组中的第568(索引值从1开始)三个点组成的。元素在视图中的显示效果如下图所示:

可以看到这个面的三条边中56以及68这两条边是显示出来的,而85这条边是没有显示的,其实这就是面的索引中8的索引为负数所起的效果。如果们使用Mstn的“Mesh From Element”工具,并关闭“Hide Smooth Edges”的选项,对元素处理以后就可以看到如下图所示的效果:

可以看到之前隐藏的边也显示出来了,再次查看其Mesh数据可以看到面的索引值都为正了:

我们在代码中可以通过PolyfaceHeader下的MarkAllEdgesVisible函数实现此功能,具体代码如下所示:

ElementAgenda eleAgen;
	SelectionSetManager::GetManager().BuildAgenda(eleAgen);
	if (eleAgen.GetCount() < 1)
		return;
	EditElementHandleR eeh = eleAgen[0]; 
	MeshHeaderHandler* meshHandler = dynamic_cast<MeshHeaderHandler*>(&eeh.GetHandler());
	PolyfaceHeaderPtr meshData;
	meshHandler->GetMeshData(eeh, meshData);
	meshData->MarkAllEdgesVisible();
	EditElementHandle eehNew;
	MeshHeaderHandler::CreateMeshElement(eehNew, &eeh, *meshData, ACTIVEMODEL->Is3d(), *ACTIVEMODEL);
	eehNew.ReplaceInModel(eeh.GetElementRef());