VTK: 拾取方式的三种实现

本文详细介绍了VTK中的拾取功能,特别是以vtkCellPicker为例,探讨了两种不同的实现方法:1)重写vtkInteractorStyle,2)利用观察者命令模式,其中观察者可以是vtkRenderWindowInteractor或vtkCellPicker。通过这两种方式,实现了在可视化应用中根据鼠标点击进行数据和Actor的选择,获取底层信息。
摘要由CSDN通过智能技术生成

      拾取操作是可视化应用程序中常见的一种功能。拾取主要是用于选择数据和Actor或者获取底层的数据值。在显示位置(以像素为坐标值)中拾取时,就会调用vtkAbstractPicker的Pick()方法。依赖于所用的拾取类不同,拾取时返回的信息也不同,最简单的是返回一个x-y-z的全局坐标值,或者是单元(cell)的ID值,点的ID值,单元参数坐标(CellParametric Coordinates),所拾取的vtkProp实例,以及Assemblypath。与拾取相关的VTK类的 继承图如下:


       本文内容主要介绍一下vtk拾取的实现方式,并不讲解每种拾取器的差别。本文拾取过程以vtkCellPicker为例子讲解。拾取的实现按照vtk交互方式的不同分为两大类:1)重写vtkInteractorStyle完成拾取  2)重写观察者命令模式完成拾取

      1) 重写vtkInteractorStyle 

class MouseInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
    static MouseInteractorStyle* New();

    MouseInteractorStyle()
    {
        selectedMapper = vtkSmartPointer<vtkDataSetMapper>::New();
        selectedActor = vtkSmartPointer<vtkActor>::New();
    }

    virtual void OnLeftButtonDown()
    {
        // Get the location of the click (in window coordinates)
        int* pos = this->GetInteractor()->GetEventPosition();

        vtkSmartPointer<vtkCellPicker> picker =
                vtkSmartPointer<vtkCellPicker>::New();
        picker->SetTolerance(0.0005);

        // Pick from this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值