继承类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() 等 |

Table of Contents