函數(shù)介紹
VTKPointPickerInteractorStyle是一個(gè)自定義的交互樣式類,它是VTK庫中vtkInteractorStyleTrackballCamera類的子類。VTK(Visualization Toolkit)是一個(gè)開源的,跨平臺(tái)的庫,用于處理、渲染和視覺化科學(xué)數(shù)據(jù)。它包括一系列的類和方法用于3D計(jì)算機(jī)圖形、圖像處理和可視化。
vtkInteractorStyleTrackballCamera是VTK中的一個(gè)交互樣式類,它定義了用戶與3D場(chǎng)景交互的方式,例如:旋轉(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 events
vtkInteractorStyleTrackballCamera::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 events
vtkInteractorStyleTrackballCamera::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對(duì)象時(shí)設(shè)置索引i。文章來源:http://www.zghlxwxcb.cn/news/detail-687259.html
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)的交互方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-687259.html
render[i]->GetInteractor()->SetInteractorStyle(nullptr);
到了這里,關(guān)于VTK——設(shè)置交互樣式上的鼠標(biāo)回調(diào)函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!