vtk中文显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vtk中⽂显⽰
参考⽂章:
⼀开始,使⽤上⽂的第⼆种⽅法,即将给的
(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的版本过⽼?。