VTK开发错误处理

VTK开发过程中常常遇到的一些问题,比如:no override found for ‘…’ 这种错误,如果没有用CMake编译肯定会出现,并且不好查,这些错误常常让人摸不着头脑。

本文参考了51blog和stackoverflow中相关内容,并做整理完善,希望能有帮助。

1.文字未显示:

现象:在VTK中使用vtkTextActor或vtkActor2D类显示文字,结果文字未显示出来;

解决方法:在程序上方加上 VTK_MODULE_INIT( vtkRenderingFreeType )

2.编译出现错误:no override found for ‘…’

解决方法:在程序上方加上

#include <vtkAutoInit.h>

VTK_MODULE_INIT( vtkRenderingOpenGL );

这里强调下,很多情况下,no override显示的是vtkRender vtkRenderWindow等,但是只需要加上vtkRenderingOpenGL的初始化就可以了,这类问题出现的原因是使用本地编译器编译源码,很多宏没有定义,需要用CMAKE重新生成工程,配置正确并编译。

3.运行出现错误:vtkLookupTable [0000000A494850]:Bad table range:[1e+010,-1e+010]

原因:vtkLookupTable范围设置错误,SetRange( double min, double max )参数min比max小

解决方法:正确设置SetRange(…)函数的参数

4.运行时出现错误:Error: no voerride found for “vtkGPUVolumeRayCastmapper”

解决方法:在main函数前加上

VTK_MODULE_INIT( vtkRenderingVolumeOpenGL );

5.运行时出现错误:vtkTrivialProducer (0000000009584F50): This data object does not contain the requested extent.

原因:使用vtkImageReslice,设置完后未调用Update()方法;

解决方法:pImageReslice->Update();

备注:其他类出现此错误同此解决方法。

6.运行时出现错误:vtkOpenGLTexture (0000000002540430): No scalar values found for texture input!

原因:创建vtkTextActor时,未调用SetInput()方法;或调用SetInput()方法,参数给的空字符串。这都相当于创建了一个空vtkTextActor,导致该错误发生。

解决方法:创建vtkTextActor时进行初始化,即调用SetInput()方法,且必须给出参数,哪怕是一个空格字符创。

7.运行时出现错误:Invalid pixel format, no OpenGL support

解决方法:不要在QVtkWidget的子类构造函数中创建需要render(渲染)的对象,在使用时进行渲染。

8.运行时警告:Warning: Link to vtkInteractionStyle for default style selection.

解决方法:在main函数前加上 VTK_MODULE_INIT( vtkInteractionStyle );

9.运行时,X::New() 返回NULL

解决方法:

#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
 #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)

发表评论