某些 CGAL 示例(例如 Jet Smoothing 和 Normal Orientation)无法编译
Some CGAL examples (e.g. Jet Smoothing and Normal Orientation) fail to compile
我目前正在进行一个项目,在该项目中,使用一些 CGAL 算法进行点集处理将非常有利。
除其他外,我需要获得射流平滑算法 运行 - 示例如下:
http://doc.cgal.org/latest/Point_set_processing_3/
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/jet_smooth_point_set.h>
#include <vector>
// types
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef Kernel::Point_3 Point;
int main(void)
{
// generate point set
std::vector<Point> points;
points.push_back(Point( 0.0, 0.0, 0.001));
points.push_back(Point(-0.1,-0.1, 0.002));
points.push_back(Point(-0.1,-0.2, 0.001));
points.push_back(Point(-0.1, 0.1, 0.002));
points.push_back(Point( 0.1,-0.1, 0.000));
points.push_back(Point( 0.1, 0.2, 0.001));
points.push_back(Point( 0.2, 0.0, 0.002));
points.push_back(Point( 0.2, 0.1, 0.000));
points.push_back(Point( 0.0,-0.1, 0.001));
// Smoothing.
const unsigned int nb_neighbors = 8; // default is 24 for real-life point sets
CGAL::jet_smooth_point_set(points.begin(), points.end(), nb_neighbors);
return EXIT_SUCCESS;
}
编译时(使用 CMake),我遇到了以下错误:
error: no matching function for call to ‘jet_smooth_point_set(std::vector<CGAL::Point_3<CGAL::Epick> >::iterator, std::vector<CGAL::Point_3<CGAL::Epick> >::iterator, const unsigned int&)’
CGAL::jet_smooth_point_set(points.begin(), points.end(), nb_neighbors);
jet_smooth_point_set.h:177:1: note: candidate: template<class Concurrency_tag, class InputIterator, class PointPMap, class Kernel, class SvdTraits> void CGAL::jet_smooth_point_set(InputIterator, InputIterator, PointPMap, unsigned int, const Kernel&, unsigned int, unsigned int)
note: candidate expects 7 arguments, 3 provided
CGAL::jet_smooth_point_set(points.begin(), points.end(), nb_neighbors);
该错误似乎暗示函数未在包含的 header 文件中指定?然而,似乎 header 的位置正确?
同样的问题出现在 CGAL 存储库附带的示例中。
我的设置是 Ubuntu 15.10、GCC 5.2.1、CMake 3.2.2,我使用 Ubuntu 存储库中的 CGAL 4.6 和编译的 CGAL 4.8-beta 产生了这个错误来自 Github 存储库。
对于它的价值,离群值 removal-example 以及 input/output-examples 编译和执行正确。
此时我感觉有点卡住了,希望得到任何帮助。
查看了 git 中的 <CGAL/jet_smooth_point_set.h>
,位于
我发现在第 320 行定义的最后两个参数为默认值的 5 参数重载,
template <typename Concurrency_tag,
typename InputIterator>
void jet_smooth_point_set(
InputIterator first, ///< iterator over the first input point
InputIterator beyond, ///< past-the-end iterator
unsigned int k, ///< number of neighbors.
const unsigned int degree_fitting = 2,
const unsigned int degree_monge = 2)
在示例代码中使用,在第 263 行被以下 #ifdef
包围:
#if defined(CGAL_EIGEN3_ENABLED) || defined(CGAL_LAPACK_ENABLED)
由此我得出结论,CGAL是在没有上述两个库Eigen3和LAPACK的情况下构建的。尝试重建 CGAL 并支持其中任何一个(注意 #ifdef
中的 ||
条件运算符)。为此,请安装相应的软件包以及 devel
软件包(我是 RedHat 用户,所以不知道 Ubuntu 如何拆分 dev 和 non-dev 软件包)。您希望为这些库安装 headers 以针对它们编译 CGAl。然后,re-run cmake,确保它找到库(调用 ccmake
或密切观察 cmake 配置输出,例如 "found Eigen3")并重建 CGAL。
我目前正在进行一个项目,在该项目中,使用一些 CGAL 算法进行点集处理将非常有利。
除其他外,我需要获得射流平滑算法 运行 - 示例如下: http://doc.cgal.org/latest/Point_set_processing_3/
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/jet_smooth_point_set.h>
#include <vector>
// types
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef Kernel::Point_3 Point;
int main(void)
{
// generate point set
std::vector<Point> points;
points.push_back(Point( 0.0, 0.0, 0.001));
points.push_back(Point(-0.1,-0.1, 0.002));
points.push_back(Point(-0.1,-0.2, 0.001));
points.push_back(Point(-0.1, 0.1, 0.002));
points.push_back(Point( 0.1,-0.1, 0.000));
points.push_back(Point( 0.1, 0.2, 0.001));
points.push_back(Point( 0.2, 0.0, 0.002));
points.push_back(Point( 0.2, 0.1, 0.000));
points.push_back(Point( 0.0,-0.1, 0.001));
// Smoothing.
const unsigned int nb_neighbors = 8; // default is 24 for real-life point sets
CGAL::jet_smooth_point_set(points.begin(), points.end(), nb_neighbors);
return EXIT_SUCCESS;
}
编译时(使用 CMake),我遇到了以下错误:
error: no matching function for call to ‘jet_smooth_point_set(std::vector<CGAL::Point_3<CGAL::Epick> >::iterator, std::vector<CGAL::Point_3<CGAL::Epick> >::iterator, const unsigned int&)’
CGAL::jet_smooth_point_set(points.begin(), points.end(), nb_neighbors);
jet_smooth_point_set.h:177:1: note: candidate: template<class Concurrency_tag, class InputIterator, class PointPMap, class Kernel, class SvdTraits> void CGAL::jet_smooth_point_set(InputIterator, InputIterator, PointPMap, unsigned int, const Kernel&, unsigned int, unsigned int)
note: candidate expects 7 arguments, 3 provided
CGAL::jet_smooth_point_set(points.begin(), points.end(), nb_neighbors);
该错误似乎暗示函数未在包含的 header 文件中指定?然而,似乎 header 的位置正确?
同样的问题出现在 CGAL 存储库附带的示例中。
我的设置是 Ubuntu 15.10、GCC 5.2.1、CMake 3.2.2,我使用 Ubuntu 存储库中的 CGAL 4.6 和编译的 CGAL 4.8-beta 产生了这个错误来自 Github 存储库。
对于它的价值,离群值 removal-example 以及 input/output-examples 编译和执行正确。
此时我感觉有点卡住了,希望得到任何帮助。
查看了 git 中的 <CGAL/jet_smooth_point_set.h>
,位于
我发现在第 320 行定义的最后两个参数为默认值的 5 参数重载,
template <typename Concurrency_tag,
typename InputIterator>
void jet_smooth_point_set(
InputIterator first, ///< iterator over the first input point
InputIterator beyond, ///< past-the-end iterator
unsigned int k, ///< number of neighbors.
const unsigned int degree_fitting = 2,
const unsigned int degree_monge = 2)
在示例代码中使用,在第 263 行被以下 #ifdef
包围:
#if defined(CGAL_EIGEN3_ENABLED) || defined(CGAL_LAPACK_ENABLED)
由此我得出结论,CGAL是在没有上述两个库Eigen3和LAPACK的情况下构建的。尝试重建 CGAL 并支持其中任何一个(注意 #ifdef
中的 ||
条件运算符)。为此,请安装相应的软件包以及 devel
软件包(我是 RedHat 用户,所以不知道 Ubuntu 如何拆分 dev 和 non-dev 软件包)。您希望为这些库安装 headers 以针对它们编译 CGAl。然后,re-run cmake,确保它找到库(调用 ccmake
或密切观察 cmake 配置输出,例如 "found Eigen3")并重建 CGAL。