PyQt5+VTK环境搭建

  • VTK 简介及安装
    • VTK 介绍
    • VTK 在 Python 环境下安装
      • 方法一 安装 anaconda,使用 conda install 安装:
        • 适用于 python3
        • 适用于 python 2
      • 方法二:镜像安装
      • 检测安装成功
  • VTK简单示例
    • 绘制立方体
  • PyQt5中引入VTK渲染窗口
  • PyQt5中使用VTK读取STL文件
    • VTK支持的3D文件格式

VTK 简介及安装

VTK 介绍

VTK(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk 是在面向对象原理的基础上设计和实现的,它的内核是用 C++ 构建的,包含有大约 250,000 行代码,2000 多个类,还包含有几个转换界面,因此也可以自由的通过 Java,Tcl/Tk 和 Python 各种语言使用 VTK。

VTK 是一个开放源码、自由获取的软件系统,全世界的数以千计的研究人员和开发人员用它来进行 3D 计算机图形,图像处理,可视化。VTK 包含一个 c++类库,众多的翻译接口层,包括 Tcl/Tk,Java,Python。 Visualization Toolkit 是一个用于可视化应用程序构造与运行的支撑环境,它是在三维函数库 OpenGL 的基础上采用面向对象的设计方法发展起来的,它将我们在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来。比如 Visualization Toolkit 将我们在表面重建中比较常见的 MarchingCubes 算法封装起来,以类的形式给我们以支持,这样我们在对三维规则点阵数据进行表面重建时就不必再重复编写 MarchingCubes 算法的代码,而直接使用 Visualization Toolkit 中已经提供的 vtkMarchingCubes 类。Visualization Toolkit 是给从事可视化应用程序开发工作的研究人员提供直接的技术支持的一个强大的可视化开发工具。

VTK 在 Python 环境下安装

方法一 安装 anaconda,使用 conda install 安装:

注意不同版本的 Python 对应不同的命令。

适用于 python3

install -n envA -c menpo vtk=7 python=3

或者具体到某个版本:

conda install -n envB -c menpo vtk=7 python=3.5

适用于 python 2

conda install -n envC vtk python=2

适用于 3.6:

conda install -c clinicalgraphics vtk=7.1.0

以上的命令都可以不加版本号

方法二:镜像安装

由于国内的镜像里没有 vtk,所以直接用 conda 安装会非常慢,推荐下载 whl 文件后使用 pip 安装。

提供一个下载 VTK 的 whl 文件的网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#vtk

我是 win10 系统 64 位下,使用的 python3.7,下载的是:VTK‑8.1.2‑cp37‑cp37m‑win32.whl

然后进入下载目录,启动 cmd, window power shell 或者 git bash,输入命令: pip install VTK-7.1.1-cp36-cp36m-win_amd64.whl 完成安装。

安装完成后,在使用处导入vtk包即可。

检测安装成功

示例代码:

import vtkcone_a = vtk.vtkConeSource()coneMapper = vtk.vtkPolyDataMapper()
coneMapper.SetInputConnection(cone_a.GetOutputPort())coneActor = vtk.vtkActor()
coneActor.SetMapper(coneMapper)ren1 = vtk.vtkRenderer()
ren1.AddActor(coneActor)
ren1.SetBackground(1.0, 1.0, 1.0)
ren1.SetBackground2(0.1, 0.2, 0.4)
ren1.SetGradientBackground(1)renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
renWin.SetSize(300, 300)
renWin.Render()iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)iren.Initialize()
iren.Start()

运行结果如图所示:

VTK简单示例

绘制立方体

#!/usr/bin/env python# This is (almost) a direct C++ to Python transliteration of
# <VTK-root>/Examples/DataManipulation/Cxx/Cube.cxx from the VTK
# source distribution, which "shows how to manually create vtkPolyData"
#
# A convenience function, mkVtkIdList(), has been added and one if/else
# so the example also works in version 6 or later.
#
# Lines like `obj->Delete()` have been transliterated as `del obj` to,
# preserve the resemblance to the original C++ example, although I
# doubt this achieves anything beyond what Python's garbage collection
# would do anyway.import vtk# Makes a vtkIdList from a Python iterable. I'm kinda surprised that
# this is necessary, since I assumed that this kind of thing would
# have been built into the wrapper and happen transparently, but it
# seems not.def mkVtkIdList(it):vil = vtk.vtkIdList()for i in it:vil.InsertNextId(int(i))return vil# 绘制通用方法
def myShow(cube):# Now we'll look at it.cubeMapper = vtk.vtkPolyDataMapper()if vtk.VTK_MAJOR_VERSION <= 5:cubeMapper.SetInput(cube)else:cubeMapper.SetInputData(cube)cubeMapper.SetScalarRange(0, 7)cubeActor = vtk.vtkActor()cubeActor.SetMapper(cubeMapper)# The usual rendering stuff.camera = vtk.vtkCamera()camera.SetPosition(1, 1, 1)camera.SetFocalPoint(0, 0, 0)renderer = vtk.vtkRenderer()renWin = vtk.vtkRenderWindow()renWin.AddRenderer(renderer)iren = vtk.vtkRenderWindowInteractor()iren.SetRenderWindow(renWin)renderer.AddActor(cubeActor)renderer.SetActiveCamera(camera)renderer.ResetCamera()renderer.SetBackground(0, 0, 0)renderer.SetBackground(1.0, 1.0, 1.0)renderer.SetBackground2(0.1, 0.2, 0.4)renderer.SetGradientBackground(1)renWin.SetSize(300, 300)# interact with datarenWin.Render()iren.Start()del cubeMapperdel cubeActordel cameradel rendererdel renWindel irendef main():# x = array of 8 3-tuples of float representing the vertices of a cube:# 8个三维值代表长方体的8个顶点x = [(0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (1.0, 1.0, 0.0), (0.0, 1.0, 0.0),(0.0, 0.0, 1.0), (1.0, 0.0, 1.0), (1.0, 1.0, 1.0), (0.0, 1.0, 1.0)]# pts = array of 6 4-tuples of vtkIdType (int) representing the faces#     of the cube in terms of the above vertices# 点的编号0-7,每个面由4个点组成pts = [(0, 1, 2, 3), (4, 5, 6, 7), (0, 1, 5, 4),(1, 2, 6, 5), (2, 3, 7, 6), (3, 0, 4, 7)]# We'll create the building blocks of polydata including data attributes.cube = vtk.vtkPolyData()points = vtk.vtkPoints()polys = vtk.vtkCellArray()scalars = vtk.vtkFloatArray()# Load the point, cell, and data attributes.for i in range(8):points.InsertPoint(i, x[i])for i in range(6):polys.InsertNextCell(mkVtkIdList(pts[i]))for i in range(8):scalars.InsertTuple1(i, i)# We now assign the pieces to the vtkPolyData.cube.SetPoints(points)del pointscube.SetPolys(polys)del polyscube.GetPointData().SetScalars(scalars)del scalarsmyShow(cube)# Clean updel cubemain()

运行结果如图所示:

PyQt5中引入VTK渲染窗口

from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
import vtk
from PyQt5 import QtCore, QtGui, QtWidgets
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractorclass myMainWindow(QtWidgets.QMainWindow):def __init__(self, parent=None):QtWidgets.QMainWindow.__init__(self, parent)self.frame = QtWidgets.QFrame()self.vl = QtWidgets.QVBoxLayout()self.vtkWidget = QVTKRenderWindowInteractor(self.frame)self.vl.addWidget(self.vtkWidget)self.ren = vtk.vtkRenderer()self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()# Create sourcesource = vtk.vtkConeSource()source.SetCenter(0, 0, 0)source.SetRadius(0.1)source1 = vtk.vtkSphereSource()source1.SetCenter(0, 0, 0)source1.SetRadius(0.3)# Create a mappermapper = vtk.vtkPolyDataMapper()mapper.SetInputConnection(source.GetOutputPort())mapper1 = vtk.vtkPolyDataMapper()mapper1.SetInputConnection(source1.GetOutputPort())# Create an actoractor = vtk.vtkActor()actor.SetMapper(mapper)actor1 = vtk.vtkActor()actor1.SetMapper(mapper1)self.ren.AddActor(actor)self.ren.AddActor(actor1)self.ren.ResetCamera()self.frame.setLayout(self.vl)self.setCentralWidget(self.frame)self.show()self.iren.Initialize()if __name__ == "__main__":app = QApplication(sys.argv)window = myMainWindow()sys.exit(app.exec_())

运行结果:

PyQt5中使用VTK读取STL文件

# 部分代码,在PyQt主程序中以addWidget形式嵌入到主窗口中# 添加VTK显示窗读取STL文件===============================================self.vtkWidget = QVTKRenderWindowInteractor(self.centralwidget) # 提供平台独立的响应鼠标、键盘和时钟事件的交互机制self.verticalLayout_3.addWidget(self.vtkWidget)self.ren = vtk.vtkRenderer() # 负责管理场景的渲染过程self.ren.SetBackground(1.0, 1.0, 1.0) # 设置页面底部颜色值self.ren.SetBackground2(0.1, 0.2, 0.4) # 设置页面顶部颜色值self.ren.SetGradientBackground(1) # 开启渐变色背景设置self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()# 交互器样式的一种,该样式下,用户是通过控制相机对物体作旋转、放大、缩小等操作style = vtk.vtkInteractorStyleTrackballCamera()self.iren.SetInteractorStyle(style)# Read from STL filestlreader = vtk.vtkSTLReader()stlreader.SetFileName("test.stl")# Read from OBJ file# objReader = vtk.vtkOBJReader()# objReader.SetFileName("test.obj")# Create a mappermapper = vtk.vtkPolyDataMapper() # 渲染多边形几何数据mapper.SetInputConnection(stlreader.GetOutputPort()) # VTK可视化管线的输入数据接口 ,对应的可视化管线输出数据的接口为GetOutputPort();# mapper.SetInputConnection(objReader.GetOutputPort())# Create an actoractor = vtk.vtkActor()actor.SetMapper(mapper)# 设置生成几何图元的Mapper。即连接一个Actor到可视化管线的末端(可视化管线的末端就是Mapper)。self.ren.AddActor(actor)self.ren.ResetCamera()self.centralwidget.setLayout(self.verticalLayout_3)self.setCentralWidget(self.centralwidget)self.vtkWidget.show()self.iren.Initialize()

运行结果:

VTK支持的3D文件格式

VTK中可以导入/导出或读/写多种三维格式的文件,可以参考What 3D file formats can VTK import and export? The following table identifies the file formats that VTK can read and write. Importer and Exporter classes move full scene information into or out of VTK. Reader and Writer classes move just geometry.

File Format Read Write
3D Studio vtk3DSImporter
AVS “UCD” format vtkAVSucdReader
Movie BYU vtkBYUReader vtkBYUWriter
Renderman vtkRIBExporter
Open Inventor 2.0 vtkIVExporter/vtkIVWriter
CAD STL vtkSTLReader vtkSTLWriter
Fluent GAMBIT ASCII vtkGAMBITReader
Unigraphics Facet Files vtkUGFacetReader
Marching Cubes vtkMCubesReader vtkMCubesWriter
Wavefront OBJ vtkOBJExporter
VRML 2.0 vtkVRMLExporter
VTK Structured Grid † vtkStructuredGridReader vtkStructuredWriter
VTK Poly Data † vtkPolyDataReader vtkPolyDataWriter
PLOT3D vtkPLOT3DReader
CGM vtkCGMWriter
OBJ vtkOBJReader
Particle vtkParticleReader
PDB vtkPDBReader
PLY vtkPLYReader vtkPLYWriter
Gaussian vtkGaussianCubeReader
Facet vtkFacetReader vtkFacetWriter
XYZ vtkXYZMolReader
Ensight ‡ vtkGenericEnSightReader

本文作者: 旌旗
原文链接: https://seekzzh.site/pyqt5-vtk/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

PyQt5+VTK环境搭建相关推荐

  1. Python3 PyQt5 PyCharm 环境搭建

    Python3 PyQt5 PyCharm 环境搭建 Reference: 1.https://www.jianshu.com/p/5b063c5745d0 2.https://blog.csdn.n ...

  2. python3+pyQt5+pycharm环境搭建

    在学习使用python开发上位机的时候了解到了pyQt5这个库.网上搭建这个开发环境的教程少之又少,所以写一遍blog来记录一下搭建过程. 另外,此文章中的用词有诸多不严谨之处,请诸君理解意思便可,见 ...

  3. PyQt5 从零开始环境搭建

    环境搭建 1. 安装Python 安装版本:python 3.9.10 (python-3.9.10-amd64) •官方网站:www.python.org •https://www.python.o ...

  4. python pyqt eric_Python3.6 + Pyqt5 + Eric6 环境搭建

    打算用Python做个小的窗口程序,各种资料比较了半天,比较成熟的应该是 pycham 和 eric 了,前者要收费所以就用eric算了,HOHO.身边没有可以请教的人,网上搜的教程都是老版本的,装完 ...

  5. vtk环境搭建(windowsXP/win7,vtk6.0.0+cmake2.8+vs2010)

    1. 安装vs2010(默认方式) 2. 安装cmake2.8(默认方式) 3. 新建文件夹作为vtk文件根目录(例如"E:\vtk6.0"),解压vtk-6.0.0.zip到根目 ...

  6. python环境及pycharm开发环境安装_Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)...

    PyQt5相关安装 python 版本 python 3.6.3 1.安装PyQt5 执行命令: pip install pyqt5 2.安装PyQt5-tools 执行命令:pip install ...

  7. Python开发Windows桌面应用程序(一)PyCharm+PyQt5开发环境搭建

    前言 最近想开发一套Netty网关日志分析程序,用来分析设备的原始数据.因为网关是放在linux服务器上,之前查看日志是通过Xftp工具将日志下载到本地,然后找到对应的日志数据进行分析. 对于运维人员 ...

  8. Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建

    Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...

  9. PyQt5 环境搭建+配置+怎样运行生成的.py程序

    PyQt5 环境搭建+配置+怎样运行生成的.py程序 PyQt5安装及配置 安装 配置 Error while finding module specification for 'PyQt5.uic. ...

  10. pycharm+python3.7+pyqt配置_Python3+Pycharm+PyQt5环境搭建步骤图文详解

    搭建环境: 操作系统:Win10 64bit Python版本:3.7 Pycharm:社区免费版 一.Python3.7安装 下载到安装包后打开,如果想安装到默认路径(C盘)的话一直点下一步就可以了 ...

最新文章

  1. qt获取console输出_怎么在Centos 7 安装 Qt-4.8.6-MySQL 驱动?
  2. 少年五年升阿里P8,他如何从低谷登上“光明顶”?
  3. Hello World of OpenCascade
  4. C#[Serializable]在C#中的作用-NET 中的对象序列化
  5. 『前端规范化』CSS命名规范化
  6. Window下yolov3的配置教程
  7. Java入门1.2.3—一个老鸟的Java学习心得
  8. (十二)洞悉linux下的Netfilteramp;iptables:iptables命令行工具源码解析【下】
  9. 字节跳动正秘密研发手机 网友:字节锤子手机真来了?
  10. php atan2,atan2l - [ C语言中文开发手册 ] - 在线原生手册 - php中文网
  11. 搭建james邮件服务器
  12. 190616每日一句
  13. flash播放器android,Flash播放器
  14. 运放参数SR(压摆率)、增益带宽积(GBW)
  15. 医学英文文献怎么找?
  16. processing软件使用python_Python processing学习
  17. 计算机桌面窗口管理器在哪,W7系统禁用dwm桌面窗口管理器的操作方法
  18. segmentation fault
  19. phobos 2.015
  20. IntelliJ IDEA 2018版本操作总结(长期更新)

热门文章

  1. 七牛播放器SDK的crash坑
  2. Everything搜索_使用方法
  3. 数学建模姜启源5.1人口增长——学习记录
  4. Unity中文博主频道列表
  5. CPLEX求解器入门案例
  6. android Tbs腾讯X5内核初始化失败
  7. 极路由1S HC5661A 刷入不死u-boot(breed)加刷潘多拉固件教程
  8. 通用数据库连接工具--DbVisualizer的使用
  9. 批量快速截图方法(snipaste)
  10. 1.概率论-组合分析