PCL自定义交互

鼠标事件

每次相应鼠标时间都会回调函数,需要从event实例提取事件信息,本例中演示鼠标左键的释放事件

void mouseEventOccurred (const pcl::visualization::MouseEvent &event,
                         void* viewer_void)
{
  pcl::visualization::PCLVisualizer *viewer = static_cast<pcl::visualization::PCLVisualizer *> (viewer_void);
  if (event.getButton () == pcl::visualization::MouseEvent::LeftButton &&
      event.getType () == pcl::visualization::MouseEvent::MouseButtonRelease)
  {
    std::cout << "Left mouse button released at position (" << event.getX () << ", " << event.getY () << ")" << std::endl;

    char str[512];
    sprintf (str, "text#%03d", text_id ++);
    viewer->addText ("clicked here", event.getX (), event.getY (), str);
  }
}

键盘事件

按下r健,则删除前面鼠标所产生的文本标签(当按下R键时 3D相机仍然会重置)

unsigned int text_id = 0;
void keyboardEventOccurred(const pcl::visualization::KeyboardEvent &event,
    void* viewer_void)
{
    pcl::visualization::PCLVisualizer *viewer = static_cast<pcl::visualization::PCLVisualizer *> (viewer_void);
    if (event.getKeySym() == "r" && event.keyDown())
    {
        std::cout << "r was pressed => removing all text" << std::endl;

        char str[512];
        for (unsigned int i = 0; i < text_id; ++i)
        {
            sprintf(str, "text#%03d", i);
            viewer->removeShape(str);
        }
        text_id = 0;
    }
}

主函数

int main(){
    //多数情况下,默认的鼠标和键盘交互设置不能满足用户的需求,用户想扩展函数的某一些功能,比如按下键盘时保存点云的信息,或者通过鼠标确定点云的位置,interactionCustomizationVis 函数进行演示如何捕捉鼠标和键盘事件,在窗口点击,将会显示一个2D的文本标签,按下r健出去文本


      boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
      viewer->initCameraParameters();
      //以上是实例化视窗的标准代码

      //分别注册响应键盘和鼠标事件,keyboardEventOccurred  mouseEventOccurred回调函数,需要将boost::shared_ptr强制转换为void*
      viewer->registerKeyboardCallback (keyboardEventOccurred, (void*)viewer.get ());
      viewer->registerMouseCallback (mouseEventOccurred, (void*)viewer.get ());

      while (!viewer->wasStopped ())
      {

          viewer->spinOnce();
      }


      return 0;
}

运行结果

发布了54 篇原创文章 · 获赞 80 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41685265/article/details/104639973
今日推荐