JayNicht 2023-12-10 20:44 采纳率: 28.6%
浏览 26
已结题

PCL注册的选点等函数如何取消注册

本项目使用PCL+VTK可视化点云并编辑,因为要实现屏幕选点的功能,所以使用了PCLVisualizer中自带的回调函数,具体实现如下:
QVTKWindow的构造函数中:

    //绑定类成员函数并注册
    std::function<void(const pcl::visualization::PointPickingEvent&)> pickPoint =
            std::bind(&QVTKWindow::pp_callback, this, std::placeholders::_1);
    viewer->registerPointPickingCallback(pickPoint);

具体实现:

void QVTKWindow::pp_callback(const pcl::visualization::PointPickingEvent &event)
{
    if (event.getPointIndex() == -1)
       return;
    PointT currentPoint;
    event.getPoint(currentPoint.x, currentPoint.y, currentPoint.z);

    PointCloudT currentPointCloud;
    currentPointCloud.push_back(currentPoint);
    PointCloudT::Ptr currentPointPtr = currentPointCloud.makeShared();
    // Draw clicked points in red:将选中点用红色标记
    pcl::visualization::PointCloudColorHandlerCustom<PointT> red(currentPointPtr, 255, 0, 0);
    viewer->removePointCloud("currentPoint");
    viewer->addPointCloud(currentPointPtr, red, "currentPoint");
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 10, "currentPoint");
    std::cout << currentPoint.x << " " << currentPoint.y << " " << currentPoint.z << std::endl;

}

实现没有问题,请问现在如何将该回调函数取消注册,即我想实现取点功能的状态开关。在启动选点功能时将函数注册进去,在关闭选点功能时取消注册。

  • 写回答

9条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2023-12-10 20:46
    关注

    由人工智能和答主提供,可以参考如下,如果回答的不正确,及时评论区回复,我追加回答,谢谢。


    要取消注册回调函数,可以使用viewer->deregisterPointPickingCallback(pickPoint)方法。在你的代码中,可以在需要切换选点功能状态的地方调用这个方法。例如:

    // 启动选点功能
    viewer->registerPointPickingCallback(pickPoint);
    
    // 关闭选点功能
    viewer->deregisterPointPickingCallback(pickPoint);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月10日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵