我有一个obj文件网格,我想通过OpenMesh从它中提取连接的组件。我可以找到边界顶点和边,但是在Openmesh中是否有一种直接将网格划分为连通组件的方法?
发布于 2014-02-02 16:52:24
这个功能不是由OpenMesh提供的(库的目标只是提供一个网格数据结构)。OpenFlipper是一个建立在OpenMesh之上的网格处理库,它是一个更合适的候选库,但也不提供此功能。但是,您可以在MeshTools/MeshInfoT.cc中的代码库中找到一个计算连接组件数量的componentCount函数(它只是对顶点图进行深度优先搜索)。
基于此函数,您应该能够编写代码将网格划分为其连接的组件:
发布于 2020-02-14 03:21:38
实际上,我用网格的对偶图来解决这个问题。因为如果您直接在原始图上进行图搜索(BFS或DFS等),无论您在每个顶点或每个边上标记连通性,您总是需要处理一些特殊情况,比如两个循环:两个环的大多数顶点是重合的,除了一个顶点不重合外,只留下一个面:黄色和蓝色的环只留下一面。。
因此,为了检查网格是否是切片的,我们实际上关注的是face连接。因此,我只需执行双重操作(在Openmesh中对人脸进行迭代,并构建对偶关系) 对偶关系。
然后,在对偶图上执行DFS/BFS。每当您将下一个顶点放入挂起的列表中时,请检查该边是否是一个循环上的边的对偶(注意,,边必须在一个循环上,而不是两个循环上的两个顶点,分别为)。最后,只需检查顶点数(如果循环不分割网格,则该数目应与对偶图中的原始顶点数相同)。
您还可以在执行BFS/DFS时添加标签,以标识不同的连接部分。
https://stackoverflow.com/questions/21502416
复制相似问题