PCL 使用 pcl::visualization::PCLVisualizer 类里面的键盘事件方法 如何使用及需要注意的事项
2017-03-04 03:59
1161 查看
原博文链接在我的官方网站,网址是:http://www.aobosir.com/blog/2017/02/08/pcl-visualization-PCLVisualizer-register-keyboard-callback/
第二个:就是这个自定义的键盘事件函数了:
第三个:一个也非常重要:其实上面的代码中,这段程序是不安全的:
因为如何程序在这个地方一直的执行,如果你可视化的是一个点比较多的点云,那么一段时间后(大约不到5秒钟),你的电脑就会卡得要死!!!!
安全的程序应该是下面这个样子的:(参考网站:这里)
我们添加延时函数,不让它一直执行
其中
其中的
更多精彩的博文,请访问:http://www.aobosir.com/
如何使用 pcl 库里面的可视化模块的键盘事件
#include <pcl/visualization/pcl_visualizer.h> bool iteration_flag = false; void keyboardEventOccurred(const pcl::visualization::KeyboardEvent& event, void* nothing){ if(event.getKeySym() == "space" && event.keyDown()){ iteration_flag = true; } } int main(){ pcl::visualization::PCLVisualizer *p; p = new pcl::visualization::PCLVisualizer("PCL Windows"); p->registerKeyboardCallback(&keyboardEventOccurred, (void*)NULL); while(iteration_flag != true){ p->spinOnce(); } return 0; }
需要注意的事项:
第一个:就是,你定义的这个p指针,必须要给它赋值实例化对象:
p = new pcl::visualization::PCLVisualizer("PCL Windows");,否则程序编译不会出现错误,但是运行的时候会出现内存异常的运行错误。
第二个:就是这个自定义的键盘事件函数了:
keyboardEventOccurred()函数。想要让这个函数可以使用,我们不需要再程序中循环的调用
p->spinOnce()方法,程序才能响应我们的这个键盘事件函数。
第三个:一个也非常重要:其实上面的代码中,这段程序是不安全的:
while(iteration_flag != true){ p->spinOnce(); }
因为如何程序在这个地方一直的执行,如果你可视化的是一个点比较多的点云,那么一段时间后(大约不到5秒钟),你的电脑就会卡得要死!!!!
安全的程序应该是下面这个样子的:(参考网站:这里)
我们添加延时函数,不让它一直执行
spinOnce()方法。
#include <boost/thread/thread.hpp>
while (iteration_flag != true) { p->spinOnce (100); boost::this_thread::sleep (boost::posix_time::microseconds (100000)); }
其中
spinOnce()函数里面的
100指的是:How long (in ms) should the visualization loop be allowed to run.
其中的
boost::this_thread::sleep (boost::posix_time::microseconds (100000));是延时100000微秒,也就是0.1秒。
更多精彩的博文,请访问:http://www.aobosir.com/
相关文章推荐
- C++ 构造函数使用 ":成员变量(形参)" 的形式给类里面成员变量赋值,如果成员变量和形参是指针,那么需要注意的事项
- jquery load事件(callback/data)使用方法及注意事项
- 移植库需要注意事项(与移植库生成的文件如何使用)
- jquery load事件(callback/data)使用方法及注意事项
- 如何不用oracle client直接使用plsql远程连接oracle数据库以及需要注意的事项
- 关于PHP面向对象编程中使用范围解析操作符访问非静态方法的注意事项
- VB StrConv方法使用注意事项
- 如何开始acm之旅以及需要注意的事项
- mysql中使用存储过程方法中的注意事项
- UGUI中带参数事件的使用,itween动画注意事项以及切换场景
- 使用List的remove方法需要的注意的问题
- 为什么用group by 以及使用的方法和注意事项
- iOS 使用class_copyPropertyList等runtime方法的注意事项
- C#键盘输入方法(Input.GetKey()和Input.GetKeyUp())需要注意的一个问题(一个U3D初学者的总结)
- 锂电池正确充电方法及日常使用注意事项
- 使用Windows Server 2012 Hyper-V在虚拟机中做群集需要注意的事项
- [HTML5]Application Cache使用中需要注意的事项
- Qt中如何使用样式表QPalette以及相关注意事项(转)
- UISearchController使用方法及注意事项
- [Angular] 键盘监听事件需要鼠标点击一下窗口才能监听到如何解决?