728x90
1. 개요
이전 글에서 Picker의 종류들과 각각의 사용방법에 대해 알아봤었다. 이번에는 vtkPicker 를 사용하는데 알아두면 좋을 vtkPickingManager와 PickList를 알아보려고 한다.
2. vtkPickingManager
Picking 은 Renderer 의 Scene 에서 기하학적 계산을 많이 하므로 매우 computation 소모가 큰 작업이다. 그렇기에 VTK 에서는 vtkRenderWindowInteractor 에서 관리하는 vtkPickingManager를 객체를 만들었고, 이를 통해서 중복적으로 picker 객체를 사용하는 것을 방지하기 위한 관리용 객체를 정의하고 있다.
PickingManager는 하나의 interactor 에서 여러개의 picker가 중복적으로 사용되는 것을 방지한다. Picker를 renderer 별로 생성하였을 때에 PickingManager에 등록을 하면 기존의 등록되어 있는 picker가 있을 경우 객체를 link 하여 새로운 picker가 중복으로 만들어서 사용하는 것을 방지한다.
var pickerObject = vtkObject.New();
var propPicker = vtkPropPicker.New();
// picker와 object를 mapping 하여 등록한다.
interactor.GetPickingManager().AddPicker(propPicker, pickerObject);
// mapping 되어 있는 picker를 삭제한다.
interactor.GetPickingManager().RemovePicker(propPicker, pickerObject);
// object 에 연결되어 있는 picker를 모두 삭제한다.
interactor.GetPickingManager().RemoveObject(pickerObject);
3. PickList
Picker에서는 PickList가 있는데 picker를 통해 pick할 prop을 제한 할 수 있도록 한다.
PickList 에 없는 prop일 경우에는 제외할 수 있도록 한다. 또는 기존의 picklist를 무시하고 pick 을 수행할 수도 있다.
vtkActor dummyActor = vtkActor.New();
propPicker.AddPickList(dummyActor);
// PickList에 추가되 prop 안에서 pick을 수행한다.
propPicker.Pick(0, 0, 0, renderer);
// 모든 Prop 에서 pick을 수행한다. 기존의 pick list는 무시한다.
propPicker.PickProp(0, 0, renderer);
vtkPropCollection propCollection = vtkPropCollection.New();
propCollection.AddItem(vtkActor.New());
propCollection.AddItem(vtkActor.New());
// 별도의 vtkPropCollection 을 PickList로 전달하여 picking 을 수행하도록 한다.
propPicker.PickProp(0, 0, renderer, propCollection);
728x90
728x90