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 进行持续的操作。
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()
这里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()
发现不会移动不了这个坐标的姿态不然写不出相对姿态 打印坐标位置
本文作者:ClingYang
本文链接:https://www.cnblogs.com/Yang-blackSun/p/18025346
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
本文作者:Yang-blackSun
本文链接:https://www.cnblogs.com/Yang-blackSun/p/18025346
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步