如何使用pcl庫中可視化模塊的鍵盤事件
# include & ltPCL/visualization/PCL _ visualizer . h & gt;
bool iteration _ flag = false
void keyboard event occurred(const PCL::visualization::keyboard event & amp;事件,void* nothing){
if(event . getkey sym()= = " space " & amp;& ampevent.keyDown()){
叠代_標誌=真;
}
}
int main(){
PCL::visualization::PCLVisualizer * p;
p = new PCL::visualization::PCL visualizer(" PCL Windows ");
p->;register keyboard callback(& amp;keyboard event occurrence,(void *)NULL);
while(叠代_標誌!=真){
p->;spin once();
}
返回0;
}
註意事項:
第壹種:也就是必須給妳定義的p指針賦壹個實例化對象:p = new PCL::visualization::PCL visualizer(" PCL Windows ");否則程序編譯不會有錯誤,但是運行時會出現內存異常操作錯誤。
第二個是這個自定義鍵盤事件函數:keyboard event occurrence()函數。要使這個函數可用,我們不需要調用p->;SpinOnce()方法,程序可以響應我們的鍵盤事件函數。
第三個也很重要:實際上,在上面的代碼中,這個程序是不安全的:
while(叠代_標誌!=真){?
p->;spin once();
}
因為程序怎麽總是在這個地方執行,如果妳把壹個點雲可視化成更多的點,那麽過了壹段時間(大概不到5秒),妳的電腦就卡死了!!!!
安全程序應該是這樣的:(參考網站:這裏)
我們添加了壹個延遲函數來防止它總是執行spinOnce()方法。
# include & ltboost/thread/thread.hpp >
while(叠代_標誌!=真)?
{
p->;spin once(100);boost::this _ thread::sleep(boost::POSIX _ time::微秒(100000));?
}
其中,spinOnce()函數中的100是指:可視化循環應該允許運行多長時間(以毫秒為單位)。
其中,boost::this _ thread::sleep(boost::POSIX _ time::微秒(100000));延遲是100000微秒,也就是0.1秒。