Я пытаюсь использовать алгоритм определения формы CGAL в соответствии с примером "Basic Planar Shape Detection" в CGAL 4.13.1.Однако вместо чтения данных из файла с
CGAL::read_xyz_points(stream,
std::back_inserter(points),
CGAL::parameters::point_map(Point_map()).
normal_map(Normal_map()))
я бы хотел загрузить свои точки из существующего pcl::PointCloud
в необходимый тип CGAL.Я просто не уверен, как создать этот тип CGAL.Согласно примеру (выдержка)
typedef std::pair<Kernel::Point_3, Kernel::Vector_3> Point_with_normal;
typedef std::vector<Point_with_normal> Pwn_vector;
Pwn_vector points;
typedef CGAL::Shape_detection_3::Efficient_RANSAC<Traits> Efficient_ransac;
EfficientRansac.set_input(points);
Мне просто нужно создать Pwn_vector
.Итак, мои вопросы
- Могу ли я просто вставить точки в
Pwn_vector
? - Каков наилучший способ получения нормалей в CGAL?Это
CGAL::jet_estimate_normals
? - Нужны ли мне карты недвижимости для
Point_map
и Normal_map
?Я не понимаю, как они передаются Efficient_ransac
. - Что-нибудь еще нужно?
Я начал со следующего кода:
// Points with normals.
cgal::Pwn_vector points;
// load points from pcl cloud
for (auto point : cloud.points) {
cgal::Point_with_normal pwn;
pwn.first = cgal::ShapeKernel::Point_3(point.x, point.y, point.z);
points.push_back(pwn);
}
(PCL не представляет интереса для этого вопроса, поскольку понятно, как получить доступ к отдельным координатам.)