我们在《Mesh的数据格式》这篇wiki中介绍了Mesh的底层数据格式,Mesh元素的每一个面都是由顶点数组的索引构成的。我们知道索引都是正整数,但是有时候在通过keyin命令“analyze element”查看Mesh的数据时,会碰到索引为负数的情况,如下截图所示:
为什么会出现负数呢?我们以上图中的第三个(索引为2)面的数据为例说明,这个面是由顶点数组中的第5,6,8(索引值从1开始)三个点组成的。元素在视图中的显示效果如下图所示:
可以看到这个面的三条边中5到6以及6到8这两条边是显示出来的,而8到5这条边是没有显示的,其实这就是面的索引中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());