mirror of https://github.com/KLayout/klayout.git
Bugfix: Region#flatten and Edges#flatten did not update the merged cache to flat and Region#flatten did not produce PolygonRefs
This commit is contained in:
parent
5ceeafc0ff
commit
eeaab8a417
|
|
@ -273,24 +273,33 @@ void DeepEdges::reserve (size_t)
|
||||||
// Not implemented for deep regions
|
// Not implemented for deep regions
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeepEdges::flatten ()
|
static
|
||||||
|
void flatten_layer (db::DeepLayer &deep_layer)
|
||||||
{
|
{
|
||||||
db::Layout &layout = deep_layer ().layout ();
|
db::Layout &layout = deep_layer.layout ();
|
||||||
if (layout.begin_top_down () != layout.end_top_down ()) {
|
if (layout.begin_top_down () != layout.end_top_down ()) {
|
||||||
|
|
||||||
db::Cell &top_cell = layout.cell (*layout.begin_top_down ());
|
db::Cell &top_cell = layout.cell (*layout.begin_top_down ());
|
||||||
|
|
||||||
db::Shapes flat_shapes (layout.is_editable ());
|
db::Shapes flat_shapes (layout.is_editable ());
|
||||||
for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer ().layer ()); !iter.at_end (); ++iter) {
|
for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer.layer ()); !iter.at_end (); ++iter) {
|
||||||
flat_shapes.insert (iter->edge ().transformed (iter.trans ()));
|
flat_shapes.insert (iter->edge ().transformed (iter.trans ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
layout.clear_layer (deep_layer ().layer ());
|
layout.clear_layer (deep_layer.layer ());
|
||||||
top_cell.shapes (deep_layer ().layer ()).swap (flat_shapes);
|
top_cell.shapes (deep_layer.layer ()).swap (flat_shapes);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeepEdges::flatten ()
|
||||||
|
{
|
||||||
|
flatten_layer (deep_layer ());
|
||||||
|
if (m_merged_edges_valid) {
|
||||||
|
flatten_layer (const_cast<db::DeepLayer &> (merged_deep_layer ()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EdgesIteratorDelegate *
|
EdgesIteratorDelegate *
|
||||||
DeepEdges::begin () const
|
DeepEdges::begin () const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -284,26 +284,37 @@ void DeepRegion::reserve (size_t)
|
||||||
// Not implemented for deep regions
|
// Not implemented for deep regions
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeepRegion::flatten ()
|
static void
|
||||||
|
flatten_layer (db::DeepLayer &deep_layer)
|
||||||
{
|
{
|
||||||
db::Layout &layout = deep_layer ().layout ();
|
db::Layout &layout = deep_layer.layout ();
|
||||||
if (layout.begin_top_down () != layout.end_top_down ()) {
|
if (layout.begin_top_down () != layout.end_top_down ()) {
|
||||||
|
|
||||||
db::Cell &top_cell = layout.cell (*layout.begin_top_down ());
|
db::Cell &top_cell = layout.cell (*layout.begin_top_down ());
|
||||||
|
|
||||||
db::Shapes flat_shapes (layout.is_editable ());
|
db::Shapes flat_shapes (layout.is_editable ());
|
||||||
for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer ().layer ()); !iter.at_end (); ++iter) {
|
for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer.layer ()); !iter.at_end (); ++iter) {
|
||||||
|
if (iter->is_polygon ()) {
|
||||||
db::Polygon poly;
|
db::Polygon poly;
|
||||||
iter->polygon (poly);
|
iter->polygon (poly);
|
||||||
flat_shapes.insert (poly.transformed (iter.trans ()));
|
flat_shapes.insert (db::PolygonRef (poly.transformed (iter.trans ()), layout.shape_repository ()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
layout.clear_layer (deep_layer ().layer ());
|
layout.clear_layer (deep_layer.layer ());
|
||||||
top_cell.shapes (deep_layer ().layer ()).swap (flat_shapes);
|
top_cell.shapes (deep_layer.layer ()).swap (flat_shapes);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeepRegion::flatten ()
|
||||||
|
{
|
||||||
|
flatten_layer (deep_layer ());
|
||||||
|
if (m_merged_polygons_valid) {
|
||||||
|
flatten_layer (const_cast<db::DeepLayer &> (merged_deep_layer ()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RegionIteratorDelegate *
|
RegionIteratorDelegate *
|
||||||
DeepRegion::begin () const
|
DeepRegion::begin () const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,6 @@ expect_count(l1, 15, 15, "l1 after flatten")
|
||||||
r = l1.space(0.5)
|
r = l1.space(0.5)
|
||||||
r.output(1011, 0)
|
r.output(1011, 0)
|
||||||
r.extents.output(1111, 0)
|
r.extents.output(1111, 0)
|
||||||
expect_count(r, 3, 1, "r on l1.flatten")
|
expect_count(r, 3, 3, "r on l1.flatten")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue