如何在PCL中实现两个点之间的连线绘制?
PCL 绘制两点之间线段的解决方案
你找到的是addLine接口的其中一个重载,pcl::visualization::PCLVisualizer 类本身提供了直接传入两个端点的addLine重载,不需要额外计算方向,是最简单的实现方式。
1. 直接使用双端点重载(推荐)
这个重载的参数逻辑非常简单,直接传入两个端点、自定义颜色和唯一ID即可,示例调用方式:viewer->addLine(p1, p2, r, g, b, "unique_line_id");
参数说明:
p1、p2:两个端点,支持所有PCL标准点类型(PointXYZ、PointXYZRGB等)r、g、b:线段颜色,取值范围0~1unique_line_id:线段的唯一标识,重复ID会覆盖之前的同名线段
2. 单起点+方向重载的使用方法
如果你的场景必须使用要传入方向的重载,方向向量可通过两个端点直接计算得到:
- 设两个端点为 起点p1(x1,y1,z1)、终点p2(x2,y2,z2)
- 方向向量三个分量分别为
dx = x2 - x1、dy = y2 - y1、dz = z2 - z1
调用示例:viewer->addLine(x1, y1, z1, dx, dy, dz, r, g, b, "unique_line_id");
完整可运行示例代码
#include <pcl/point_types.h> #include <pcl/visualization/pcl_visualizer.h> int main() { // 初始化可视化窗口 pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("Line Draw Demo")); viewer->setBackgroundColor(0, 0, 0); // 定义两个测试端点 pcl::PointXYZ point_a(0.0f, 0.0f, 0.0f); pcl::PointXYZ point_b(1.5f, 2.3f, 0.8f); // 绘制绿色线段,线宽设为2 viewer->addLine(point_a, point_b, 0.0f, 1.0f, 0.0f, "line_test"); viewer->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH, 2, "line_test"); // 窗口循环 while (!viewer->wasStopped()) { viewer->spinOnce(100); } return 0; }
注意事项
- 若需要更新已绘制的线段,先调用
viewer->removeShape("unique_line_id")删除旧线段,再重新添加新线段 - 颜色参数取值范围是01,若使用0255的颜色值需除以255转换格式
内容的提问来源于stack exchange,提问作者Mohamed Hedeya
相关产品推荐
相关产品推荐

