PCL自带的框选功能需要通过 点击 'x'进入退出,使用起来十分不便.本文实现了使用Ctrl + 鼠标左键进行框选

1.注册PCLVisualizer的键盘事件和框选结束事件,并设置PCL的Picker为AreaPicker


viewer->registerAreaPickingCallback(pp_callback, (void*)this);
viewer->registerKeyboardCallback(KeyDownCallback);
vtkSmartPointer<vtkRenderedAreaPicker> area_picker = vtkSmartPointer<vtkRenderedAreaPicker>::New();
viewer->getRenderWindow()->GetInteractor()->SetPicker(area_picker);

2.使用Style的StartSelect()方法进入选择模式,这样就可以实现Ctrl + 鼠标左键进行框选了,但VTK比较坑,只有StartSelect()却没有EndSelect(),下一步就需要改VTK的源码,当鼠标左键弹起时退出选择模式.

void KeyDownCallback(const visualization::KeyboardEvent& event)
{if (event.isCtrlPressed()) viewer->getInteractorStyle()->StartSelect();
}void pp_callback(const pcl::visualization::AreaPickingEvent& event, void* args)
{ScanCommander* commander = (ScanCommander*)args;std::vector< int > indices;if (event.getPointsIndices(indices) == -1)return;for (int i = 0; i < indices.size(); ++i){clicked_points_3d->points.push_back(cloud->points.at(indices[i]));}visualization::PointCloudColorHandlerCustom<PointXYZ> red(clicked_points_3d, 255, 0, 0);std::stringstream ss;std::string cloudName;ss << num++;ss >> cloudName;cloudName += "_cloudName";viewer->addPointCloud(clicked_points_3d, red, cloudName);viewer->setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_POINT_SIZE, 30, cloudName);commander->centralWidget->update();
}

3.修改VTK源码中的 vtkInteractorStyleRubberBandPick中的OnLeftButtonUp方法,在方法的最后一行添加

this->CurrentMode = VTKISRBP_ORIENT;

修改后如下:

void vtkInteractorStyleRubberBandPick::OnLeftButtonUp()
{if (this->CurrentMode != VTKISRBP_SELECT){//if not in rubber band mode,  let the parent class handle itthis->Superclass::OnLeftButtonUp();return;}if (!this->Interactor || !this->Moving){return;}//otherwise record the rubber band end coordinate and then fire off a pickif (   (this->StartPosition[0] != this->EndPosition[0])|| (this->StartPosition[1] != this->EndPosition[1]) ){this->Pick();}this->Moving = 0;this->CurrentMode = VTKISRBP_ORIENT;
}

重新编译并替换vtkInteractionStyle-8.1.dll即可

链接里是我编译好的dll,包括Debug和Release

https://download.csdn.net/download/Lynn_Y_Lin/12140085

实现PCL使用Ctrl + 鼠标左键进行框选相关推荐

  1. zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法

    转载自:http://blog.csdn.net/wide288/article/details/21622183 zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法:  z ...

  2. Ctrl + 鼠标左键:跳转到对应的`定义位置`

    在代码中,想要查看一个函数或变量的定义位置时,可以将鼠标放在想要查看的对象上 ,按ctrl+鼠标左键,即可跳转到定义位置. 例如:想要查看extract_all_wav_feature()的定义位置, ...

  3. VSCode ctrl+鼠标左键无法跳转,F12可以跳转

    1. 打给设置文件setting.json ctrl+shift+p后输入setting,快速找到 添加一行 "python.jediEnabled":false 如下图:2. 如 ...

  4. idea ctrl+alt+鼠标左键和ctrl+鼠标左键的作用和区别

    ctrl+鼠标左键:进入接口,它是进入下一层 ctrl+alt+鼠标左键:进入实现方法,它是进入最底层

  5. vscode 单击跳转_vscode中ctrl+鼠标左键不能跳转_编程开发工具

    mac电脑怎么样安装vscode_编程开发工具 mac电脑安装vscode的方法是:1.打开浏览器搜索vscode,进入官网:2.点击[download for mac]进行下载:3.双击下载的压缩包 ...

  6. vscode 单击跳转_vscode中ctrl+鼠标左键不能跳转

    vscode中ctrl+鼠标左键不能跳转,就会,文件,教程,工作,跳转 vscode中ctrl+鼠标左键不能跳转 易采站长站,站长之家为您整理了vscode中ctrl+鼠标左键不能跳转的相关内容. 问 ...

  7. eclipse 点击 ctrl+鼠标左键不能进入方法

    之前下载的jdk1.10版本中,eclipse点击ctrl+鼠标左键可以进入方法,但jdk1.10版本连接sql server数据库有一些bug,所以换了jdk1.8版本,但是换了之后发现点击ctrl ...

  8. IDEA CTRL + 鼠标左键 查看引用的类和方法名 失效

    突然IDEA的 Ctrl+鼠标左键 点在方法名上或者类名上,弹不出被引用的列表 ; 还显示 " 2 usages are out of scope 'Project test files' ...

  9. vscode ctrl+鼠标左键没反应

    目录 vscode ctrl+鼠标左键没反应 可能的原因 解决方法 vscode ctrl+鼠标左键没反应 vscode刚开始用的好好地,有一天突然发现按ctrl+鼠标左键无法跳转到函数,我就知道我要 ...

最新文章

  1. jquery插件-表单验证插件-提示信息中文化与定制提示信息
  2. 用缓存拦截接口频繁的请求
  3. 产品经理规划产品之需求梳理
  4. 免费资源:Typicons-免费图标字体
  5. 华为MSTP配置教程(二)
  6. [Codeforces 10E] Greedy Change
  7. 妙用 background 实现花式文字效果
  8. NOIP2017提高组比赛总结
  9. 2017.10.13java上机出现中的问题
  10. 编译内核_将驱动编译进内核(Kernel)的步骤记录
  11. Office 2007,在编辑Word时,文件经常无法保存会丢失
  12. 十次方项目登陆问题 token令牌解析,claims获取不到userid,求大神帮忙看下代码解决问题
  13. JS 右键鼠标事件练习
  14. 复印机扫描仪错误怎么回事_打印机扫描后出现错误怎么处理?
  15. 中国土地市场网lanchina.com数据采集过程
  16. Aspnet Mvc 前后端分离项目手记(二)关于token认证
  17. android最新版本下载vivo,vivo官网下载
  18. 谷歌八年算法工程师分享几点算法学习小技巧
  19. python 路边停车
  20. Python使用efinance获取全部股票代码数据

热门文章

  1. 前5个流行的 JavaScript IDE
  2. errno和strerror
  3. 用curl post 调用接口
  4. 视界云荣获创业邦2018中国企业服务人气奖TOP10
  5. HTML + JS实现万年历效果
  6. ac自动机,自动ac机(bushi
  7. 大小端的判断及其转换
  8. Visual Studio2008c++怎么用两个栈实现个位数计算器
  9. 2023五一数学建模B题完整模型代码【原创首发】
  10. 【Web技术】1295- 总结一下前端本地储存方案