From 439b048117c289707e9af5e3e3aa77c0b07b1b20 Mon Sep 17 00:00:00 2001 From: vng Date: Sun, 24 Apr 2011 17:12:49 +0300 Subject: [PATCH] Fix area features generation in case of self-intersection polygons. --- generator/feature_sorter.cpp | 10 ++++++++++ geometry/geometry_tests/polygon_test.cpp | 3 +++ 2 files changed, 13 insertions(+) diff --git a/generator/feature_sorter.cpp b/generator/feature_sorter.cpp index c697714039..df2993aaa9 100644 --- a/generator/feature_sorter.cpp +++ b/generator/feature_sorter.cpp @@ -272,12 +272,21 @@ namespace feature size_t const count = points.size(); if (!m_trgInner || count > 15 + 2) { + // too many points for strip + m_trgInner = false; + return false; + } + + if (m2::robust::CheckPolygonSelfIntersections(points.begin(), points.end())) + { + // polygon has self-intersectios m_trgInner = false; return false; } CHECK ( m_buffer.m_innerTrg.empty(), () ); + // make CCW orientation for polygon if (!IsPolygonCCW(points.begin(), points.end())) { reverse(points.begin(), points.end()); @@ -289,6 +298,7 @@ namespace feature if (index == count) { + // can't find strip m_trgInner = false; return false; } diff --git a/geometry/geometry_tests/polygon_test.cpp b/geometry/geometry_tests/polygon_test.cpp index 196b1efd8d..27ad80a351 100644 --- a/geometry/geometry_tests/polygon_test.cpp +++ b/geometry/geometry_tests/polygon_test.cpp @@ -159,6 +159,8 @@ UNIT_TEST(IsPolygonCCW_DataSet) TestPolygonOrReverseCCW(arr, arr + ARRAY_SIZE(arr)); } +// This polygon has self-intersections. +/* UNIT_TEST(IsPolygonCCW_DataSet2) { P arr[] = { P(0.747119766424532, 61.4800033732131), P(0.747098308752385, 61.4800496413187), @@ -171,3 +173,4 @@ UNIT_TEST(IsPolygonCCW_DataSet2) TestPolygonOrReverseCCW(arr, arr + ARRAY_SIZE(arr)); } +*/