VTK 在VTK 8 2 的三維場景中顯示中文

2021-10-12 07:12:39 字數 1889 閱讀 5166

這個問題卡了我好久周,網上嘗試了很多方法,包括使用vtkvectortext向量,texctactor3d設定字型編碼,修改ftfont字型原始碼等等,都沒有成功。

可能是版本原因,我看網上的方法基本都是針對vtk6.x,要麼就是直接沒說版本(應該也是6.x,方法用到的那些檔案我vtk裡面甚至都沒有)。

最後去讀了texctactor3d原始碼,從裡面找了乙個vtkfreetypestringtoimage類才實現了的。看到螢幕上出來的那個漢字時,別提有多高興了。

目錄

編譯環境

問題描述

解決方法

完整**

為了體現三維的環境,我將文字斜著放了一下。

在vtk的三維場景中顯示中文

vtkfreetypestringtoimage這個類裡面有乙個renderstring函式,這個函式的功能就是將字型轉換為imagedata資料。解決方案的核心就是使用這個函式來實現。

int renderstring(vtktextproerty* property,const vtkunicodestrnig& string,int dpi,vtkimagedata* data,int textdims[2] = nullptr) override;
另外,字串需要轉為utf8編碼,所以封裝了乙個string_to_utf8函式,篇幅問題,放在文章末尾。

一、使用vtknew建立vtkfreetypestringtoimage類物件

vtknewstr2img;
二、使用vtk建立vtktextproperty、vtkimagedata類物件

vtknewtextproperty;

vtknewimgdata;

三、設定vtktextproperty的fontfamily為vtk_font_file,fontfile為」c:\\windows\\fonts\\simkai.ttf「   (ps:這裡使用的是楷體,要用其他中文字型自己改就行,注意檢查目錄下有沒有這個字型,這個字型支不支援中文)

textproperty->setfontfamily(vtk_font_file);

textproperty->setfontfile("c:\\windows\\fonts\\simkai.ttf");

四、將字串使用string_to_utf8函式進行編碼,並傳入vtkunicodestring的靜態函式 from_utf8 構造vtkunicodestring物件

vtkunicodestring ustr = vtkunicodestring::from_utf8(string2utf8("hello 世界"));
五、呼叫renderstring函式

str2img->renderstring(textproperty,ustr,500,imgdata);
vtknewactor;

七、最後,調整下actor屬性,別忘了把actor加到renderer裡面。還有就是記得加標頭檔案,不然有些地方會報錯。

完整**如下,包括string_to_utf8(string_to_utf8使用了這篇部落格的轉換**)

std::string string_to_utf8(const std::string & str) 

void rendertext(vtkrenderer* renderer)

C 將Qt介面顯示到VTK三維環境中

專案的需求是在三維環境下實現ui,最終實現的效果如下 左邊是我的qt視窗在介面設計器中的預覽,右邊是vtk三維環境下介面的顯示。為了體現三維環境,我在右下角加了乙個圓柱 讀到這裡,首先你應該具備以下能力才能進行之後的步驟 1.能將vtk和qt編譯到同乙個目錄下 2.熟悉qt和vtk的基本語法,設計思...

vtk如何在左下角設定三維座標系

做過三維圖形的朋友應該都知道一般在介面左下角會有乙個固定座標系,用來顯示指示方向,便於識別 本人的環境是vs qt vtk 以下兩種方法都可以設定座標系 方法一 可以參考 三維程式設計中,通常會在控制項視窗中設定和顯示座標軸系線,方便操作和使用。vty庫中提供vtkaxesactor類,方便使用者快...

VTK讀取乙個TXT文件中的三維點座標顯示三維點雲

vtk讀取乙個txt文件中的三維點座標就可以顯示三維點雲,txt文件中的格式為 x座標 y座標 z座標 如下所示 附上 如下 include include include vtkactor.h include vtkrenderer.h include vtkrenderwindow.h incl...