VTK旋转操作Using Python

VTK rotation operation Using Python

想请教一个关于VTK操作的问题。我有一个 VTK 文件,我想获取很多图像,每张图像都是从不同的角度拍摄的,以创建该图像的电影。

我创建了以下代码(见下文)。问题是虽然不同的坐标会将图像旋转到我想要的角度,但缩放有点偏离。所以某些角度的图像看起来是 "zoomed in",但其他不同角度的图像看起来是 "zoomed out"。

我不确定如何将所有图像设置为具有相同的 "zooming" 比例。帮助将不胜感激。谢谢。

def rotateSave(data, coordinates, filename):

    ### Set up things

    ren = vtk.vtkRenderer()
    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(ren)
    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)
    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputData(data)
    actor = vtk.vtkActor()
    actor.SetMapper(mapper)

    ### Translate and Rotate

    center_x, center_y, center_z = actor.GetCenter()
    ren.AddActor(actor)
    w = vtk.vtkTransform()
    w.Translate(-center_x, -center_y, -center_z)
    w.RotateX(coordinates[0])
    w.RotateZ(coordinates[2])
    actor.SetUserTransform(w)

    ### Save

    renWin.Render()
    w2if = vtk.vtkWindowToImageFilter()
    w2if.SetInput(renWin)
    w2if.Update()
    writer = vtk.vtkPNGWriter()
    writer.SetFileName(filename.png)
    writer.SetInputData(w2if.GetOutput())
    writer.Write()

    return

为了将所有图像设置为具有相同的 "zooming" 比例,您可以在渲染器中重置相机,如下所示:

(...)
### Save
ren.ResetCamera()
renWin.Render()
w2if = vtk.vtkWindowToImageFilter()
(...)

或者,如果您愿意,可以随时更改缩放系数:

ren.GetActiveCamera().Zoom(1.2) #increase zoom
ren.GetActiveCamera().Zoom(0.8) #decrease zoom

请检查 vtkCamera (https://www.vtk.org/doc/nightly/html/classvtkCamera.html) class,它有一些示例。