VTK 学习

最简单的和数据交互的方法是创建该类的对象实例,该类提供了一些预定义的事件和行
为,该类允许我们控制相机和 Actors,并且提供了操纵杆模式和跟踪球模式两种交互类型。
该类对绘制窗口的如下事件作出响应:
压下键盘 j/t 键,在操纵杆和跟踪球交互类型间切换。
压下键盘 c/a 键, 在相机和 Actors 模式间切换。
压下鼠标左键,在相机模式下,围绕相机焦点旋转,在 Actors 模式下,围绕 Actors
的原点旋转。
压下鼠标中键,在相机模式下,扫视相机,在 Actors 模式下,平移 Actors,对于 2 键
鼠标,使用 shift+鼠标左键。
压下鼠标右键,在相机模式下,推拉相机,在 Actors 模式下,缩放 Actors。
压下键盘 3 键,进入立体模式。
压下键盘 e 键,退出程序。
压下键盘 p 键,进行拾取。
压下键盘 r 键,沿着当前的视方向重新设置相机。
压下键盘 u 键,调用用户设定的方法。
压下键盘 s/w 键,Actors 的显示方式在线框/表面模式间切换。
缺省的交互类型是跟踪球模式,在这种模式下,只要鼠标键按下,就可以对相机、Actors、
Renders 进行持续的操作。

image.png

import vtk

# cone_a = vtk.vtkConeSource()
cone_a = vtk.vtkSphereSource()
coneMapper = vtk.vtkPolyDataMapper()
coneMapper.SetInputConnection(cone_a.GetOutputPort())

coneActor = vtk.vtkActor()
coneActor.SetMapper(coneMapper)

ren1 = vtk.vtkRenderer()
ren1.AddActor(coneActor)
#设置背景颜色
ren1.SetBackground(0.1, 0.2, 0.4)

renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
renWin.SetSize(300, 300)
renWin.Render()

iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

iren.Initialize()
iren.Start()

image.pngimage.pngimage.pngimage.png
这里23行的代码 我感觉使用的vtk 自己带的数据 vtk.vtkSphereSource() 但是这些模型都不知道位置


# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonTransforms import vtkTransform
from vtkmodules.vtkFiltersSources import vtkLineSource
from vtkmodules.vtkRenderingAnnotation import vtkAxesActor
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer
)


def main():
    # Create two points, P0 and P1
    p0 = [0.0, 0.0, 0.0]
    p1 = [1, 1, 1]

    lineSource = vtkLineSource()
    lineSource.SetPoint1(p0)
    lineSource.SetPoint2(p1)

    # Visualize
    colors = vtkNamedColors()

    mapper = vtkPolyDataMapper()
    mapper.SetInputConnection(lineSource.GetOutputPort())
    actor = vtkActor()
    actor.SetMapper(mapper)
    actor.GetProperty().SetLineWidth(1)
    actor.GetProperty().SetColor(colors.GetColor3d("Blue"))
    # 加入坐标系
    transform1 = vtkTransform()
    transform1.Translate(0, 0, 0)
    axes1 = vtkAxesActor()
    axes1.SetUserTransform(transform1)

    transform2 = vtkTransform()
    transform2.Translate(1, 1, 1)

    axes2 = vtkAxesActor()
    axes2.SetUserTransform(transform2)
    renderer = vtkRenderer()
    renderer.AddActor(axes1)
    renderer.AddActor(axes2)
    renderWindow = vtkRenderWindow()
    renderWindow.SetWindowName("Line")
    renderWindow.AddRenderer(renderer)
    renderWindowInteractor = vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)

    renderer.SetBackground(colors.GetColor3d("Silver"))
    renderer.AddActor(actor)
    renderer.GetActiveCamera()
    renderer.GetActiveCamera().Azimuth(150)
    renderer.GetActiveCamera().Elevation(60)
    renderer.ResetCamera()

    renderWindow.Render()
    renderWindowInteractor.Start()


if __name__ == '__main__':
    main()

image.png
发现不会移动不了这个坐标的姿态不然写不出相对姿态 打印坐标位置

posted @ 2023-02-09 09:30  Yang-blackSun  阅读(29)  评论(0编辑  收藏  举报  来源
1 3