一些CGAL示例(例如Jet Smoothing和Normal Orientation)无法编译

时间:2016-02-03 23:26:51

标签: c++ cmake cgal

我目前正在开展一个项目,其中使用一些CGAL算法进行点集处理将非常有利。

除此之外,我需要运行喷射平滑算法 - 这里示例显示如下: http://doc.cgal.org/latest/Point_set_processing_3/

<Grid Name="Panel" Background="{TemplateBinding Background}">

编译时(使用CMake),我遇到以下错误:

#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;
}

该错误似乎暗示在包含的头文件中未指定该函数?但似乎标题已正确定位?

CGAL存储库附带的示例中出现了同样的问题。

我的设置是Ubuntu 15.10,GCC 5.2.1,CMake 3.2.2,我从Ubuntu存储库和从Github存储库编译的CGAL 4.8-beta中用CGAL 4.6产生了这个错误。

对于它的价值,异常值删除 - 示例以及输入/输出示例正确编译和执行。

我觉得有点卡在这一点,并会感激任何帮助。

1 个答案:

答案 0 :(得分:0)

查看位于

的git中的<CGAL/jet_smooth_point_set.h>

jet_smooth_point_set.h

我发现5参数重载,最后2个参数是默认值,在第320行定义,

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如何拆分开发包和非开发软件包)。您希望安装这些库的标头以针对它们编译CGAl。然后,重新运行cmake,确保它找到库(调用ccmake或密切观察cmake配置输出,例如“找到Eigen3”)并重建CGAL。