一:主要的知识点
1、说明
本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程------逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①如何在ui界面操作一个立方体框,并控制大小
二:代码及注释
python
import vtkmodules.vtkInteractionStyle
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera
from vtkmodules.vtkInteractionWidgets import vtkBoxWidget
from vtkmodules.vtkCommonTransforms import vtkTransform
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
class vtkMyCallback(object):
"""
Callback for the interaction.
"""
def __call__(self, caller, ev):
t = vtkTransform()
widget = caller
widget.GetTransform(t)
widget.GetProp3D().SetUserTransform(t)
def main():
colors = vtkNamedColors()
cone = vtkConeSource()
cone.SetHeight(3)
cone.SetRadius(1)
cone.SetResolution(10)
coneMapper = vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
coneActor = vtkActor()
coneActor.SetMapper(coneMapper)
coneActor.GetProperty().SetColor(colors.GetColor3d('Bisque'))
ren1 = vtkRenderer()
ren1.AddActor(coneActor)
ren1.SetBackground(colors.GetColor3d('MidnightBlue'))
renWin = vtkRenderWindow()
renWin.AddRenderer(ren1)
renWin.SetSize(300, 300)
renWin.SetWindowName('Tutorial_Step6')
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
style = vtkInteractorStyleTrackballCamera()
iren.SetInteractorStyle(style)
"""
boxWidget 是一个交互式三维小部件,允许用户通过鼠标在场景中操作一个立方体框(box)
"""
boxWidget = vtkBoxWidget()
boxWidget.SetInteractor(iren)
"""
SetProp3D 定义了控件操作的目标对象,建立了控件和实体之间的联系
"""
boxWidget.SetProp3D(coneActor)
"""
SetPlaceFactor 设置放置系数或缩放因子
在 VTK 中,当调用 boxWidget.PlaceWidget() 时,控件会自动计算它所附着的对象(这里是 coneActor)的边界框(Bounding Box),并使用这个边界框来确定自身初始的大小和位置
"""
boxWidget.SetPlaceFactor(1.25)
boxWidget.GetOutlineProperty().SetColor(colors.GetColor3d('Gold'))
boxWidget.PlaceWidget() # 初始化和确定空间在3D空间的初始位置、大小和方向
callback = vtkMyCallback()
boxWidget.AddObserver('InteractionEvent', callback)
boxWidget.On() # 激活交互式控件,使其在渲染窗口中可见并开始响应用户的鼠标和键盘输入
iren.Initialize()
iren.Start()
if __name__ == '__main__':
main()