一:主要的知识点
1、说明
本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程------逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①几何模型的变形vtkWarpTo
二:代码及注释
python
import vtkmodules.vtkRenderingOpenGL2
import vtkmodules.vtkInteractionStyle
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersCore import vtkTubeFilter
from vtkmodules.vtkFiltersSources import vtkLineSource
from vtkmodules.vtkFiltersGeneral import vtkWarpTo
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkDataSetMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
def main():
colors = vtkNamedColors()
lineSource = vtkLineSource()
lineSource.SetPoint1(0, 0, 0)
lineSource.SetPoint2(0, 1, 0)
lineSource.SetResolution(20)
lineSource.Update()
tubeFilter = vtkTubeFilter()
tubeFilter.SetInputConnection(lineSource.GetOutputPort())
tubeFilter.SetRadius(0.01) # 设置生成的圆柱体/管子的横截面半径是0.01个单位长度
tubeFilter.SetNumberOfSides(50)
tubeFilter.Update()
"""
vtkWarpTo 是vtk中一个几何变换的过滤器
它可以把输入的点云或模型**"拉向"一个指定的点或方向**,相当于对整个几何体做收缩、伸展或弯曲形变
它可以模拟一种"磁性吸引"或"拉伸到目标点"的效果
主要有两种模式:
①它可以模拟一种"磁性吸引"或"拉伸到目标点"的效果
②沿着指定方向移动(DirectionMode)
"""
warpTo = vtkWarpTo()
warpTo.SetInputConnection(tubeFilter.GetOutputPort())
warpTo.SetPosition(10, 1, 0) # 指定"目标点"的坐标(即你要拉向的点)
warpTo.SetScaleFactor(5) # 设置形变强度,值越大,拉得越"狠"
warpTo.AbsoluteOn() # 位移相对于数据集的原点进行,所有的点都会向同一个方向偏移
#warpTo.AbsoluteOff() # 位移相对于该点的当前位置进行计算,会导致每个点偏移到不同的方向
mapper = vtkDataSetMapper()
mapper.SetInputConnection(warpTo.GetOutputPort())
mapper.ScalarVisibilityOff()
actor = vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(colors.GetColor3d('Gold'))
renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderer.SetBackground(colors.GetColor3d('Green'))
renderer.AddActor(actor)
renderWindow.SetWindowName('WarpTo')
renderWindow.Render()
renderWindowInteractor.Initialize()
renderWindowInteractor.Start()
if __name__ == '__main__':
main()