mirror of https://github.com/KLayout/klayout.git
Fixed #277 (min_coherence not recognized by region size)
This commit is contained in:
parent
f59e49d678
commit
303cda6981
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -160,6 +160,11 @@ void DeepRegion::merged_semantics_changed ()
|
|||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
void DeepRegion::min_coherence_changed ()
|
||||
{
|
||||
set_is_merged (false);
|
||||
}
|
||||
|
||||
RegionIteratorDelegate *
|
||||
DeepRegion::begin () const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -220,6 +220,7 @@ public:
|
|||
|
||||
protected:
|
||||
virtual void merged_semantics_changed ();
|
||||
virtual void min_coherence_changed ();
|
||||
void set_is_merged (bool f);
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ public:
|
|||
|
||||
protected:
|
||||
virtual void merged_semantics_changed ();
|
||||
virtual void min_coherence_changed ();
|
||||
|
||||
private:
|
||||
OriginalLayerRegion &operator= (const OriginalLayerRegion &other);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -319,6 +319,7 @@ protected:
|
|||
}
|
||||
|
||||
virtual void merged_semantics_changed () { }
|
||||
virtual void min_coherence_changed () { }
|
||||
|
||||
private:
|
||||
bool m_merged_semantics;
|
||||
|
|
|
|||
|
|
@ -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 (), "");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 (), "");
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue