Merge pull request #283 from KLayout/issue-277

Fixed #277 (min_coherence not recognized by region size)
This commit is contained in:
Matthias Köfferlein 2019-06-18 18:44:28 +02:00 committed by GitHub
commit 782790fe2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 75 additions and 3 deletions

View File

@ -764,7 +764,7 @@ AsIfFlatRegion::sized (coord_type dx, coord_type dy, unsigned int mode) const
db::Box b = bbox ().enlarged (db::Vector (dx, dy));
return region_from_box (b);
} else if (! merged_semantics ()) {
} else if (! merged_semantics () || is_merged ()) {
// Generic case
std::auto_ptr<FlatRegion> new_region (new FlatRegion (false /*output isn't merged*/));
@ -801,7 +801,7 @@ AsIfFlatRegion::sized (coord_type dx, coord_type dy, unsigned int mode) const
db::ShapeGenerator pc (new_region->raw_polygons (), true /*clear*/);
db::PolygonGenerator pg2 (pc, false /*don't resolve holes*/, true /*min. coherence*/);
db::SizingPolygonFilter siz (pg2, dx, dy, mode);
db::PolygonGenerator pg (siz, false /*don't resolve holes*/, false /*min. coherence*/);
db::PolygonGenerator pg (siz, false /*don't resolve holes*/, min_coherence () /*min. coherence*/);
db::BooleanOp op (db::BooleanOp::Or);
ep.process (pg, op);

View File

@ -160,6 +160,11 @@ void DeepRegion::merged_semantics_changed ()
// .. nothing yet ..
}
void DeepRegion::min_coherence_changed ()
{
set_is_merged (false);
}
RegionIteratorDelegate *
DeepRegion::begin () const
{

View File

@ -220,6 +220,7 @@ public:
protected:
virtual void merged_semantics_changed ();
virtual void min_coherence_changed ();
void set_is_merged (bool f);
private:

View File

@ -94,6 +94,13 @@ void FlatRegion::merged_semantics_changed ()
m_merged_polygons_valid = false;
}
void FlatRegion::min_coherence_changed ()
{
m_is_merged = false;
m_merged_polygons.clear ();
m_merged_polygons_valid = false;
}
void FlatRegion::reserve (size_t n)
{
m_polygons.reserve (db::Polygon::tag (), n);

View File

@ -180,6 +180,7 @@ public:
protected:
virtual void merged_semantics_changed ();
virtual void min_coherence_changed ();
virtual Box compute_bbox () const;
void invalidate_cache ();
void set_is_merged (bool m);

View File

@ -151,6 +151,14 @@ OriginalLayerRegion::merged_semantics_changed ()
m_merged_polygons_valid = false;
}
void
OriginalLayerRegion::min_coherence_changed ()
{
m_is_merged = false;
m_merged_polygons.clear ();
m_merged_polygons_valid = false;
}
RegionIteratorDelegate *
OriginalLayerRegion::begin () const
{

View File

@ -72,6 +72,7 @@ public:
protected:
virtual void merged_semantics_changed ();
virtual void min_coherence_changed ();
private:
OriginalLayerRegion &operator= (const OriginalLayerRegion &other);

View File

@ -78,7 +78,10 @@ void RegionDelegate::set_base_verbosity (int vb)
void RegionDelegate::set_min_coherence (bool f)
{
m_merge_min_coherence = f;
if (f != m_merge_min_coherence) {
m_merge_min_coherence = f;
min_coherence_changed ();
}
}
void RegionDelegate::set_merged_semantics (bool f)

View File

@ -319,6 +319,7 @@ protected:
}
virtual void merged_semantics_changed () { }
virtual void min_coherence_changed () { }
private:
bool m_merged_semantics;

View File

@ -1406,3 +1406,30 @@ TEST(101_DeepFlatCollaboration)
db::compare_layouts (_this, target, tl::testsrc () + "/testdata/algo/deep_region_au101.gds");
}
TEST(issue_277)
{
db::Layout ly;
db::cell_index_type top_cell_index = ly.add_cell ("TOP");
db::Cell &top_cell = ly.cell (top_cell_index);
unsigned int l1 = ly.insert_layer ();
db::Shapes &s = top_cell.shapes (l1);
s.insert (db::Box (0, 0, 400, 400));
s.insert (db::Box (400, 400, 800, 800));
db::DeepShapeStore dss;
db::Region r (db::RecursiveShapeIterator (ly, top_cell, l1), dss);
EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), "");
r.set_min_coherence (true);
EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), "(399,399;399,401;401,401;401,399)");
r.merge ();
EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), "(399,399;399,401;401,401;401,399)");
r.set_min_coherence (false); // needs to merge again
EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), "");
}

View File

@ -1397,3 +1397,21 @@ TEST(issue_228)
EXPECT_EQ (r.selected_interacting (rr).to_string (), r.to_string ());
EXPECT_EQ (rr.selected_interacting (r).to_string (), rr.to_string ());
}
TEST(issue_277)
{
db::Region r;
r.insert (db::Box (0, 0, 400, 400));
r.insert (db::Box (400, 400, 800, 800));
EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), "");
r.set_min_coherence (true);
EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), "(399,399;399,401;401,401;401,399)");
r.merge ();
EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), "(399,399;399,401;401,401;401,399)");
r.set_min_coherence (false); // needs to merge again
EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), "");
}