VTK拾取相關的類

 一、vtkAbstractPicker:define API for picking subclassesapp

   該類是一個抽象基類,爲它的具體的子類定義了最基本的API,最基本的功能是返回拾取位置的x-y-z global座標系統的座標值(pick自身是在屏幕座標中進行定義的)
類定義了一個純虛函數Pick(),它的做用是給定一個選擇點(屏幕座標系統裏的,以像素爲單位)以及一個Renderer,而後經過調
用GetPickPosition()方法,生成global座標系統的座標值。Pick()函數的原型以下:
   virtual int Pick (double selectionX, double selectionY, double selectionZ, vtkRenderer *renderer)一般都把
selectionZ設爲0,與Renderer相關聯的actor就是拾取的對象範圍。在拾取過程當中vtkPicker會觸發一些事件:一、StartPickEvent, 二、PickEvent, 三、EndPickEvent。當something被拾取的時候,而且在全部的picking申請者已經經過測試,1/2/3事件就會在picking以前調用。注意:在pick的過程當中,vtkProp的PickEvent事件會
在vtkPicker的PickEvent以前被調用。
vtkAbstractPicker以及它的子類都不能拾取"拒絕拾取"的Prop(也就是該Prop經過調用自身的PickableOff()方法)和徹底透明的
Prop(即prop->GetProperty()->SetOpacity(0))。
    Picker能夠分爲兩類,分別是用幾何方法拾取(典型的例子是光線投射)和基於硬件拾取。幾何方法拾取能獲取的信息較多同時也
較慢,而基於硬件的拾取拾取速度快,但返回的信息最少。幾何方法拾取主要的類有:vtkPicker, vtkCellPicker和vtkPointPicker。基於硬件拾取的類有:vtkWorldPointPicker和vtkPropPicker。vtkAbstractPicker有兩個直接子類:vtkWorldPointPicker和vtkAbstractPropPicker。
ide

 

2. vtkWorldPointPicker:find world x,y,z corresponding to display x,y,z
   vtkWorldPointPicker是基於硬件的拾取,它返回與屏幕座標(x, y, z)相對應的世界座標點。這個類不能拾取Actor和/或Mapper,它只是簡單地肯定世界座標上的座標值。這個類不調用PickMethod()事件,只能調用StartPickEvent()和EndPickMethod()兩個事件。
函數


三、vtkPropPicker:pick an actor/prop using graphics hardware
   vtkPropPicker -> vtkAbstractPropPicker -> vtkAbstractPicker
   vtkPropPicker是基於圖形硬件拾取一個Actor/Prop實例,速度比vtkCellPicker/vtkPointPicker快。這個類在世界座標系統中斷定Actor/Prop和拾取位置,對於點和單元的ID則不做斷定。
測試


4. vtkPicker:superclass for 3D geometric pickers (uses ray cast)
   vtkPicker -> vtkAbstractPropPicker -> vtkAbstractPicker
   vtkPicker用於拾取vtkProp3D實例,它經過發射一條光線到圖形窗口中,並與Actor的線框(Bounding box)相交,光線是從窗口座標系統中拾取的一點到相機所在的位置的連線。由於光線可能會與多個Actor的線框相交,因此可能會返回多個vtkProp3D的實例。
   vtkPicker返回的是與光線相交的Prop實例的一個列表、世界座標系統中的拾取座標以及最靠近相機的Prop和Mapper實例。所謂的最靠近相機,是指該Prop線框中心點在光線上的投影最靠近相機的那個Prop實例。vtkPicker速度相對較快,可用於快速拾取幾何對象。但若是想返回拾取的點或者單元的話,得用它的子類vtkCellPicker和vtkPointPicker
   vtkPicker裏其中有一個方法:virtual void SetTolerance(double)----是設置容差。
spa

五、vtkPointPicker
   vtkPointPicker -> vtkPicker -> vtkAbstractPropPicker   
   vtkPointPicker是vtkPicker的子類,它返回選擇點的ID以及座標。它也是經過發射光線與Actor相交而拾取對象的,除了返回座標值,Actor和Mapper,它也返回在指定容差內沿着光線,最靠近光線的那個點的ID。vtkPointPicker::GetPointId()能夠獲取點的ID號。vtkPointPicker不能單一拾取,其速度比vtkPicker慢,但比vtkCellPicker要快。
.net

六、vtkCellPicker
   vtkCellPicker -> vtkPicker -> vtkAbstractPropPicker
   vtkCellPicker是vtkPicker的子類,它返回選擇單元的ID以及座標。它也是經過發射光線與Actor相交而拾取對象的,除了返回座標值,Actor和Mapper,它也返回在指定容差內沿着光線,最靠近光線的那個單元的ID。vtkPointPicker::GetCellId()能夠獲取單元的ID號。vtkCellPicker能夠單一拾取,其速度是全部Picker中最慢的,固然,提供的信息也是最豐富的。
對象

 

本文來源:http://blog.csdn.net/lovelanjuan/article/details/7301773blog

相關文章
相關標籤/搜索