OpenMesh 删除网格顶点

OpenMesh 提供了 delete_vertex() 函数来实现从网格中删除顶点,在删除掉顶点的同时,所有与该顶点相连的边也同时被删除。

OpenMesh 官方文档 中给的顶点删除函数声明如下:

void OpenMesh::PolyConnectivity::delete_vertex(VertexHandle _vh, bool _delete_isolated_vertices = true)

Mark vertex and all incident edges and faces deleted.

Items marked deleted will be removed by garbageCollection().

Attention: Needs the Attributes::Status attribute for vertices, edges and faces.

需要注意的是,在删除几何元素前,需要获取网格顶点、边和面的状态属性,并在删除结束后释放。所有正确的删除网格顶点的代码如下:

MyMesh mesh;
vector<MyMesh::VertexHandle>    delete_vh;     //删除顶点的集合
if (!mesh.has_vertex_status())  mesh.request_vertex_status();
if (!mesh.has_face_status())    mesh.request_face_status();
if (!mesh.has_edge_status())    mesh.request_edge_status();

for (auto vit=mesh.vertices_begin(); vit!=mesh.vertices_end(); vit++)
{
    if (find(delete_vh.begin(), delete_vh.end(), vit.handle()) ==delete_vh.end())
    {
        mesh.delete_vertex(vit.handle(), true);
    }
}
mesh.garbage_collection();

if (mesh.has_vertex_status())  mesh.release_vertex_status();
if (mesh.has_face_status())    mesh.release_face_status();
if (mesh.has_edge_status())    mesh.release_edge_status();
时间: 2024-08-29 16:16:52

OpenMesh 删除网格顶点的相关文章

删除网格单元

vtk中的多边形通常由很多点和相应的网格构成也就是常说的cell. 可以添加网格单元: vtkPolyData* polyData=vtkPolyData::New(); vtkCellArray* polys=vtkCellArray::New(); for(int j=0,cell=0;j<num_triangles;j++) { polys->InsertNextCell(3); polys->InsertCellPoint(0); polys->InsertCellPoin

平台网格部件删除选择行

删除网格部件选择行,未删除数据库的数据.需要勾选网格部件的"允许多选"属性,才可以删除多行:多选数据时按Ctrl键.  新建一个窗体,绑定只读业务表,在窗体功能管理中添加一个"删除选择行数据"功能,具体代码如下: 运行效果:  按住Ctrl键,选择网格中的多条数据后,点击"删除选择行数据"按钮,将从网格中删除选中的这些数据,但是未从数据库中删除,所以点击"刷新"按钮删除的数据将从新显示. 原文地址:http://bbs.del

网格简化技术研究报告

网格简化技术研究报告 吕伟 问题及场景 超大场景环境下,为了精细.真实的塔模型,采用分级简化铁塔和绝缘子串模型的方法,利用PageLOD分页细节层次的机制,在不同范围下展现不同精细程度的外观. 简化模型要求速度快.质量高.文件体积小等特点. 网格简化的算法分类 删减法 删减法是目前算法中采用最多的一种模型简化操作.该方法通过重复依次删除对模型特征影响较小的几何元素并重新三角化来达到简化模型的目的.根据删除的几何元素的不同,通常又可以分成顶点删除(Vertex removal)法.边折叠(Edge

【Unity】Mesh网格编程(四)麦比乌斯环

前言 事隔四个多月,第二篇网格编程原创,本次献给大家的是麦比乌斯环. 其实这个早就想做了,还是轻松下来的时候思绪转的快. 不废话,先看效果: 博文首发:http://blog.csdn.net/duzixi 工程资源准备: 1. 本脚本要放在Editor文件夹下 2. 在资源中有一个空对象,作为顶点预设体,创建时要引入 3. 在Resources文件夹下有一个材质,叫"M" 源代码: using UnityEngine; using UnityEditor; using System.

Unity加载模块深度解析(网格篇)

在上一篇 加载模块深度解析(一)中,我们重点讨论了纹理资源的加载性能.这次,我们再来为你揭开其他主流资源的加载效率. 这是侑虎科技第53篇原创文章,欢迎转发分享,未经作者授权请勿转载.同时如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨.(QQ群465082844) 资源加载性能测试代码 与上篇所提出的测试代码一样,我们对于其他资源的加载性能分析同样使用该测试代码.我们将每种资源均制作成一定大小的AssetBundle文件,并逐一通过以下代码在不同设备上进行加载,以期得到不同硬件设备上的资

网格形变算法(Gradient-Based Deformation)

将三角网格上的顶点坐标(x,y,z)看作3个独立的标量场,那么网格上每个三角片都存在3个独立的梯度场.该梯度场是网格的微分属性,相当于网格的特征,在形变过程中年不发生变化(避免网格形变后畸形).那么当用户拖拽网格上的控制点集时,网格形变问题即变为求解以下式子: 根据变分法,上式最小化即求解泊松方程: 其中Φ为待求的网格形变后坐标,w为网格形变后的梯度场. 上式可以进一步表示为求解稀疏线性方程组: 其中L为网格的拉普拉斯算子,b为梯度场w在网格顶点处的散度值. 问题的关键是如何得到网格形变后的梯度

网格补洞算法(Radial Basis Function)

在逆向工程中,由于设备或模型的原因,我们获取得到的三维模型数据往往并不完整,从而使得生成的网格模型存在孔洞,这对后续的模型分析会造成影响.下面介绍一种基于径向基函数(RBF:Radial Basis Function)的三角网格补洞方法. Step 1:检测孔洞边界 三角网格是由一系列顶点(V)以及由这些顶点所构成的三角面片(F)所组成,由三角面片可以得到网格的边(E).通常一条边连接两个三角面片,这种边称为网格内部边,而如果某条边仅连接一个三角面片,那么称这条边为网格边界边,所有的边界边按顺序

关于Unity中Mesh网格的详解

3D模型 通过3D建模软件所建出来的点和面,如以三角形为主的点和面,比如人的脑袋一个球,就是由各种各样的三角形组成的点和面. 点和面以及纹理坐标都是通过3D建模软件建模出来的. Unity会帮我们把模型的信息存到Mesh里面来,Mesh翻译成中文是网格. 顶点,三角形,纹理坐标,法线和切线. 3D建模软件 1:Autodesk 3D Studio Max 支持mac os windows;2: Autodesk 3D Maya 支持windows3: Cinema4D 支持mac os wind

顶点法向量从物体坐标系变换到世界坐标系

3维网格模型的顶点的法向量一开始是定义在模型坐标系中的,在将模型布置在场景中后,根据光照模型计算颜色时需要用到顶点法向量,由于光照都是在世界坐标系中进行计算,这时用到的法向量也应该是定义在世界坐标系中.所以我们需要设法将顶点法向量从模型坐标系中转换到世界坐标系中. 我们已经知道通过缩放.旋转.平移三种基本操作合成的model矩阵可以将网格顶点坐标从模型坐标系中转换到世界坐标系中.那么这个model矩阵是否也可以将顶点法向量转换到世界坐标系呢?如果不行,那么需要找到一个可以完成这个任务的矩阵. 1