vtk新近版本是支持中文的,就是用起来稍有麻烦,有些特殊注意事项。
整体流程参见这篇文章
https://blog.csdn.net/webzhuce/article/details/89768957
其中关键代码为
// UTF-8 freetype handling:
vtkSmartPointer<vtkTextActor> actor15 = vtkSmartPointer<vtkTextActor>::New();
actor15->GetTextProperty()->SetFontFamily(VTK_FONT_FILE);
actor15->GetTextProperty()->SetFontFile(uncodeFontFile.c_str());
actor15->GetTextProperty()->SetJustificationToCentered();
actor15->GetTextProperty()->SetVerticalJustificationToCentered();
actor15->GetTextProperty()->SetFontSize(18);
actor15->GetTextProperty()->SetColor(0.0, 1.0, 0.7);
actor15->SetInput(u8"UTF-8 FreeType: 显示中文\n换行显示");
actor15->SetPosition(300, 110);
其中
SetFontFamily(VTK_FONT_FILE);
设置使用字体文件
SetFontFile(uncodeFontFile.c_str());
设置字体文件的绝对路径,例如"C:/Windows/Fonts/simsun.ttc"
同时发现一个奇怪的现象,只有字体高度大于等于18时,中文才能正常显示,即
SetFontSize(height) height>= 18
为什么对某些中文字体支持不完整呢,下面这篇文章给出了解释。
freetype使用日记 -- 解决宋体,楷体中文在某些字号下无法正常显示的问题_freetype ttc-CSDN博客
所以解决办法有两个,1是修改vtk源码,使用FT_LOAD_NO_BITMAP枚举,2是不使用宋体simsun.ttc,改用其他字体,例如等线Deng.ttf