python VTK(二十四) ----图形基本操作 多分辨率策略(模型细化的三种方法)

网格抽取

reader = vtk.vtkPolyDataReader()
reader.SetFileName(r'E:/fran_cut.vtk')
reader.Update()
original = reader.GetOutput()

print('抽取前:','---------------')
print('模型点数为:', original.GetNumberOfPoints())
print('模型面数为:', original.GetNumberOfPolys())
'''
VTK中主要有三种网格抽取类:vtkDecimatePro、vtkQuadricDecimation、vtkQuadricClustering。vtkDecimatePro最为常用
该方法是用一种塌陷的方法来删除点和单元,处理速度比较快,而且可以方便地控制网格抽取的幅度,得到不同级别的模型数据
接收的都是三角网格的vtkPolyData数据,如果为多边形,则需要通过vtkTriangleFilter将多边形转换为三角形网格数据
'''
decimate = vtk.vtkDecimatePro()  # 接收一个单元为三角网格的vtkPolyData数据
decimate.SetInputData(original)
decimate.SetTargetReduction(.80)
'''
用于设置变量TargetReduction的大小,将网格面片抽取的比例控制在0~1这里设置为0.8,说明有80%的三角面片单元将被移除
使用这个函数可以得到不同程度的简化网格模型,需满足四个条件
1. vtkDecimatePro需要支持模型拓扑的改变,即将PreserveTopology变量的值设为False
2. 支持网格分裂,即Splitting变量的值设置为True
3. 支持修改模型的边界,即将变量BoundaryVertexDeletion的值设置为True
4. 设置最大误差变量MaximumError的值为VTK_DOUBLE_MAX
在满足这四个条件的情况下,可以得到不同简化程度的模型,如果上述四个条件不满足,最终得到的模型简化率并非所期望的简化率
'''
decimate.Update()

decimated = decimate.GetOutput()
print('抽取后:','---------------')
print('模型点数为:', decimated.GetNumberOfPoints()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值