diff --git a/src/db/db/dbFlatRegion.cc b/src/db/db/dbFlatRegion.cc index 307984b9d..e512258b6 100644 --- a/src/db/db/dbFlatRegion.cc +++ b/src/db/db/dbFlatRegion.cc @@ -201,6 +201,7 @@ RegionDelegate *FlatRegion::filter_in_place (const PolygonFilterBase &filter) poly_layer_wp.erase (pw_wp, poly_layer_wp.end ()); mp_merged_polygons->clear (); + invalidate_cache (); m_is_merged = filter.requires_raw_input () ? false : merged_semantics (); return this; @@ -230,6 +231,7 @@ RegionDelegate *FlatRegion::process_in_place (const PolygonProcessorBase &filter poly_layer_wp.swap (out_wp); mp_merged_polygons->clear (); + invalidate_cache (); m_is_merged = filter.result_is_merged () && merged_semantics (); if (filter.result_must_not_be_merged ()) { diff --git a/src/db/unit_tests/dbAsIfFlatRegionTests.cc b/src/db/unit_tests/dbAsIfFlatRegionTests.cc index 9b0074271..ce9845813 100644 --- a/src/db/unit_tests/dbAsIfFlatRegionTests.cc +++ b/src/db/unit_tests/dbAsIfFlatRegionTests.cc @@ -2022,3 +2022,45 @@ TEST(44_SizeWithProperties) db::compare_layouts (_this, target, tl::testdata () + "/algo/flat_region_au44.gds"); } +TEST(100_Issue1275) +{ + db::Point pts[] = { + db::Point (-21983, -43808), + db::Point (-37841, 16636), + db::Point (-20484, 35228), + db::Point (30428, 41627), + db::Point (38312, 28960), + db::Point (-7811, -37922) + }; + + db::Polygon polygon; + polygon.assign_hull (&pts[0], &pts[sizeof(pts) / sizeof(pts[0])]); + + db::Region region; + + region.insert (polygon); + region.smooth (100, false); + + EXPECT_EQ (region.sized (100).to_string (), "(-22037,-43939;-22054,-43930;-37952,16664;-20532,35323;30479,41734;38432,28957;-7745,-38003)"); + + region = db::Region (); + region.insert (polygon); + region = region.smoothed (100, false); + + EXPECT_EQ (region.sized (100).to_string (), "(-22037,-43939;-22054,-43930;-37952,16664;-20532,35323;30479,41734;38432,28957;-7745,-38003)"); + + db::RegionAreaFilter rf (0, 10000000000, false); + + region = db::Region (); + region.insert (polygon); + region.filter (rf); + + EXPECT_EQ (region.sized (100).to_string (), "(-22037,-43939;-22054,-43930;-37952,16664;-20532,35323;30479,41734;38432,28957;-7745,-38003)"); + + region = db::Region (); + region.insert (polygon); + region = region.filtered (rf); + + EXPECT_EQ (region.sized (100).to_string (), "(-22037,-43939;-22054,-43930;-37952,16664;-20532,35323;30479,41734;38432,28957;-7745,-38003)"); +} +