1. 程式人生 > 其它 >VTK學習記錄2-互動機制學習和改變actor屬性

VTK學習記錄2-互動機制學習和改變actor屬性

互動機制類就是vtkRenderWindowInteractor,可以使用這個類實現觀眾和actor的互動,比如讓actor移動或者旋轉等等。

機制說明:

  vtkRenderWindowInteractor會擷取與之相關的vtkRenderWindow上的事件(這裡是通過vtkRenderWindowInteractor裡的SetRenderWindow()方法關聯的)。

  當vtkRenderWindowInteractor::Start()會啟用事件擷取功能。

  所有擷取的事件會被vtkRenderWindowInteractor::InterStyle這個例項處理,它的型別是vtkInteractorObserver。

  而vtkInteractorObserver作用就是用來檢測發生的時間,這樣擷取的訊息就可以處理了。

程式碼:

 1 //tips:如果不是用cmake編譯,而是用vs編譯的,需要加這三行。
 2 #include "vtkAutoInit.h" 
 3 VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
 4 VTK_MODULE_INIT(vtkInteractionStyle);
 5 
 6 #include <vtkConeSource.h>
 7 #include <vtkRenderer.h>
 8
#include <vtkPolyDataMapper.h> 9 #include <vtkRenderWindow.h> 10 #include <vtkActor.h> 11 #include <vtkCamera.h> 12 #include <vtkRenderWindowInteractor.h> 13 #include <vtkInteractorStyleTrackballCamera.h> 14 #include <vtkInteractorStyleTrackballActor.h> 15
16 int main() 17 { 18 vtkConeSource *cone = vtkConeSource::New(); 19 cone->SetResolution(8); 20 cone->SetHeight(5); 21 cone->SetRadius(6); 22 23 vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New(); 24 coneMapper->SetInputData(cone->GetOutput()); 25 coneMapper->SetInputConnection(cone->GetOutputPort()); 26 27 vtkActor *vtkactor = vtkActor::New(); 28 vtkactor->SetMapper(coneMapper); 29 30 vtkRenderer *render = vtkRenderer::New(); 31 render->AddActor(vtkactor); 32 render->SetBackground(0.1, 0.2, 0.3); 33 34 vtkRenderWindow *window = vtkRenderWindow::New(); 35 window->SetSize(500, 500); 36 window->AddRenderer(render); 37 38 vtkRenderWindowInteractor *interactor = vtkRenderWindowInteractor::New(); 39 interactor->SetRenderWindow(window);//關聯要互動的視窗 40 41 //現在設定控制的是相機,也可以實現相同的效果。 42 vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New(); 43 interactor->SetInteractorStyle(style); 44 45 //用這個就是設定控制演員 46 /*vtkInteractorStyleTrackballActor *style2 = vtkInteractorStyleTrackballActor::New(); 47 interactor->SetInteractorStyle(style2);*/ 48 49 //旋轉程式碼 50 /*for (int i = 0; i < 1800; i++) 51 { 52 window->Render(); 53 render->GetActiveCamera()->Azimuth(1); 54 }*/ 55 56 interactor->Initialize(); 57 interactor->Start(); 58 59 60 cone->Delete(); 61 coneMapper->Delete(); 62 vtkactor->Delete(); 63 render->Delete(); 64 window->Delete(); 65 interactor->Delete(); 66 style->Delete(); 67 return 0; 68 }
註釋:關於互動方式有很多種,可以換成下面這兩行程式碼(記得加上對應的標頭檔案)。那麼滑鼠滑動動的就是acctor了。具體還有別的互動方式可以自己去摸索。
1     //設定控制演員
2     vtkInteractorStyleTrackballActor *style2 = vtkInteractorStyleTrackballActor::New();
3     interactor->SetInteractorStyle(style2);

效果圖:

註釋:點選actor,然後按鍵盤上的“P”按鍵,周圍會出現一圈紅色的包圍盒。

  這裡設定控制相機後,點選空白處就不會旋轉了。登出掉那兩行後,點選空白處actor會旋轉。