728x90
VTK 의 RenderWindow에서 interaction 을 수행하기 위한 이벤트 처리에 대한 흐름 내용과 Interaction Style을 구현하는 방법을 공부한 것을 간단하게 정리하려고 한다. 개념적인 부분에 대한 설명에서는 개인적인 이해에 따라 작성한 것이므로 잘못된 내용이 있거나 설명이 부족할 수도 있다.
1. 개요
RenderWindow의 interactor는 사용자와의 상호작용을 수행하기 위한 관리자와 같다. Observer 패턴으로 구현되어 있어 사용자는 처리하고 싶은 이벤트를 등록하고 observer에서 해당 이벤트가 발생하면 사용자가 등록한 callback 함수를 수행하도록 한다.
2. Interactor Observer
vtkRenderWindowInteractor는 RenderWindow를 통해 받을 수 있는 모든 event에 대한 observer를 등록해 놓고 있다.
이벤트가 발생하면 먼저 interactor의 observer list의 등록여부를 확인 하고 interactorStyle로 전달한다.
전달 받은 interactorStyle 또한 observer를 확인하고 등록되어 있는 이벤트일 경우 해당 callback 함수를 호출한다.
이런 흐름에 따라 기본적으로는 interactorStyle을 통해 사용자는 이벤트 처리를 하면된다.
2-1. vtkObserver
vtkObserver는 list 구조로 관리되며 tag, event id, vtkCommand 정보를 갖고 있다.
Event id는 고유 번호 이지만, tag는 observer list의 index 값이다.
2-2. RemoveObserver vs RemoveObservers
RemoveObserver : observer list에서 tag 값을 이용하여 list의 index 에 등록되어 있는 event 만 삭제한다.
RemoveObserver : observer list에서 event 값을 이용하여 list의 에 등록되어 있는 모든 event 를 삭제한다.
728x90
728x90