vtk 中文显示

参考文章:

http://www.vislab.cn/bbs/viewthread.php?tid=5079&page=1&extra=#pid19477

http://tieba.baidu.com/p/158804595

一开始,使用上文的第二种方法,即将给的

(1) vtkFTGLChineseCharacterMapper
(2) vtkFreeTypeUtilitiesUnicode
(3) vtkTextPropertyUnicode

三个文件加到工程,在工程的include中增加freetype的包含路径,并从vtk5.10源码中拷了ftgl和fonts相关的头文件,增加了ftgl命名空间的引用。解决了编译错误。

但出现链接错误:DLL中调用的 render(const wchar_t * , ...)  和  Advance(const wchar_t * , ..) 方法不一致。仔细查看了下,发现原因是:

在vtk源码的编译工程中,vtkftgl中的 wchar_t 类型竟然是 unsigned long 型的,而现在使用的工程中,wchar_t 是unsigned short型的。

故需更改vtk源码中wchar_t的声明值,使其为unsigned short型,并重新编译。但如何更改,没有发现。希望有发现的可以告诉我一声。

于是采用了参考文章中的第一种方法,将这三个类放到vtk的Rendering目录下,重新编译vtkrendering工程,将新的vtkrendering.lib和dll拷到VTKDIR下,发现可以使用了。

vtk 中文显示

一个改动,将vtkFTGLChineseCharacterMapper.cpp中的

MultiByteToWideChar() 使用方式改为如下动态申请:
        WCHAR* sResult = NULL;
int textlen = MultiByteToWideChar(, , this->Input, -, NULL, );
sResult = (WCHAR*) malloc((textlen + ) * sizeof(WCHAR));
memset(sResult, , (textlen + ) * sizeof(WCHAR));
MultiByteToWideChar(, , this->Input, -, sResult, textlen);
font->render(sResult,ftgl_context);
if(sResult)
delete sResult;

不足: 换行问题,试了\r\n都无法解决。。。感觉转为Unicode没问题,难道是ftgl的版本过老?

上一篇:mysql查询记录修改时间于现在大于30分钟


下一篇:【转】STM32定时器输出比较模式中的疑惑