PCLVisualizer窗口事件的注册
一般情况下PCLVisualizer事件回调函数的形式为:
void eventFunction(const pcl::visualization::**Event &event, void* args)
注册回调函数的形式为:
viewer->registerEventCallback(eventFunction, void*)
若在事件相应后想对PCLVisualizer所指向的智能指针对象进行操作,需要将该指针传入args。主要方法主要有两种。
1.pcl::visualization::PCLVisualizer::Ptr viewer to void*
// get()返回智能指针对应的普通指针
(void*)viewer.get();
void* viewer to pcl::visualization::PCLVisualizer::Ptr
// 用普通指针初始化只能指针
pcl::visualization::PCLVisualizer::Ptr _viewer(viewer);
2.将pcl::visualization::PCLVisualizer::Ptr重新封装在一个数据结构里(推荐),例如:
// 将pcl::visualization::PCLVisualizer::Ptr封装在新的数据形式里面
typedef EventArgs
{
pcl::visualization::PCLVisualizer::Ptr viewerPtr;
}EVENTARGS;
3.传入指向智能指针的普通指针,官方文档示例中
pcl::visualization::PCLVisualizer::Ptr viewer = *static_cast< *pcl::visualization::PCLVisualizer::Ptr> (viewer_void);
viewer->registerEventCallback (keyboardEventOccurred, (void*)&viewer);
该方法在win10,pcl1.7.2下运行出现错误。不知道其他平台怎么样
pcl::visualization中的事件主要有PointPickingEvent, AreaPickingEvent,MouseEvent,KeybordEvent 4种形式。