VTK修炼之道74:交互部件_Widget的创建
生活随笔
收集整理的這篇文章主要介紹了
VTK修炼之道74:交互部件_Widget的创建
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.創(chuàng)建Widget交互的步驟
雖然每個Widget都提供了不同的功能以及不同的API,但是,Widget的創(chuàng)建以及使用基本都是類似的。創(chuàng)建Widget的一般步驟如下: 1.實例化Widget; 2.指定渲染窗口交互器。Widget可以通過它來監(jiān)聽用戶事件。 3.必要時使用觀察者/命令模式創(chuàng)建回調(diào)函數(shù)。與widget交互時,它會調(diào)用一些通用的VTK事件(94個事件列表),如StartInteractionEvent、InteractionEvent、EndInteractionEvent。用戶通過監(jiān)聽這些事件并作出響應(yīng),從而可以更新數(shù)據(jù)、可視化參數(shù)或者應(yīng)用程序的用戶圖形界面。 4.創(chuàng)建合適的幾何表達(dá)實體。并用SetRepresentation()函數(shù)把他與Widget關(guān)聯(lián)起來,或者使用Widget默認(rèn)的幾何表達(dá)實體。 5.最后,必須激活Widget,使其在渲染場景中顯示。默認(rèn)情況下,按鍵<I>用于激活Widget,使其可以再場景中可見。 正如之前我們討論的那樣,如果對Widget默認(rèn)的事件綁定不滿意,需要根據(jù)自己習(xí)慣定義的事件綁定,可以使用VTKWidgetEventTranslator類。同樣,也可以使用該類的RemoveTranslation()函數(shù)取消已經(jīng)綁定的事件,具體操作如下: translator->RemoveTranslation(vtkCommand::LeftButtonPressEvent); translator->RemoveTranslation(vtkCommand::LeftButtonReleaseEvent);2.Widget響應(yīng)其他事件
VTK Widget除了響應(yīng)來自用戶的事件以外,也響應(yīng)一些其他事件,比如時鐘事件。以VTKBalloonWidget為例,該Widget主要是用于當(dāng)鼠標(biāo)在某個Actor上停留指定的時間間隔后,彈出文本或圖像等類型的提示信息。所以,對于這個Widget來說,它會監(jiān)聽交互器上的MouseMoveEvent和TimeEvent事件,當(dāng)鼠標(biāo)在某個Actor上停留的時間達(dá)到用戶設(shè)定的“時間間隔”時,就會執(zhí)行相應(yīng)的操作。3.同一時刻多個對象監(jiān)聽
?對于渲染窗口交互期的事件來說,有可能在某一時刻有多個對象在監(jiān)聽,這些類包括vtkInteractorObserver的所有子類,如vtkInteractorStyle或者場景中的一個或者多個Widget類。 在渲染場景中移動鼠標(biāo)時,如果不是在某個Widget上移動,鼠標(biāo)的移動事件就會被vtkInteractorStyle捕獲; 如果是在某個Widget上移動,鼠標(biāo)的移動事件就會被這個Widget捕獲。這種場景很可能導(dǎo)致事件的競爭。 而對事件的處理機(jī)制就是優(yōu)先級(Priorities)。所有vtkInteractorObserver的子類都會通過SetPriority()函數(shù)設(shè)置一個優(yōu)先級。擁有高優(yōu)先級的對象比低優(yōu)先級的對象優(yōu)先處理事件,還可以對捕獲到的事件選擇處理還是丟棄,實際上就是獲取到了“焦點Focus”。實際上,Widget可以比vtkInteractorStyle優(yōu)先處理事件也是因為他比vtkInteractorStyle具有更高的優(yōu)先級。4.VTK中主要的Widget類以及相應(yīng)的樣式
5.參看資料
1.《C++ primer》2.《The VTK User’s Guide – 11thEdition》
3. ?張曉東, 羅火靈. VTK圖形圖像開發(fā)進(jìn)階[M]. 機(jī)械工業(yè)出版社, 2015.
總結(jié)
以上是生活随笔為你收集整理的VTK修炼之道74:交互部件_Widget的创建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VTK修炼之道73:交互部件_Widge
- 下一篇: 我们很需要“企业即时通讯”