安装vtk
pip install vtk
# -*- coding : UTF-8 -*- # @file : vtk_test1.py # @Time : 2021/7/26 21:59 # @Author : wmz import vtk # 数据源 cylinder = vtk.vtkCylinderSource() cylinder.SetHeight(3.0) cylinder.SetRadius(1.0) cylinder.SetResolution(360) print("高、半径、面:",cylinder.GetHeight(),cylinder.GetRadius(),cylinder.GetResolution()) # 映射 cylinderMapper = vtk.vtkPolyDataMapper() cylinderMapper.SetInputConnection(cylinder.GetOutputPort()) # 绘制对象/演员 cylinderActor = vtk.vtkActor() # 绘制对象添加映射器 cylinderActor.SetMapper(cylinderMapper) # 绘制器 renderer = vtk.vtkRenderer() # 绘制器添加对象 renderer.AddActor(cylinderActor) # 绘制器设置背景 renderer.SetBackground(0.1,0.2,0.4) print("Renderer bg:",renderer.GetBackground()) # 绘制窗口 renWin = vtk.vtkRenderWindow() # 绘制窗口添加绘制器 renWin.AddRenderer(renderer) renWin.SetSize(1200,1200) print("Window size:",renWin.GetSize()) # 绘制窗口内所有绘制器同步渲染绘制 renWin.Render() # 交互器 i_ren = vtk.vtkRenderWindowInteractor() # 交互器绑定绘制窗口 i_ren.SetRenderWindow(renWin) # 交互器初始化 i_ren.Initialize() # 交互器启动 i_ren.Start()
# -*- coding : UTF-8 -*- # @file : vtk_test3.py # @Time : 2021/7/26 22:11 # @Author : wmz import vtk # *************柱体**************** # 生成一个中心在渲染场景原点的柱体,柱体的长轴沿着Y轴,柱体的高度、截面半径等都可以任意指定 cylinder = vtk.vtkCylinderSource() # 高 cylinder.SetHeight(3.0) # 截面半径 cylinder.SetRadius(1.0) # 横截面边数 cylinder.SetResolution(360) print(f"高:{cylinder.GetHeight()}、半径:{cylinder.GetRadius()}、面:{cylinder.GetResolution()}") # 映射,将输入的数据转换为几何图元(点、线、多边形)进行渲染 cylinderMapper = vtk.vtkPolyDataMapper() # 设置 VTK 可视化管线的输入数据接口,对应的可视化管线输出数据的接口为 GetOutputPort() cylinderMapper.SetInputConnection(cylinder.GetOutputPort()) # 三维空间中渲染对象最常用的 vtkProp 子类是 vtkActor(表达场景中的几何数据)和 vtkVolume(表达场景中的体数据) """vtkProp子类负责确定渲染场景中对象的位置、大小和方向信息。 Prop依赖于两个对象(Prop一词来源于戏剧里的“道具”,在VTK里表示的是渲染场景中可以看得到的对象。) 一个是Mapper(vtkMapper)对象,负责存放数据和渲染信息,另一个是属性(vtkProperty)对象,负责控制颜色、不透明度等参数。 """ cylinderActor = vtk.vtkActor() print(f"位置:{cylinderActor.GetPosition()}") # 改变属性颜色 cylinderProperty = vtk.vtkProperty() cylinderProperty.SetColor(0.6,0.96,1) print("颜色:",cylinderProperty.GetColor()) # 读取 bmp 背景图片 bmpReader = vtk.vtkBMPReader() bmpReader.SetFileName("sky.bmp") # 纹理 texture = vtk.vtkTexture() # 数据接口联通纹理 texture.SetInputConnection(bmpReader.GetOutputPort()) # 插入纹理 texture.InterpolateOn() # 绘制对象添加映射器,设置定义Actor几何形状的Mapper cylinderActor.SetMapper(cylinderMapper) # 设置Actor的属性 cylinderActor.SetProperty(cylinderProperty) # 设置纹理属性 cylinderActor.SetTexture(texture) # 绘制器,负责管理场景的渲染过程。 # 组成场景的所有对象包括Prop,照相机(Camera)和光照(Light)都被集中在一个vtkRenderer对象中。 # 一个vtkRenderWindow中可以有多个vtkRenderer对象,而这些vtkRenderer可以渲染在窗口中不同的矩形区域中(即视口),或者覆盖整个窗口区域。 renderer = vtk.vtkRenderer() # 绘制器添加对象,添加vtkProp类型的对象到渲染场景中 renderer.AddActor(cylinderActor) # 绘制器设置背景,设置渲染场景的背景颜色 renderer.SetBackground(1.0,0.87,0.68) print("Renderer bg:",renderer.GetBackground()) # SetBackground2()用于设置渐变的另外一种颜色 renderer.SetBackground2(1.0,1.0,1.0) # 打开背景颜色渐变效果,相当于调用方法 GradientBackgroundOn() renderer.SetGradientBackground(1) # 绘制窗口,将操作系统与VTK渲染引擎连接到一起 renWin = vtk.vtkRenderWindow() # 绘制窗口添加绘制器,加入 vtkRenderer 对象 renWin.AddRenderer(renderer) # 设置窗口的大小,以像素为单位 renWin.SetSize(1200,1200) print("Window size:",renWin.GetSize()) # 绘制窗口内所有绘制器同步渲染绘制 #renWin.Render() # 交互器,提供平台独立的响应鼠标、键盘和时钟事件的交互机制 """vtkRenderWindowInteractor自动建立一个默认的3D场景交互器样式(Interactor Style):vtkInteractorStyleSwitch, 当然你也可以选择其他的交互器样式,或者是创建自己的交互器样式""" i_ren = vtk.vtkRenderWindowInteractor() # 交互器绑定绘制窗口,设置渲染窗口,消息是通过渲染窗口捕获到的,所以必须要给交互器对象设置渲染窗口 i_ren.SetRenderWindow(renWin) # 为处理窗口事件做准备,交互器工作之前必须先调用这个方法进行初始化 i_ren.Initialize() # 开始进入事件响应循环,交互器处于等待状态,等待用户交互事件的发生 i_ren.Start()
sky.bmp
参考:Python VTK 代码详解(一)
# -*- coding : UTF-8 -*- # @file : vtk_test2.py # @Time : 2021/7/26 22:07 # @Author : wmz import vtk # 1. 读取数据 cube = vtk.vtkCubeSource() cube.Update()#记得加这句不加看不到模型 # 2. 建图(将点拼接成立方体) cube_mapper = vtk.vtkPolyDataMapper() cube_mapper.SetInputData(cube.GetOutput()) # 3. 根据2创建执行单元 cube_actor = vtk.vtkActor() cube_actor.SetMapper(cube_mapper) cube_actor.GetProperty().SetColor(1.0, 0.0, 0.0) # 4. 渲染(将执行单元和背景组合在一起按照某个视角绘制) renderer = vtk.vtkRenderer() renderer.SetBackground(0.0, 0.0, 0.0)#背景只有一个所以是Set() renderer.AddActor(cube_actor)#因为actor有可能为多个所以是add() # 5. 显示渲染窗口 render_window = vtk.vtkRenderWindow() render_window.SetWindowName("My First Cube") render_window.SetSize(400,400) render_window.AddRenderer(renderer)# 渲染也会有可能有多个渲染把他们一起显示 # 6. 创建交互控键(可以用鼠标拖来拖去看三维模型) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) interactor.Initialize() render_window.Render() interactor.Start()
参考:Python使用VTK三维3D图形绘制入门教程