不禁用旋转VTKACTOR的交互鼠标事件

不禁用旋转VTKACTOR的交互鼠标事件,vtk,Vtk,这段代码是一个选择器角色。选择一个参与者后,它将打印相应选定参与者的高。问题是在interactor中旋转和拖动是禁用的,我想将其包括在内 // Handle mouse events class MouseInteractorStyle5 : public vtkInteractorStyleTrackballActor { public: static MouseInteractorStyle5* New(); vtkTypeMacro(MouseInteractor

这段代码是一个选择器角色。选择一个参与者后,它将打印相应选定参与者的高。问题是在interactor中旋转和拖动是禁用的,我想将其包括在内

// Handle mouse events
class MouseInteractorStyle5 : public vtkInteractorStyleTrackballActor
{
    public:
    static MouseInteractorStyle5* New();
    vtkTypeMacro(MouseInteractorStyle5, vtkInteractorStyleTrackballActor);

    virtual void OnLeftButtonDown()
    {
        // Forward events
        vtkInteractorStyleTrackballActor::OnLeftButtonDown();

        for (auto it = actors.begin(); it != actors.end(); ++it)
        {
            if(this->InteractionProp == (*it))
            {
                std::cout << "Actor high: " << (*it)->GetMapper()->GetInput()->GetPoint(0)[2] << std::endl;
            }
        }

    }
    std::vector<vtkSmartPointer<vtkActor>> actors;
};

vtkStandardNewMacro(MouseInteractorStyle5);

void actorsMouseInteractor(const std::vector<vtkSmartPointer<vtkActor>> & actors)
{
    // A renderer and render window
    vtkSmartPointer<vtkRenderer> renderer =
      vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow =
      vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);


    // An interactor
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
      vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    // Set the custom stype to use for interaction.
    vtkSmartPointer<MouseInteractorStyle5> style =
        vtkSmartPointer<MouseInteractorStyle5>::New();
    style->SetDefaultRenderer(renderer);
    style->actors = actors;

    renderWindowInteractor->SetInteractorStyle(style);

    renderer->AddActor(getPlatformActor());
    for (auto it = actors.begin(); it != actors.end(); ++it)
    {
        renderer->AddActor(*it);
    }
    renderer->SetBackground(.1, .2, .4);
    renderWindow->Render();
    renderWindow->SetSize(renderWindow->GetScreenSize());
    renderWindowInteractor->Start();
}
//处理鼠标事件
类MouseInteractorStyle5:公共vtkinTeractorStyleTrackBalactor
{
公众:
静态鼠标插入器样式5*New();
vtkTypeMacro(鼠标插入器样式5,VTKInteratorStyleTrackBallator);
虚拟void OnLeftButtonDown()
{
//转发事件
vtkinteractorStyleTrackBallator::OnLeftButtonDown();
for(auto it=actors.begin();it!=actors.end();+it)
{
if(this->InteractionProp==(*it))
{
std::cout GetInput()->GetPoint(0)[2]添加渲染器(渲染器);
//互动者
vtkSmartPointer渲染器Windows WinterActor=
vtkSmartPointer::New();
RenderWindowWinterActor->SetRenderWindow(renderWindow);
//设置用于交互的自定义样式。
VTKSmart指针样式=
vtkSmartPointer::New();
样式->设置默认渲染器(渲染器);
风格->演员=演员;
RenderWinterActor->SetInteractiorStyle(样式);
渲染器->AddActor(getPlatformActor());
for(auto it=actors.begin();it!=actors.end();+it)
{
渲染器->添加器(*it);
}
渲染器->背景(.1、.2、.4);
renderWindow->Render();
renderWindow->SetSize(renderWindow->GetScreenSize());
renderWindowInteractor->Start();
}
例如,输出为Z中的位置:


演员高:1.800

你想旋转单个演员还是相机?如果是相机,你需要使用VTKInteratorStyleTrackBallCamera而不是VTKInteratorStyleTrackBallCamera。是的,但我想同时选择演员,似乎VTKInteratorStyleTrackBallator是唯一的方法,不是吗?没有必要请使用vtkPropPicker来代替。