廣州做網(wǎng)站哪里好小程序開發(fā)流程
函數(shù)介紹
VTKPointPickerInteractorStyle是一個(gè)自定義的交互樣式類,它是VTK庫中vtkInteractorStyleTrackballCamera類的子類。VTK(Visualization Toolkit)是一個(gè)開源的,跨平臺的庫,用于處理、渲染和視覺化科學(xué)數(shù)據(jù)。它包括一系列的類和方法用于3D計(jì)算機(jī)圖形、圖像處理和可視化。
vtkInteractorStyleTrackballCamera是VTK中的一個(gè)交互樣式類,它定義了用戶與3D場景交互的方式,例如:旋轉(zhuǎn)、縮放、平移等。VTKPointPickerInteractorStyle類繼承了vtkInteractorStyleTrackballCamera類,并重寫了一些方法,以自定義用戶的交互行為。
class VTKPointPickerInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:static VTKPointPickerInteractorStyle* New();vtkTypeMacro(VTKPointPickerInteractorStyle, vtkInteractorStyleTrackballCamera);void setObjectIndex(int index) { m_index = index; }int getObjectIndex() const { return m_index; }VTKPointPickerInteractorStyle(){LastPickedActor = NULL;LastPickedProperty = vtkProperty::New();}virtual ~VTKPointPickerInteractorStyle(){LastPickedProperty->Delete();}virtual void OnLeftButtonUp() override{// Forward eventsvtkInteractorStyleTrackballCamera::OnLeftButtonUp();}virtual void OnLeftButtonDown() override{int* clickPos = this->GetInteractor()->GetEventPosition();this->Interactor->GetPicker()->Pick(clickPos[0], clickPos[1], 0, // always zero.this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());double picked[3];this->Interactor->GetPicker()->GetPickPosition(picked);
// std::cout << "Picked value: " << picked[0] << " " << picked[1] << " " << picked[2] << std::endl;// Forward eventsvtkInteractorStyleTrackballCamera::OnLeftButtonDown();}
// virtual void OnMouseMove() override
// {// }private:vtkActor *LastPickedActor;vtkProperty *LastPickedProperty;int m_index;};
被重寫的方法還能保留之前的功能嗎?重寫一個(gè)方法會(huì)完全覆蓋父類中的該方法的實(shí)現(xiàn)。但是,可以在子類的方法中顯式調(diào)用父類的方法來保留父類的功能。
例如,在VTKPointPickerInteractorStyle類的OnLeftButtonDown方法中,在方法的最后,調(diào)用了vtkInteractorStyleTrackballCamera::OnLeftButtonDown()。這樣,就可以在執(zhí)行完VTKPointPickerInteractorStyle類的OnLeftButtonDown方法的自定義操作后,再執(zhí)行vtkInteractorStyleTrackballCamera類的OnLeftButtonDown方法。這樣做可以保證在執(zhí)行完子類的自定義操作后,還能執(zhí)行父類的操作。
設(shè)置回調(diào)
下面是用于設(shè)置回調(diào),同時(shí)為了在鼠標(biāo)點(diǎn)擊窗口時(shí)確認(rèn)當(dāng)前窗口索引,將每個(gè)窗口的索引或objectName存儲(chǔ)在類的某個(gè)成員變量中,并添加一個(gè)方法來檢索它。
class VTKPointPickerInteractorStyle : public vtkInteractorStyleTrackballCamera
{...
public:void setObjectIndex(int index) { m_index = index; }int getObjectIndex() const { return m_index; }...
private:int m_index;
};
然后在創(chuàng)建VTKPointPickerInteractorStyle對象時(shí)設(shè)置索引i。
for(int i=0;i<8;i++){vtkSmartPointer<VTKPointPickerInteractorStyle> style =vtkSmartPointer<VTKPointPickerInteractorStyle>::New();style->setObjectIndex(i);render[i]->GetInteractor()->SetInteractorStyle(style);}
將交互樣式設(shè)置為 nullptr,也就是清除交互樣式,回到默認(rèn)的交互方法。
render[i]->GetInteractor()->SetInteractorStyle(nullptr);