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
|
void
|
||||||
DeepRegion::ensure_merged_polygons_valid () const
|
DeepRegion::ensure_merged_polygons_valid () const
|
||||||
{
|
{
|
||||||
|
|
@ -1169,7 +1175,7 @@ public:
|
||||||
EdgesDelegate *
|
EdgesDelegate *
|
||||||
DeepRegion::edges (const EdgeFilterBase *filter) const
|
DeepRegion::edges (const EdgeFilterBase *filter) const
|
||||||
{
|
{
|
||||||
if (! filter && merged_semantics ()) {
|
if (! filter && merged_semantics () && ! merged_polygons_available ()) {
|
||||||
|
|
||||||
// Hierarchical edge detector - no pre-merge required
|
// Hierarchical edge detector - no pre-merge required
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,7 @@ public:
|
||||||
|
|
||||||
void set_is_merged (bool f);
|
void set_is_merged (bool f);
|
||||||
|
|
||||||
|
bool merged_polygons_available () const;
|
||||||
const DeepLayer &merged_deep_layer () const;
|
const DeepLayer &merged_deep_layer () const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
||||||
|
|
@ -887,6 +887,11 @@ TEST(14_Interacting)
|
||||||
db::Region r6r = r6;
|
db::Region r6r = r6;
|
||||||
r6r.set_merged_semantics (false);
|
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;
|
db::Layout target;
|
||||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
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::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;
|
db::Layout target;
|
||||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
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;
|
db::Region r6r = r6;
|
||||||
r6r.set_merged_semantics (false);
|
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;
|
db::Layout target;
|
||||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
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::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;
|
db::Layout target;
|
||||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue