Как заменить значения XYZ облака точек с помощью указателей? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть массив указателей float, который представляет данные точек XYZ, которые нужно сохранить в облаке точек. Я знаю, что одним из способов будет l oop через каждое значение и назначить его каждой точке, но есть ли эффективный способ, который может заменить значения XYZ вновь созданного PointCloud массивом указателей float? Я попытался извлечь Eigen::MatrixXf для точек облака точек, а затем - массив указателей, но замена этого массива не изменила облако точек.

Вот код, показывающий, что я пытаюсь сделать:

#include <pcl/io/pcd_io.h>
#include <pcl/io/io.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>

#include <iostream>
#include <memory>

int main() {
  pcl::PointCloud<pcl::PointXYZI>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZI>);
  int num_points = 2;
  cloud->resize(num_points);

  float *new_points = new float[3 * num_points];
  new_points[0] = 0; new_points[1] = 1; new_points[2] = 2;
  new_points[3] = 3; new_points[4] = 4; new_points[5] = 5;

  auto m = cloud->getMatrixXfMap(3, 8, 0);
  auto f_array = m.data();
  // Some processing happens here to f_array (?)...

  // This should print {0, 1, 2} and {3, 4, 5}
  for (int i = 0; i < num_points; i++) {
    std::cout << "Point [" << i << "]: " << cloud->points.at(i).x << ", "
    << cloud->points.at(i).y << ", " << cloud->points.at(i).z << std::endl;
  }
  return 0;
}
...