VTK系列——拾取点/显示当前点选点并删除上次的点选点

1 前言:vtkpick系列在《VTK图形图像开发进阶》一书中讲得非常详细;这里不再赘述,在实际项目中会遇到需要点选一个点标记出来,在下次选择另一个点的时候继续标记同时删除上一次的标记点。

2 代码:

class PointPickerInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
    static PointPickerInteractorStyle* New();
    vtkTypeMacro(PointPickerInteractorStyle, vtkInteractorStyleTrackballCamera)
    PointPickerInteractorStyle()
    {
        last_picked_actor=NULL;
       
    }
    virtual ~PointPickerInteractorStyle()
    {
       
    }
    virtual void OnRightButtonDown()
    {
        //打印鼠标左键像素位置
        if(this->Interactor->GetControlKey())
        {
            std::cout << "Picking pixel: " << this->Interactor->GetEventPosition()[0]
                      << " " << this->Interactor->GetEventPosition()[1] << std::endl;
            //注册拾取点函数
            this->Interactor->GetPicker()->Pick(
                        this->Interactor->GetEventPosition()[0],
                    this->Interactor->GetEventPosition()[1], 0,  // always zero.
                    this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()
                    );
            //打印拾取点空间位置
            this->Interactor->GetPicker()->GetPickPosition(picked);
            std::cout << "Picked value: " << picked[0] << " " << picked[1] << " " << picked[2] << std::endl;
            //如果之前选择了其他点,删除上一次的标记点
            if(this->last_picked_actor)
            {
                this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->RemoveActor(last_picked_actor);
//                last_picked_actor->Delete();
//                last_picked_actor=vtkActor::New();
            }
	    //获取此次的标记点。
            this->last_picked_actor=GetActor();
            if(this->last_picked_actor)
            {
                //标记出来,
                this->last_picked_actor->SetScale(0.02);
                this->last_picked_actor->GetProperty()->SetColor(1.0, 0.0, 0.0);
                this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(this->last_picked_actor);
            }
            vtkInteractorStyleTrackballCamera::OnRightButtonDown();

        }


    }
    int flag;
    double picked[3];//选取的点坐标
private:
    vtkActor* last_picked_actor;
    inline vtkActor* GetActor()
    {

        vtkSmartPointer<vtkSphereSource> sphereSource =
                vtkSmartPointer<vtkSphereSource>::New();
        sphereSource->Update();

        vtkSmartPointer<vtkPolyDataMapper> mapper =
                vtkSmartPointer<vtkPolyDataMapper>::New();
        mapper->SetInputConnection(sphereSource->GetOutputPort());
        vtkActor* actor = vtkActor::New();
        actor->SetMapper(mapper);
        actor->SetPosition(picked);
        return actor;
    }
};
3 参考文献 

VTK图形图像开发进阶

  http://blog.csdn.net/webzhuce/article/details/72802322


  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: vtk是一种图形库,用于可视化数据。在vtk中,“”、“线”和“面”是常见的几何元素。下面是关于这些元素的一些示例: 1. (Point):是空间中具有坐标位置的最基本的几何元素。在vtk中,我们可以创建一个或多个,并指定它们的坐标。例如,我们可以创建一个的集合,表示星空中的一些恒星的位置。每个都有自己的坐标,可以在三维空间中进行可视化。 2. 线(Line):线是由两个或更多个连接起来的组成的几何形状。在vtk中,我们可以使用的坐标来创建一条直线。例如,我们可以创建一个由两个组成的线,表示一条直线段的路径。这条直线可以用来表示一条河流的流程,或者是一辆车在道路上行驶的路径。 3. 面(Surface):面是由三个或更多个连接起来的和线组成的几何形状。在vtk中,我们可以使用的坐标和线的连接关系来创建一个面。例如,我们可以创建一个三角形的面,通过指定三个的坐标来定义。这个三角形可以用来表示一个地面的形状,或者是一个房屋的屋顶的形状。 总之,vtk提供了一种便捷的方式来创建和可视化各种几何元素,包括、线和面。通过使用vtk,我们可以将这些几何元素在三维空间中进行可视化,并用于表示和展示各种数据的形状和结构。 ### 回答2: VTK(Visualization Toolkit)是一个强大的图形可视化库,它提供了丰富的功能和工具,可以用于创建各种类型的图形对象和可视化效果。在VTK中,可以使用、线和面作为基本的图形元素。 在VTK中,是最简单的图形元素之一。它可以用于表示空间中的一个坐标,具有位置属性。例如,我们可以使用VTK创建一个的可视化效果,通过设置其位置和颜色来定义的属性,从而实现对的可视化表达。 线是由多个连接而成的线段。在VTK中,可以使用一系列来创建一条线,并通过设置线的属性,如线宽、颜色、透明度等来实现线的可视化效果。例如,我们可以通过VTK创建一个由多个组成的路径,用来表示动态的物体运动轨迹。 面是由多条连续的线组成的封闭区域。在VTK中,可以使用一系列的坐标来定义一个封闭的多边形,并通过设置面的属性,如颜色、透明度、纹理等来实现面的可视化效果。例如,我们可以使用VTK创建一个立方体的可视化效果,通过定义六个面和对应的坐标来表示立方体的各个面。 总结起来,VTK中的、线和面都是用于表示图形对象的基本元素,可以通过设置它们的属性来实现各种形式的可视化效果。无论是单独使用还是组合使用,这些元素都为图形的创建和可视化提供了灵活和多样的选择。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值