QVTKRenderWindowInteractor 3D多种交互方式测试

QVTKRenderWindowInteractor 3D交互窗口

  • 环境搭建不再赘述,本文主要介绍QVTKRenderWindowInteractor显示3d模型和修改交互方式

  • 首先使用qt的designer设计器创建一个gui_vtk.ui文件

    • 窗体中放入一个Qwidget控件,默认名称,再放入一个QComboBox控件取名ccb_interactor,内容如下,这些交互方式是vtk提供的,也可以增加自己定义的交互方式,常用的为前4个
      在这里插入图片描述
  • 然后使用uic转换成gui_vtk.py文件

  • 创建一个vtk_text.py文件,作为主程序文件

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    mainwindow = QtWidgets.QMainWindow()
    # mainwindow=gui_vtk_slot.MyWindow()
    ui = gui_vtk.Ui_MainWindow()
    ui.setupUi(mainwindow)
    # 建立信号连接
    ui.ccb_interactor.currentIndexChanged.connect(slot_interactor)
	#创建渲染窗口,父窗口为ui.widget
    vtk_show = QVTKRenderWindowInteractor(ui.widget)
    vtk_show.SetInteractorStyle(vtkInteractorStyleTrackballCamera())  # 设置交互方式==常用的方式 移动摄像机
    mainwindow.show()
    vtk_show.resize(ui.widget.size())

    # vtkPolyData数据生成与显示
    conSource = vtkConeSource()  # 定义了一个椎体的图形数据
    conSource.Update()

    cone = conSource.GetOutput()
    nPoints = cone.GetNumberOfPoints()  # 获取图形数据的点数
    nCells = cone.GetNumberOfCells()  # 获取图形数据的单元数目
    print('Points number:', nPoints)
    print('Cells number:', nCells)
    # 图形渲染与图像渲染基本一致
    mapper = vtkPolyDataMapper()
    mapper.SetInputData(cone)

    actor = vtkActor()
    actor.SetMapper(mapper)

    renderer = vtkRenderer()
    renderer.AddActor(actor)
    renderer.SetBackground(0.0, 1.0, 1.0)
    
    vtk_show.GetRenderWindow().AddRenderer(renderer)
    vtk_show.Render()
    vtk_show.Start()

    app.exec()
    sys.exit()

  • 然后增加一个槽函数slot_interactor
def slot_interactor(index):
   #各种交互方式
   if index == 0:
       vtk_show.SetInteractorStyle(vtkInteractorStyleJoystickActor())
   elif index == 1:
       vtk_show.SetInteractorStyle(vtkInteractorStyleJoystickCamera())
   elif index == 2:
       vtk_show.SetInteractorStyle(vtkInteractorStyleTrackballActor())  
   elif index == 3:
       vtk_show.SetInteractorStyle(vtkInteractorStyleTrackballCamera()) 
   elif index == 4:
       vtk_show.SetInteractorStyle(vtkInteractorStyleSwitch()) 
   elif index == 5:
       vtk_show.SetInteractorStyle(vtkInteractorStyleFlight()) 
   elif index == 6:
       vtk_show.SetInteractorStyle(vtkInteractorStyleUnicam()) 
   elif index == 7:
       vtk_show.SetInteractorStyle(vtkInteractorStyleTerrain()) 
   elif index == 8:
       vtk_show.SetInteractorStyle(vtkInteractorStyleRubberBandZoom())
   elif index == 9:
       vtk_show.SetInteractorStyle(vtkInteractorStyleRubberBand2D())  
   elif index == 10:
       vtk_show.SetInteractorStyle(vtkInteractorStyleDrawPolygon())  
   elif index == 11:
       vtk_show.SetInteractorStyle(vtkInteractorStyle3D()) 
   elif index == 12:
       vtk_show.SetInteractorStyle(vtkInteractorStyleImage())  
   # vtk_show.resize(ui.widget.size())
   # print(str(index))
  • 至于每种交互方式具体含义,可以自己试试

交互器快捷键

ha

  • p 选中鼠标所选的控件
  • r 复位模型
  • s 体显示
  • w 线框显示
  • f 放大

在这里插入图片描述
搞了个qq群,寻找大佬互相学习
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值