构造Polygon_set_2时如何修复'CGAL :: Precondition_exception'

时间:2019-09-10 18:31:21

标签: cgal

我正在Visual Studio项目中使用CGAL库。 我正在尝试创建由带孔多边形组成的polygon_set_2。即使仅使用简单的多边形,在创建polygon_set_2时也会遇到异常。

Typedefs:

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 CGALPoint;
typedef CGAL::Polygon_2<K> CGALInnerPolygon;
typedef CGAL::Polygon_set_2<K> CGALMultiPolygon;

问题代码:

        CGALInnerPolygon cgalpoly;
        cgalpoly.push_back(CGALPoint(0, 0));
        cgalpoly.push_back(CGALPoint(1, 1));
        cgalpoly.push_back(CGALPoint(1, 0));

        CGALMultiPolygon multipolygon;
        multipolygon.insert(cgalpoly);

我在插入调用上遇到异常。异常的输出为:

在XXX.exe中的0x75112CF2处引发异常:Microsoft C ++异常:内存位置0x00191AF0处的CGAL :: Precondition_exception

1 个答案:

答案 0 :(得分:0)

这实际上是两件事的结合。首先,如 sloriot 所述,多边形点要逆时针旋转。为了在一般情况下解决此问题,添加了以下代码:

if (cgalpoly.is_clockwise_oriented())
{
    cgalpoly.reverse_orientation();
}

第二,Polygon_set_2必须使用精确的构造内核:

typedef CGAL::Exact_predicates_exact_constructions_kernel K;