Skip to main content

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);