#!/usr/bin/env python
# -*- coding:utf-8 -*-
import vtk
# 封闭性检测 及 填充漏洞
# 生成带空洞的网格球
sphereSource = vtk.vtkSphereSource()
sphereSource.Update()
# 提供了插入和检索值的方法,并会自动调整大小以保存新数据
ids = vtk.vtkIdTypeArray()
ids.SetNumberOfComponents(1)
ids.InsertNextValue(2)
ids.InsertNextValue(10)
# 选择树中的节,用于存储选择结果
selectionNode = vtk.vtkSelectionNode()
selectionNode.SetFieldType(vtk.vtkSelectionNode.CELL)
selectionNode.SetContentType(vtk.vtkSelectionNode.INDICES)
selectionNode.SetSelectionList(ids)
selectionNode.GetProperties().Set(vtk.vtkSelectionNode.INVERSE(), 1)selection = vtk.vtkSelection()
selection.AddNode(selectionNode)
# 从vtkDataset中提取子集,删除操作
extractSelection = vtk.vtkExtractSelection()
extractSelection.SetInputData(0, sphereSource.GetOutput())
extractSelection.SetInputData(1, selection)
extractSelection.Update()
# vtkDataSetSurfaceFilter是更快版本的vtkGeometry()滤波器
# 但他没有一个选择范围,比vtkGeometryFilter使用更多的内存
# 只有一个选择:输入结构类型时是否使用三角形条
surfaceFilter = vtk.vtkDataSetSurfaceFilter()
surfaceFilter.SetInputConnection(extractSelection.GetOutputPort())
surfaceFilter.Update()input = vtk.vtkPolyData()
input.ShallowCopy(surfaceFilter.GetOutput())featureEdges = vtk.vtkFeatureEdges()
'''
vtkFeatureEdges能够提取多边形网格模型中四种类型的边
1. 边界边  即只被一个多边形或者一条边包含的边
2. 非流行边  被3个或3个以上的多边形包含的边
3. 特征边  需要设置一个特征角的阈值,当包含同一条边的两个三角形的法向量的夹角大于该阈值时,即为一个特征边
4. 流行边 只被两个多边形包含的边
'''
featureEdges.SetInputData(input)
featureEdges.BoundaryEdgesOn()   # 设置提取边界边
featureEdges.FeatureEdgesOff()
featureEdges.ManifoldEdgesOff()
featureEdges.NonManifoldEdgesOff()
featureEdges.Update()numberOfOpenEdges = featureEdges.GetOutput().GetNumberOfCells()
if numberOfOpenEdges:print('No close')
else:print('close')fillHolesFilter = vtk.vtkFillHolesFilter()  # 填充漏洞
fillHolesFilter.SetInputData(input)
featureEdges.Update()normals = vtk.vtkPolyDataNormals()
'''
vtkPolyDataNormals主要是用来计算法向量的,而法向量与光照和阴影计算有关。
单元的法向量朝向则与单元的点的顺序相关,只有保持所有单元的点顺序一致才能得到正确的法向量,否则在网格模型显示时会得到意外的结果
由于漏洞填充,模型的所有单元的点顺序不一致,所以使用vtkPolyDataNormals进行调整
'''
normals.SetInputConnection(fillHolesFilter.GetOutputPort())
normals.ConsistencyOn()  # 根据其他单元点的顺序调整补充点的顺序
normals.SplittingOff()
normals.Update()leftViewport = [0.0, 0.0, 0.5, 1.0]
rightViewport = [0.5, 0.0, 1.0, 1.0]originalMapper = vtk.vtkPolyDataMapper()
originalMapper.SetInputData(input)backfaceProp = vtk.vtkProperty()
backfaceProp.SetDiffuseColor(0.89, 0.81, 0.34)originalActor = vtk.vtkActor()
originalActor.SetMapper(originalMapper)
originalActor.SetBackfaceProperty(backfaceProp)
originalActor.GetProperty().SetDiffuseColor(1.0, 0.3882, 0.2784)edgeMapper = vtk.vtkPolyDataMapper()
edgeMapper.SetInputData(featureEdges.GetOutput())edgeActor = vtk.vtkActor()
edgeActor.SetMapper(edgeMapper)
edgeActor.GetProperty().SetEdgeColor(0.0, 0.0, 1.0)
edgeActor.GetProperty().SetEdgeVisibility(1)
edgeActor.GetProperty().SetLineWidth(5)filledMapper = vtk.vtkPolyDataMapper()
filledMapper.SetInputData(normals.GetOutput())filledActor = vtk.vtkActor()
filledActor.SetMapper(filledMapper)
filledActor.GetProperty().SetDiffuseColor(1.0, 0.3882, 0.2784)leftRenderer = vtk.vtkRenderer()
leftRenderer.SetViewport(leftViewport)
leftRenderer.AddActor(originalActor)
leftRenderer.AddActor(edgeActor)
leftRenderer.GetActiveCamera().SetPosition(0, -1, 0)
leftRenderer.GetActiveCamera().SetFocalPoint(0, 0, 0)
leftRenderer.GetActiveCamera().SetViewUp(0, 0, 1)
leftRenderer.GetActiveCamera().Azimuth(30)
leftRenderer.GetActiveCamera().Elevation(30)
leftRenderer.ResetCamera()rightRenderer = vtk.vtkRenderer()
rightRenderer.SetViewport(rightViewport)
rightRenderer.AddActor(filledActor)
rightRenderer.SetActiveCamera(leftRenderer.GetActiveCamera()) # 同步响应renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(leftRenderer)
renderWindow.AddRenderer(rightRenderer)
renderWindow.SetSize(640, 480)
renderWindow.Render()
renderWindow.SetWindowName("PolyDataClosed")renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindowInteractor.Initialize()
renderWindowInteractor.Start()

python VTK(二十二) ----图形基本操作 封闭性检测漏洞填充相关推荐

  1. GUI的演化和python编程——Python学习笔记之二十二

    GUI的演化和python编程--Python学习笔记之二十二 写完了有关长寿的两篇博文,本该去完成哥德尔那个命题六的.对计算机图形界面的好奇,让我把注意力暂时离开那个高度抽象难读的哥德尔,给转到计算 ...

  2. python二级第十二套答案

    python二级第十二套答案 46.考生文件夹下存在三个Python源文件,分别对应三个问题,请按照文件内说明修改代码,实现以下功能: 法定节假日是根据各国.各名族的风俗习惯或纪念要求,由国家法律统一 ...

  3. Python入门(二十二)- 常见模块2(正则表达式及容器)

    二十二 常见模块2(正则表达式及容器) 22.1 正则表达式及re模块 正则表达式(Regular Expression)用于描述一种字符串匹配模式(Pattern),它可以用于检查一个字符串是否含有 ...

  4. Python遥感图像处理应用篇(二十二):Python+GDAL 批量等距离裁剪影像-续

    之前写过一篇按照指定行列号数量来进行影像等距离裁剪的博客,链接如下: Python遥感图像处理应用篇(二十二):Python+GDAL 批量等距离裁剪影像_空中旋转篮球的博客-CSDN博客_pytho ...

  5. python图像处理笔记-十二-图像聚类

    python图像处理笔记-十二-图像聚类 学习内容 这一章主要在学习的是聚类算法以及其在图像算法中的应用,主要学习的聚类方法有: KMeans 层次聚类 谱聚类 并将使用他们对字母数据及进行聚类处理, ...

  6. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  7. 读书二十二载,信念很简单,把书念下去,然后走出去,不枉活一世。

    ‍ ‍ 关注+星标公众号,不错过精彩内容 昨天看了一篇关于博士论文的致谢,看的我想哭.改变命运有很多条路,但是对于大多数人而言,读书是改变命运的捷径. 内容是讲述了自己20多年的求学经历:小时候煤油灯 ...

  8. 自然语言处理系列二十二》词性标注》词性标注原理》词性介绍

    注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书<分布式机器学习实战>(人工智能科学与技术丛书)[陈敬雷编著][清华大学出版社] 文章目录 自然语言处理系列二十二 词性 ...

  9. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

最新文章

  1. jclouds_使用jclouds在S3上分段上传
  2. 使用 VS 附加到进程 调试发布的网站
  3. 作者:黄剑(1993-),男,清华大学计算机科学与技术系硕士生
  4. vue_ form表单 v-model
  5. 当心异步刷新后的脚本文件加载
  6. kotlin_Kotlin print(),println(),readLine(),Scanner,REPL
  7. 书籍-Druid实时大数据分析原理与实践
  8. 4选1数据选择器 testbench代码编写
  9. 最终幻想OL(FF14)分析 - 基本数据
  10. 适用mac微信用户的免登陆多开防撤回插件-WeChatTweak
  11. 如何获取节假日的方法
  12. 软考高级 真题 2010年上半年 信息系统项目管理师 综合知识
  13. 华硕x580nv拆机_看懂一篇拆机贴 拆遍天下机 华硕A45VM拆机清灰换硅脂 怒降25度!...
  14. 计算机控制不恒定性,计算机控制-习题答题.doc
  15. 普通话水平测试这软件很准靠谱吗,普通话考试小细节,你知道多少?
  16. nvcc -V和nvidia-smi中的cuda版本不同
  17. linux上远程文件传输工具 scp sz rz
  18. #高级语言 各种开发软件介绍
  19. 用其他账号登录插件 齐博 php,齐博CMS(原php168)整合百科系统(HDwiki)手记
  20. 历史上的今天:PHP公开发布;iPhone 4 问世;万维网之父诞生

热门文章

  1. 复高斯变量跟卡方分布、指数分布、伽马分布的关系
  2. redis缓存设置超时时间
  3. 29.VUE自定义指令directive和inserted
  4. 巴比特 | 元宇宙每日必读:美国网红利用“AI版的自己”和网友谈恋爱,收费每分钟1美元,GPT时代,数字人会变得更加普及吗?...
  5. ssas连接mysql_BI之SSAS完整实战教程1 -- 开篇, BI简介 SSAS简介
  6. 计算机的应用系统安装,处理电脑系统安装软件有哪些
  7. 显示器3d测试软件,3D画面究竟如何开启_AOC D2357PH_液晶显示器评测-中关村在线
  8. oracle删除表空间下所有的表
  9. 大物实验计算弹性模量_大学物理设计性实验用拉伸法测定金属丝的杨氏弹性模量...
  10. AIMD 为什么收敛(tcp reno/cubic 为什么好)