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
|
||||
}
|
||||
|
||||
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 ()) {
|
||||
|
||||
db::Cell &top_cell = layout.cell (*layout.begin_top_down ());
|
||||
|
||||
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 ()));
|
||||
}
|
||||
|
||||
layout.clear_layer (deep_layer ().layer ());
|
||||
top_cell.shapes (deep_layer ().layer ()).swap (flat_shapes);
|
||||
layout.clear_layer (deep_layer.layer ());
|
||||
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 *
|
||||
DeepEdges::begin () const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -284,26 +284,37 @@ void DeepRegion::reserve (size_t)
|
|||
// 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 ()) {
|
||||
|
||||
db::Cell &top_cell = layout.cell (*layout.begin_top_down ());
|
||||
|
||||
db::Shapes flat_shapes (layout.is_editable ());
|
||||
for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer ().layer ()); !iter.at_end (); ++iter) {
|
||||
db::Polygon poly;
|
||||
iter->polygon (poly);
|
||||
flat_shapes.insert (poly.transformed (iter.trans ()));
|
||||
for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer.layer ()); !iter.at_end (); ++iter) {
|
||||
if (iter->is_polygon ()) {
|
||||
db::Polygon poly;
|
||||
iter->polygon (poly);
|
||||
flat_shapes.insert (db::PolygonRef (poly.transformed (iter.trans ()), layout.shape_repository ()));
|
||||
}
|
||||
}
|
||||
|
||||
layout.clear_layer (deep_layer ().layer ());
|
||||
top_cell.shapes (deep_layer ().layer ()).swap (flat_shapes);
|
||||
layout.clear_layer (deep_layer.layer ());
|
||||
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 *
|
||||
DeepRegion::begin () const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -85,6 +85,6 @@ expect_count(l1, 15, 15, "l1 after flatten")
|
|||
r = l1.space(0.5)
|
||||
r.output(1011, 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