C++中VTK9.3.0刻度標簽重疊的問題記錄
本文采用VTK9.3.0版本,其他版本如VKT8.0亦有同樣的問題
VTK顯示文本時,Z軸刻度標簽出現(xiàn)了重疊,如下圖:
尋找好久,沒有找到設(shè)置標簽間距、個數(shù)等相關(guān)的公有成員函數(shù),此問題一直沒有解決。
于是想到改VKT9.3.0源碼,解決此問題。下面大概記錄涉及到的源碼文件和相關(guān)函數(shù):
1、找到相關(guān)文件
VS2017打開源碼后,與此相關(guān)的文件為:vtkCubeAxesActor.h、vtkCubeAxesActor.cxx,如下圖:
2、.h中增加私有成員變量
//whl2024-06-03 bool m_XAxisFlag, m_YAxisFlag, m_ZAxisFlag;//標識是否修改刻度區(qū)間的個數(shù) int m_XMajorNum, m_YMajorNum, m_ZMajorNum;//標識設(shè)置刻度區(qū)間的個數(shù),例如2表示2個區(qū)間3個刻度
3、構(gòu)造函數(shù)中隊成員變量初始化
//whl m_XAxisFlag = false; m_YAxisFlag = false; m_ZAxisFlag = false;
4、增加公有成員函數(shù),進行是否自定義修改刻度區(qū)間的設(shè)置
.h中
//whl設(shè)置某個軸劃分刻度區(qū)間的個數(shù),可防止軸刻度文本重疊:nAxis軸號,bFlag設(shè)置/取消設(shè)置的標志,nMajorNum劃分區(qū)間的個數(shù) void SetAxisMajorNum(int nAxis, bool bFlag, int nMajorNum = 2);
.cpp中
//------------------------------------------------------------------------------ void vtkCubeAxesActor::SetAxisMajorNum(int nAxis, bool bFlag, int nMajorNum) { switch (nAxis) { case 0: m_XAxisFlag = bFlag; m_XMajorNum = nMajorNum; break; case 1: m_YAxisFlag = bFlag; m_YMajorNum = nMajorNum; break; case 2: m_ZAxisFlag = bFlag; m_ZMajorNum = nMajorNum; break; } }
5、最重要的地方,在AdjustTicksComputeRange()函數(shù)中修改增加:
//whl判斷是否自定義刻度區(qū)間 if (m_XAxisFlag && 0==axis) { major = range / m_XMajorNum; } if (m_YAxisFlag && 1==axis) { major = range / m_YMajorNum; } if (m_ZAxisFlag && 2==axis) { major = range / m_ZMajorNum; }
6、使用時,在調(diào)用VTK軸相關(guān)的地方(代碼中還增加了Z軸標簽旋轉(zhuǎn)90°,效果更好)
//設(shè)置某個軸劃分區(qū)間的個數(shù),可防止軸刻度文本重疊:nAxis軸號,bFlag設(shè)置/取消設(shè)置的標志,nMajorNum劃分區(qū)間的個數(shù) m_cubeAxesActor->SetAxisMajorNum(2, true, 2);//設(shè)置Z軸 m_cubeAxesActor->GetLabelTextProperty(2)->SetOrientation(90);//Z軸標簽旋轉(zhuǎn)90°
7、最終結(jié)果:
到此這篇關(guān)于VTK9.3.0刻度標簽重疊的問題的文章就介紹到這了,更多相關(guān)VTK刻度標簽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于C++中定義比較函數(shù)的三種方法小結(jié)
下面小編就為大家?guī)硪黄P(guān)于C++中定義比較函數(shù)的三種方法小結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10