1. 程式人生 > >PCL中將回調函式封裝到類中

PCL中將回調函式封裝到類中

這是類中的宣告

private://點雲回撥函式  NuClearTask_MyPointCloudHandle
    //點雲選擇
    static void ps_callback(const pcl::visualization::AreaPickingEvent& event, void* object)
    {
        NuClearTask *pThisObject = (NuClearTask*)object;
        pThisObject->PointSelect_callback(event);
    }
    void PointSelect_callback(const
pcl::visualization::AreaPickingEvent& event);

呼叫的時候把點雲所在類的物件指標傳入

NuPointCloudHandle.viewer->registerAreaPickingCallback(ps_callback, (void*)this);

方法的實現在PointSelect_callback函式中

//點雲選擇
void NuClearTask::PointSelect_callback(const pcl::visualization::AreaPickingEvent& event)
{
    
static int num = 0; NuPointCloudHandle.selected_points_3d->points.clear(); std::vector< int > indices; if ((int)event.getPointsIndices(indices) == -1) return; for (int i = 0; i < indices.size(); ++i) { NuPointCloudHandle.selected_points_3d->points.push_back(NuPointCloudHandle.cloud->points.at(indices[i])); } std::
string cloudName = to_string(num++) + "cloudred"; pcl::visualization::PointCloudColorHandlerCustom<PointTypeXYZ> red(NuPointCloudHandle.selected_points_3d, 255, 0, 0); NuPointCloudHandle.viewer->addPointCloud(NuPointCloudHandle.selected_points_3d, red, cloudName); NuPointCloudHandle.viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, cloudName); NuPointCloudHandle.viewer->updatePointCloud(NuPointCloudHandle.cloud, CloudID); }