mirror of https://github.com/KLayout/klayout.git
DeepRegion performance: take fast path for DeepRegion::edges if merged polygons are available.
This commit is contained in:
parent
5db45d7aee
commit
5597ee8960
|
|
@ -555,6 +555,12 @@ DeepRegion::merged_deep_layer () const
|
|||
}
|
||||
}
|
||||
|
||||
bool
|
||||
DeepRegion::merged_polygons_available () const
|
||||
{
|
||||
return m_is_merged || m_merged_polygons_valid;
|
||||
}
|
||||
|
||||
void
|
||||
DeepRegion::ensure_merged_polygons_valid () const
|
||||
{
|
||||
|
|
@ -1169,7 +1175,7 @@ public:
|
|||
EdgesDelegate *
|
||||
DeepRegion::edges (const EdgeFilterBase *filter) const
|
||||
{
|
||||
if (! filter && merged_semantics ()) {
|
||||
if (! filter && merged_semantics () && ! merged_polygons_available ()) {
|
||||
|
||||
// Hierarchical edge detector - no pre-merge required
|
||||
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ public:
|
|||
|
||||
void set_is_merged (bool f);
|
||||
|
||||
bool merged_polygons_available () const;
|
||||
const DeepLayer &merged_deep_layer () const;
|
||||
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -887,6 +887,11 @@ TEST(14_Interacting)
|
|||
db::Region r6r = r6;
|
||||
r6r.set_merged_semantics (false);
|
||||
|
||||
db::Edges r1e = r1.edges ();
|
||||
db::Edges r1ef = r1f.edges ();
|
||||
db::Edges r1er = r1r.edges ();
|
||||
r1er.set_merged_semantics (false);
|
||||
|
||||
{
|
||||
db::Layout target;
|
||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
||||
|
|
@ -957,11 +962,6 @@ TEST(14_Interacting)
|
|||
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au14a.gds");
|
||||
}
|
||||
|
||||
db::Edges r1e = r1.edges ();
|
||||
db::Edges r1ef = r1f.edges ();
|
||||
db::Edges r1er = r1r.edges ();
|
||||
r1er.set_merged_semantics (false);
|
||||
|
||||
{
|
||||
db::Layout target;
|
||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
||||
|
|
@ -1469,6 +1469,16 @@ TEST(25_Pull)
|
|||
db::Region r6r = r6;
|
||||
r6r.set_merged_semantics (false);
|
||||
|
||||
db::Edges r1e = r1.edges ();
|
||||
db::Edges r1ef = r1f.edges ();
|
||||
db::Edges r1er = r1r.edges ();
|
||||
r1er.set_merged_semantics (false);
|
||||
|
||||
db::Edges r6e = r6.edges ();
|
||||
db::Edges r6ef = r6f.edges ();
|
||||
db::Edges r6er = r6r.edges ();
|
||||
r6er.set_merged_semantics (false);
|
||||
|
||||
{
|
||||
db::Layout target;
|
||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
||||
|
|
@ -1507,16 +1517,6 @@ TEST(25_Pull)
|
|||
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au25a.gds");
|
||||
}
|
||||
|
||||
db::Edges r1e = r1.edges ();
|
||||
db::Edges r1ef = r1f.edges ();
|
||||
db::Edges r1er = r1r.edges ();
|
||||
r1er.set_merged_semantics (false);
|
||||
|
||||
db::Edges r6e = r6.edges ();
|
||||
db::Edges r6ef = r6f.edges ();
|
||||
db::Edges r6er = r6r.edges ();
|
||||
r6er.set_merged_semantics (false);
|
||||
|
||||
{
|
||||
db::Layout target;
|
||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
||||
|
|
|
|||
Loading…
Reference in New Issue