继承类new
// 自定义交互样式类
class MyInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
static MyInteractorStyle* New();
vtkTypeMacro(MyInteractorStyle, vtkInteractorStyleTrackballCamera);
// 重写鼠标左键按下事件
void OnLeftButtonDown() override
{
int* pos = this->GetInteractor()->GetEventPosition();
std::cout << "Left Button Pressed at (" << pos[0] << ", " << pos[1] << ")" << std::endl;
// 保留原来的交互行为
vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
}
// 你可以重写更多事件,如右键、滚轮、鼠标移动等:
void OnRightButtonDown() override
{
std::cout << "Right button clicked!" << std::endl;
vtkInteractorStyleTrackballCamera::OnRightButtonDown();
}
void OnMouseMove() override
{
//std::cout << "Mouse moved!" << std::endl;
vtkInteractorStyleTrackballCamera::OnMouseMove();
}
};
// 宏实现必须写在 cpp 文件中,如果在.h末尾会发生重定义
vtkStandardNewMacro(MyInteractorStyle);
vtkTypeMacro(MyInteractorStyle, vtkInteractorStyleTrackballCamera); 如果你只写 vtkStandardNewMacro() 而不写 vtkTypeMacro(),虽然 New() 可以用,但你会遇到以下问题: | 功能 | 是否失效 | 原因 | | —————- | —- | ———————– | | SafeDownCast() | ❌ 失效 | 缺少类型信息注册 | | IsA() | ❌ 失效 | 缺少类型判断机制 | | PrintSelf() | ❌ 失效 | 无法打印类名等调试信息 | | 类型名查询 | ❌ 失效 | 没有注册 GetClassName() 等 |