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下,发现可以使用了。

 

   一个改动,将vtkFTGLChineseCharacterMapper.cpp中的

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

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

posted on 2013-12-10 22:30  没有什么能够阻挡  阅读(1551)  评论(2编辑  收藏  举报

导航