#define PCL_SILENCE_MALLOC_WARNING 1
|
#include <pcl/visualization/cloud_viewer.h>
|
#include <pcl/point_types.h>
|
#include <pcl/io/pcd_io.h>
|
#include <atomic>
|
#include <thread>
|
|
std::atomic<int> user_data(0);
|
|
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {
|
viewer.setBackgroundColor(0.1, 0.1, 0.1); // 深灰背景更易观察
|
viewer.addCoordinateSystem(1.0); // 添加坐标系
|
viewer.initCameraParameters(); // 初始化相机参数
|
std::cout << "Initial setup complete." << std::endl;
|
}
|
|
void viewerPsycho(pcl::visualization::PCLVisualizer& viewer) {
|
static unsigned count = 0;
|
viewer.removeShape("text");
|
viewer.addText("Frame: " + std::to_string(count++), 20, 30, 20, 1, 1, 1, "text");
|
user_data.fetch_add(1, std::memory_order_relaxed);
|
}
|
|
int main() {
|
// 加载点云(带错误处理)
|
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
|
if (pcl::io::loadPCDFile<pcl::PointXYZRGBA>("sampledata.pcd", *cloud) == -1) {
|
std::cerr << "Error: Failed to load PCD file!" << std::endl;
|
return -1;
|
}
|
|
// 创建可视化器
|
pcl::visualization::CloudViewer viewer("Enhanced Cloud Viewer");
|
|
// 显示点云
|
viewer.showCloud(cloud);
|
|
// 设置回调函数
|
viewer.runOnVisualizationThreadOnce(viewerOneOff);
|
viewer.runOnVisualizationThread(viewerPsycho);
|
|
// 主循环
|
while (!viewer.wasStopped()) {
|
// 示例处理逻辑(线程安全)
|
user_data.fetch_add(1, std::memory_order_relaxed);
|
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
}
|
|
return 0;
|
}
|