#!/usr/bin/env python
# -*- coding:utf-8 -*-
import vtkreader = vtk.vtkPolyDataReader()
reader.SetFileName(r'E:/fran_cut.vtk')
reader.Update()normFilter = vtk.vtkPolyDataNormals()    # 计算法向量
'''
vtkPolyDataNormals 针对单元为三角形或者多边形类型的polyData数据进行计算
默认情况下计算点法向量,关闭单元法向量
'''
normFilter.SetInputData(reader.GetOutput())
normFilter.SetComputePointNormals(1)    # 开启点法向量计算
normFilter.SetComputeCellNormals(0)    # 关闭单元法向量计算
normFilter.SetAutoOrientNormals(1)
normFilter.SetSplitting(0)
normFilter.Update()mask = vtk.vtkMaskPoints()   # 仅保留输入数据中的点数据及其属性,并支持点数据的采样
mask.SetInputData(normFilter.GetOutput())
mask.SetMaximumNumberOfPoints(300)  # 随机采样了300个点做Glyphing显示
mask.RandomModeOn()
mask.Update()arrow = vtk.vtkArrowSource()
arrow.Update()   # 注意# 符号化 可以通过符号化技术将法向量图形化显示
glyph = vtk.vtkGlyph3D()  # 支持Glyph图形的缩放、着色、设置空间姿态等
glyph.SetInputData(mask.GetOutput())
glyph.SetSourceData(arrow.GetOutput())   # 每一点用箭头代替
glyph.SetVectorModeToUseNormal()    # 设置向量显示模式和法向量一致,指定要使用法向量数据来控制Glyph图形的方向
glyph.SetScaleFactor(0.01)   # 设置伸缩比例,控制Glyph图形的大小
glyph.Update()originMapper = vtk.vtkPolyDataMapper()
originMapper.SetInputData(reader.GetOutput())
originActor = vtk.vtkActor()
originActor.SetMapper(originMapper)normedMapper = vtk.vtkPolyDataMapper()
normedMapper.SetInputData(normFilter.GetOutput())
normedActor = vtk.vtkActor()
normedActor.SetMapper(normedMapper)glyphMapper = vtk.vtkPolyDataMapper()
glyphMapper.SetInputData(glyph.GetOutput())
glyphActor = vtk.vtkActor()
glyphActor.SetMapper(glyphMapper)
glyphActor.GetProperty().SetColor(1.0, 0.0, 0.0)originViewport = [0.0, 0.0, 0.33, 1.0]
normedViewport = [0.33, 0.0, 0.66, 1.0]
glyphViewport = [0.66, 0.0, 1.0, 1.0]originRenderer = vtk.vtkRenderer()
originRenderer.SetViewport(originViewport)
originRenderer.AddActor(originActor)
originRenderer.ResetCamera()
originRenderer.SetBackground(1.0, 1.0, 1.0)normedRenderer = vtk.vtkRenderer()
normedRenderer.SetViewport(normedViewport)
normedRenderer.AddActor(normedActor)
normedRenderer.ResetCamera()
normedRenderer.SetBackground(1.0, 1.0, 1.0)glyphRenderer = vtk.vtkRenderer()
glyphRenderer.SetViewport(glyphViewport)
glyphRenderer.AddActor(glyphActor)
glyphRenderer.AddActor(normedActor)
glyphRenderer.ResetCamera()
glyphRenderer.SetBackground(1.0, 1.0, 1.0)renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(originRenderer)
renderWindow.AddRenderer(normedRenderer)
renderWindow.AddRenderer(glyphRenderer)
renderWindow.SetSize(900, 300)
renderWindow.Render()
renderWindow.SetWindowName('PolyDataNormal')renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindowInteractor.Initialize()
renderWindowInteractor.Start()

python VTK(十九) ----图形基本操作 法向量计算相关推荐

  1. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest):#1.打开两个文件:1个关联读操作,1个关联写操作fr=open(src,'rb') ...

  2. 《OpenCv视觉之眼》Python图像处理十九:Opencv图像处理实战四之通过OpenCV进行人脸口罩模型训练并进行口罩检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  3. Python基础十九:多进程

    Python基础十九:多进程 Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程 Author:yooongchun Email:yooon ...

  4. Python ---(十九)Tkinter窗口组件:Toplevel

    上一篇:Python -(十八)Tkinter窗口组件:PanedWindow The Tkinter Toplevel Widget ##简介 Toplevel(顶级窗口)组件类似于 Frame 组 ...

  5. java 根据经纬度计算多边形的面积_强基初中数学amp;学Python——第二十九课 根据海伦秦九韶公式编程计算三角形面积...

    问题:如果把边长都是有理数的三角形称作"有理三角形",编程计算"有理三角形"的面积(有理数或带根号的无理数,不是浮点数). 关键点分析:根号中的底化成最简分数, ...

  6. python四十九:封装

    class Animal:# 在属性前加上单下划线,那么该属性就属于类内部的属性# 但python并不会真的阻值你访问私有的属性.但非常不建议调用这种下划线开头的属性_type="动物&qu ...

  7. python三十九:logging模块

    import logginglogging.basicConfig(level=logging.DEBUG # 设置日志级别, 默认为 WARNING,filename="logger.lo ...

  8. [Python图像处理] 十九.图像分割之基于K-Means聚类的区域分割

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. QT5开发及实例学习之十九图形视图体系结构

    文章目录 一.Graphics View 框架结构的主要特点 二.Graphics View 框架结构的三元素 2.1 场景类:QGraphicsScene 类 2.2 视图类:QGraphicsVi ...

最新文章

  1. Java多线程、高并发秒杀时MySQL出现死锁原因(Deadlock found when trying to get lock)及对应解决方案
  2. 1035:等差数列末项计算
  3. 转载:使用 GNU Libtool 创建库
  4. 仪征市第二中学计算机老师,静心倾听花自开 ——仪征市第二中学徐丞老师
  5. indesign照片放入太大_猪肚鸡做法复杂,量太大,那来个简易版,用上大厨教的妙招更香了...
  6. Linux操作系统基础解析之(四)——Linux基本命令剖析(2)
  7. Linux-nginx安装
  8. 网络安全实战之靶场渗透技术
  9. CAD命令输入、结束、重复与撤销
  10. linux基础教程之部署Go语言程序到Linux服务器
  11. 一、线性表的顺序存储和基本运算
  12. 关于win11兼容性视图模式
  13. Cargo 私有仓库部署
  14. BAT脚本实现FTP文件自动传输
  15. np.mat如何使用
  16. Windows服务应用程序
  17. 【RISC-V】Trap和Exception
  18. 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
  19. 用thinkpad连接无线网时,提示“无法连接到网络”
  20. Creo 导入图片不显示

热门文章

  1. 软件测试信息采集系统案例实践,软件测试课件.ppt
  2. JavaWeb用户注册登录案例(使用mysql数据库)
  3. java字符串压缩js解压_接口实现后台GZIP压缩,pako.js 前端解压
  4. CSS3新增属性用法总结
  5. 副高职称论文发表费用
  6. tensorflow_Trax_transformer使用示例
  7. 【CNC——第4篇】初识交流伺服电机和伺服电机驱动器
  8. 浅析HTTP请求中的referrer和Referrer-Policy
  9. 云尚发卡PHP,最新云尚发卡系统1.5.7源码 自动发卡 接入支付平台 全开源可运营...
  10. iOS定位及解析经纬度【Swift】