Study-VTK:QVTKWidget、QVTKOpenGLWidget、QVTKOpenGLNativeWidget、QVTKWidget2 区别

  网上很多案例使用qt+vtk的时候用QVTKWidget、QVTKWidget2、QVTKOpenGLWidget、QVTKOpenGLNativeWidget,比较懵逼。

   更正 :包含QVTKOpenGLWidget的VTK的第一个版本是VTK 8.0.0!!!


这几个widget怎么使用

每个widget都提供了不同的功能以及不同的API,但是widget的创建以及使用基本一样。
    1)实例化widget
    2)指定渲染窗口交互器
    3)创建回调函数(qt里就直接绑定信号和槽)
    4)创建模型,并与widget关联
    5)激活widget
    6)反激活widget

这几个widget的关系

  这里梳理下他们的关系(仅是个人理解)。

使用介绍
QVTKWidget用来在Qt的QWidget中显示 vtkRenderWindow
QVTKWidget2用来在Qt的QGLWidget中显示 vtkRenderWindow
QVTKOpenGLWidget用来在Qt的QWidget中显示 vtkRenderWindow
QVTKOpenGLNativeWidget用来在Qt的QOpenGLWidget中显示 vtkGenericOpenGLRenderWindow

  QGLWidget、QOpenGLWidget类均继承自QWidget用于渲染OpenGL图形。
    QVTKWidget2比QVTKWidget渲染快、效果好,使用基本一样。
    QVTKOpenGLNativeWidget比QVTKOpenGLWidget渲染快、效果好,使用基本一样。
    QVTKOpenGLWidget比QVTKWidget渲染快、效果好,使用基本一样。
    QVTKOpenGLNativeWidget比QVTKWidget2渲染快、效果好,使用基本一样。

  版本分割线一:Qt版本
    Qt5.4以后版本官方建议使用QOpenGLWidget,但QGLWidget保留了下来。
    Qt5.4以前版本请使用QGLWidget。
  这导致vtkWidget这边应该这样使用:
    Qt5.4以后版本使用QVTKOpenGLWidget/QVTKOpenGLWidget。
    Qt5.4以前版本请使用QVTKWidget2/QVTKWidget。

  版本分割线二:Vtk版本
    vtk 8.1.X及以前 没有QVTKOpenGLNativeWidget
    vtk 8.2.X 增加QVTKOpenGLNativeWidget

到底应该用那个widget

  放弃使用QVTKWidget。
  包含QVTKOpenGLWidget的VTK的第一个版本是VTK 8.0.0!
  如果你是Qt5.4以前,请使用QVTKWidget2。
  如果你是Qt5.4以后,vtk8.1X及以前 请使用QVTKOpenGLWidget。
  如果你是Qt5.4以后,vtk8.2X 请使用QVTKOpenGLNativeWidget。

比如你有QVTKWidget的程序,直接替换成QVTKWidget2(根据版本定),以此向后类推。

为什么自己用时候还要保留vtk8.1X

  为什么自己用时候还要保留vtk8.1X,因为vmtk官方说明仅支持vtk8.1X及以前,vtk8.2X不确定。虽然vtk8.2X+vmtk可以使用,但可能有隐藏bug。

如果找不到QVTKOpenGLWidget/QVTKOpenGLNativeWidget

  cmake注意下
在这里插入图片描述

Qt Design里拖动widget

  官方仅提供QVTKWidget,需要手动放到qt design下的plugin里。个人建议放弃在Design里拖动吧,直接拖动QWidget继承一下吧,非要搞也是自己去封装自定义控件。









  以上仅个人理解!!!有误请指正。







vtk学习教程
Study-VTK

  • 26
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
我理解您的问题是如何用 Python 代码输出 trame-vtk 的圆颜色变化动画。我建议您可以使用 VTK 库和 Matplotlib 库来实现这个功能。下面是一个简单的示例代码: ``` import vtk import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建圆的源 points = vtk.vtkPoints() polys = vtk.vtkCellArray() circle = vtk.vtkPolyData() numPts = 50 for i in range(numPts): x = np.cos(2*np.pi/numPts*i) y = np.sin(2*np.pi/numPts*i) z = 0 points.InsertNextPoint(x, y, z) if i < numPts-1: quad = vtk.vtkQuad() quad.GetPointIds().SetId(0, i) quad.GetPointIds().SetId(1, i+1) quad.GetPointIds().SetId(2, i+numPts+1) quad.GetPointIds().SetId(3, i+numPts) polys.InsertNextCell(quad) circle.SetPoints(points) circle.SetPolys(polys) # 创建圆的渲染器 renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(800, 800) renderWindow.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) # 创建圆的mapper和actor mapper = vtk.vtkPolyDataMapper() mapper.SetInputData(circle) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer.AddActor(actor) # 添加颜色映射器 colorLUT = vtk.vtkColorTransferFunction() colorLUT.AddRGBPoint(0.0, 1.0, 0.0, 0.0) colorLUT.AddRGBPoint(1.0, 0.0, 1.0, 0.0) # 创建颜色映射器的bar scalarBar = vtk.vtkScalarBarActor() scalarBar.SetLookupTable(colorLUT) # 将颜色映射器的bar添加到渲染器 renderer.AddActor2D(scalarBar) # 创建颜色变化的动画 animationSteps = 100 for i in range(animationSteps): t = float(i) / float(animationSteps-1) color = colorLUT.GetColor(t) actor.GetProperty().SetColor(color) scalarBar.SetOrientationToHorizontal() scalarBar.SetWidth(0.8) scalarBar.SetHeight(0.15) scalarBar.SetPosition(0.1, 0.1) renderWindow.Render() ``` 这个代码会输出一个圆形的动画,圆的颜色会随着时间变化。您可以根据自己的需求修改代码来输出不同的动画效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值