pcl里面根据索引提取子点云的接口有 ExtractIndices
使用效果如下:
有3个点,提取 所以0,2的点
取反
编写的klib可视化平台的插件代码如下:
struct OpExtractIndices
{
bool extract_removed_indices = false;
bool negative = false;
PointIndicesPtr indicesPtr;
template<class PT>
KArbit operator()(const pcl::shared_ptr<PointCloud<PT> >& cld)
{
auto cld2 = pcl::make_shared<PointCloud<PT>>();
pcl::ExtractIndices<PT> extract(extract_removed_indices);
extract.setInputCloud(cld);
extract.setIndices(indicesPtr);
extract.setNegative(negative);
extract.filter(*cld2);
return cld2;
}
};
struct KPclOpCldExtractIndices : KPlugBase
{
OpExtractIndices p;
KPclOpCldExtractIndices()
{
addProp("indexList").setType(PropTypeInt32List).setEmptyIndex(1);
addProp("negative").setType(PropTypeBool).setValueAddr(&p.negative);
addProp("extract_removed_indices").setType(PropTypeBool).setValueAddr(&p.extract_removed_indices);
}
int __exec(const KArbit& src, KArbit& dst) override
{
auto& aL = a2list(src);
CastType(idx, PointIndicesPtr, aL[1]);
p.indicesPtr = idx;
dst = cld_op(aL[0], p);
return true;
}
};