You are here

VTK interactors


Introduction

만약 vtk를 이용하여 임의의 형상을 시각화하고 사용자가 그것을 제어하기 위해서는 다음과 같은 두가지 접근 방법이 있다. 첫째는 vtkRenderWindowInteractor이고, 둘째는 자신이 직접 event를 발생시키는 interactor를 작성하는 것이다. 여기서는 vtkRenderWindowInteractor를 소개한다.


vtkRenderWindowInteractor

vtkRenderWindowInteractor는 rendow window에서 마우스나 키보드의 event가 발생하면 미리 정의된 event와 action를 하게 된다. 기본적으로 제공하는 interactor를 정리하면 아래와 같다.

- keypress j / keypress t : 대상을 조이스틱/trackball 스타일로 제어
- keypress c / keypress a : camera/actor mode
- 마우스 좌 클릭 : actor 회전
- 마우스 휠 클릭 : actor 이동 (shift + 마우스 좌 클릭과 동일)
- 마우스 우 클릭 : viewport의 반으로 나누어 위를 클릭하면 확대, 아래는 축소
- keypress r : ResetCamera
- keypress e,q : exit, quit
- keypress s : surface plot
- keypress w : wireframe
- keypress f : 커서가 있는 근처로 focal point 이동
- keypress p : pick (나중에 자세히 다룸)

복잡한 것 같은데 이전 강좌의 예제 프로그램을 돌려보면 쉽게 이해할 수 있다.
위의 interactor는 vtkInteractorStyleSwitch라는 vtkInteractorStyle에서 상속받은 클래스의 instance를 default로 가진다. 가능한 InteractorStyle은 아래와 같다.

- vtkInteractorStyleJoystickActor : joystick sytle actor
- vtkInteractorStyleJoystickCamera : joystick sytle camera
- vtkInteractorStyleTrackballActor : trackball sytle actor
- vtkInteractorStyleTrackballCamera : trackball sytle camera
- vtkInteractorStyleSwitch
- vtkInteractorStyleFlight
- vtkInteractorStyleImage
- vtkInteractorStyleUnicam

위의 InteractorStyle을 다음과 같이 TrackballCamera를 사용자가 코딩을 하여 default로 적용할 수 있다. 그러나 그렇게 되면 j/t 키는 작동하지 않는다.

package require vtk
package require vtkinteraction

vtkQuadric quadric
  quadric SetCoefficients .5 1 .2 0 .1 0 0 .2 0 0

vtkSampleFunction sample
  sample SetSampleDimensions 30 30 30
  sample SetImplicitFunction quadric

vtkContourFilter contours
  contours SetInput [sample GetOutput]
  contours GenerateValues 5 0.0 1.2

vtkPolyDataMapper contMapper
  contMapper SetInput [contours GetOutput]
  contMapper SetScalarRange 0.0 1.2

vtkActor contActor
  contActor SetMapper contMapper

vtkOutlineFilter outline
  outline SetInput [sample GetOutput]

vtkPolyDataMapper outlineMapper
  outlineMapper SetInput [outline GetOutput]

vtkActor outlineActor
  outlineActor SetMapper outlineMapper
  eval [outlineActor GetProperty] SetColor 0 0 0

vtkRenderer ren1
vtkRenderWindow renWin
    renWin AddRenderer ren1

vtkInteractorStyleTrackballCamera trackballstyle
vtkRenderWindowInteractor iren
    iren SetRenderWindow renWin
    iren SetInteractorStyle trackballstyle

ren1 SetBackground 1 1 1
ren1 AddActor contActor
ren1 AddActor outlineActor

iren AddObserver UserEvent {wm deiconify .vtkInteract}
iren Initialize

wm withdraw .

기존 코드 (http://tcltk.co.kr/index.php?q=node/1188)에서 vtkInteractorStyleTrackballCamera이 추가되었음을 알 수 있다.

vtkInteractorStyleTrackballCamera trackballstyle
vtkRenderWindowInteractor iren
    iren SetRenderWindow renWin
    iren SetInteractorStyle trackballstyle
포럼: