SetCloudPointColors
原型
bool SetCloudPointColors(unsigned id, const std::vector<size_t>& points, const Color& color);
bool SetCloudPointColors(unsigned id, const std::vector<size_t>& points,
const std::vector<Color>& colors);
功能
为点云中的点设置逐点颜色覆盖,设置后这些点在 3D 视图中按指定的颜色显示。
- 第一个重载为
points中的所有点设置同一个颜色。 - 第二个重载按顺序为
points中的每个点设置colors中对应的颜色,colors必须与points等长。
颜色覆盖只保存在内存中,是会话内的显示状态,不会写入工作站文件;重新打开工作站或删除点(点云对象重建)后颜色覆盖会丢失。设置成功后 3D 视图立即刷新。
参数
- id: 点云对象的Id。
- points: 需要设置颜色的点的索引列表,索引从0开始,与 GetCloudPoints 返回的点顺序一致。
- color: 统一设置的颜色,参见 Color 类。颜色分量的有效范围为 [0, 1],超出范围的分量会被钳制到该区间。
- colors: 与
points一一对应的颜色列表。
返回值
成功写入至少一个点的颜色时返回 true,否则返回 false。
以下情况返回 false:
- id 不存在,或 id 对应的对象不是点云;
points为空;- 使用第二个重载时,
points与colors的长度不一致; - 点云中没有点,或
points中的索引全部越界。
索引越界的点会被忽略,其余合法索引仍然生效,因此只有部分索引越界时函数仍返回 true。
示例
// 将索引为 0~3 的点统一设置为红色
std::vector<size_t> points{0, 1, 2, 3};
mpl::SetCloudPointColors(pointCloudId, points, mpl::Color{1.0f, 0.0f, 0.0f});
// 为索引为 10、11、12 的点分别设置红、绿、蓝
std::vector<size_t> indices{10, 11, 12};
std::vector<mpl::Color> colors{{1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}};
mpl::SetCloudPointColors(pointCloudId, indices, colors);