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