您的位置:首页 > 其它

PCL使用类成员函数作为pclvisualizer的回调函数

2016-11-29 21:01 453 查看
参考链接

#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/point_representation.h>
#include <pcl/visualization/pcl_visualizer.h>

using namespace pcl;

class dummyClass{

public:
dummyClass();
~dummyClass(){};

void keyboardEventOccurred (const visualization::KeyboardEvent &event, void* junk);

pcl::PointXYZ randomPoint();

void spin();

private:
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
pcl::PointCloud<pcl::PointXYZ>::Ptr pc;
};

dummyClass::dummyClass(){
// Create viewer
viewer.reset(new pcl::visualization::PCLVisualizer ("3D Viewer"));
viewer->addCoordinateSystem(1);
viewer->addText("Press r to add a random point", 30, 10, 15, 1.0f,0.0f,0.0f,"text");

// Create cloud
pc.reset(new pcl::PointCloud<pcl::PointXYZ>());
pc->push_back(randomPoint());
viewer->addPointCloud(pc,"cloud");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 5,"cloud");

// Register Keyboard Event
viewer->registerKeyboardCallback(&dummyClass::keyboardEventOccurred,*this);
};

void dummyClass::keyboardEventOccurred (const visualization::KeyboardEvent &event, void* junk){
if (event.getKeySym() == "r" && event.keyDown()){
pc->push_back(randomPoint());
viewer->updatePointCloud(pc,"cloud");
}
};

pcl::PointXYZ dummyClass::randomPoint(){
pcl::PointXYZ pt;
pt.x = (double)rand() / RAND_MAX *10 - 5;
pt.y = (double)rand() / RAND_MAX *10 - 5;
pt.z = (double)rand() / RAND_MAX *10 - 5;
return pt;
};

void dummyClass::spin(){
viewer->spin();
};

int
main (int argc, char** argv)
{
dummyClass dc;
dc.spin();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: