diff --git a/src/db/db/dbDeepEdgePairs.cc b/src/db/db/dbDeepEdgePairs.cc index 12d89df30..a0a53cf8f 100644 --- a/src/db/db/dbDeepEdgePairs.cc +++ b/src/db/db/dbDeepEdgePairs.cc @@ -173,9 +173,9 @@ static void transform_deep_layer (db::DeepLayer &deep_layer, const Trans &t) db::Cell &top_cell = layout.cell (*layout.begin_top_down ()); - db::Shapes flat_shapes; + db::Shapes flat_shapes (layout.is_editable ()); for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer.layer ()); !iter.at_end (); ++iter) { - flat_shapes.insert (iter->polygon ().transformed (t)); + flat_shapes.insert (iter->edge_pair ().transformed (iter.trans ()).transformed (t)); } layout.clear_layer (deep_layer.layer ()); @@ -208,9 +208,9 @@ void DeepEdgePairs::flatten () db::Cell &top_cell = layout.cell (*layout.begin_top_down ()); - db::Shapes flat_shapes; + db::Shapes flat_shapes (layout.is_editable ()); for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer ().layer ()); !iter.at_end (); ++iter) { - flat_shapes.insert (iter->polygon ()); + flat_shapes.insert (iter->edge_pair ().transformed (iter.trans ())); } layout.clear_layer (deep_layer ().layer ()); diff --git a/src/db/db/dbDeepEdges.cc b/src/db/db/dbDeepEdges.cc index b2a299a9f..d93bef028 100644 --- a/src/db/db/dbDeepEdges.cc +++ b/src/db/db/dbDeepEdges.cc @@ -233,9 +233,9 @@ static void transform_deep_layer (db::DeepLayer &deep_layer, const Trans &t) db::Cell &top_cell = layout.cell (*layout.begin_top_down ()); - db::Shapes flat_shapes; + db::Shapes flat_shapes (layout.is_editable ()); for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer.layer ()); !iter.at_end (); ++iter) { - flat_shapes.insert (iter->polygon ().transformed (t)); + flat_shapes.insert (iter->edge ().transformed (iter.trans ()).transformed (t)); } layout.clear_layer (deep_layer.layer ()); @@ -268,9 +268,9 @@ void DeepEdges::flatten () db::Cell &top_cell = layout.cell (*layout.begin_top_down ()); - db::Shapes flat_shapes; + db::Shapes flat_shapes (layout.is_editable ()); for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer ().layer ()); !iter.at_end (); ++iter) { - flat_shapes.insert (iter->polygon ()); + flat_shapes.insert (iter->edge ().transformed (iter.trans ())); } layout.clear_layer (deep_layer ().layer ()); diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index 2d6aa848d..f126e08fd 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -242,9 +242,11 @@ static void transform_deep_layer (db::DeepLayer &deep_layer, const Trans &t) db::Cell &top_cell = layout.cell (*layout.begin_top_down ()); - db::Shapes flat_shapes; + db::Shapes flat_shapes (layout.is_editable ()); for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer.layer ()); !iter.at_end (); ++iter) { - flat_shapes.insert (iter->polygon ().transformed (t)); + db::Polygon poly; + iter->polygon (poly); + flat_shapes.insert (poly.transformed (iter.trans ()).transformed (t)); } layout.clear_layer (deep_layer.layer ()); @@ -277,9 +279,11 @@ void DeepRegion::flatten () db::Cell &top_cell = layout.cell (*layout.begin_top_down ()); - db::Shapes flat_shapes; + db::Shapes flat_shapes (layout.is_editable ()); for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer ().layer ()); !iter.at_end (); ++iter) { - flat_shapes.insert (iter->polygon ()); + db::Polygon poly; + iter->polygon (poly); + flat_shapes.insert (poly.transformed (iter.trans ())); } layout.clear_layer (deep_layer ().layer ()); diff --git a/src/db/db/dbDeepTexts.cc b/src/db/db/dbDeepTexts.cc index b46814961..85796f48b 100644 --- a/src/db/db/dbDeepTexts.cc +++ b/src/db/db/dbDeepTexts.cc @@ -193,9 +193,11 @@ static void transform_deep_layer (db::DeepLayer &deep_layer, const Trans &t) db::Cell &top_cell = layout.cell (*layout.begin_top_down ()); - db::Shapes flat_shapes; + db::Shapes flat_shapes (layout.is_editable ()); for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer.layer ()); !iter.at_end (); ++iter) { - flat_shapes.insert (iter->polygon ().transformed (t)); + db::Text text; + iter->text (text); + flat_shapes.insert (text.transformed (iter.trans ()).transformed (t)); } layout.clear_layer (deep_layer.layer ()); @@ -228,9 +230,11 @@ void DeepTexts::flatten () db::Cell &top_cell = layout.cell (*layout.begin_top_down ()); - db::Shapes flat_shapes; + db::Shapes flat_shapes (layout.is_editable ()); for (db::RecursiveShapeIterator iter (layout, top_cell, deep_layer ().layer ()); !iter.at_end (); ++iter) { - flat_shapes.insert (iter->polygon ()); + db::Text text; + iter->text (text); + flat_shapes.insert (db::TextRef (text.transformed (iter.trans ()), layout.shape_repository ())); } layout.clear_layer (deep_layer ().layer ()); diff --git a/src/db/db/dbFlatRegion.cc b/src/db/db/dbFlatRegion.cc index 71e240cd3..516fd8a31 100644 --- a/src/db/db/dbFlatRegion.cc +++ b/src/db/db/dbFlatRegion.cc @@ -413,9 +413,14 @@ void FlatRegion::do_insert (const db::Polygon &polygon) { if (polygon.holes () > 0 || polygon.vertices () > 0) { + + bool is_box = (empty () && polygon.is_box ()); + mp_polygons->insert (polygon); - m_is_merged = false; + set_is_merged (is_box); + invalidate_cache (); + } } diff --git a/src/db/db/dbMutableTexts.cc b/src/db/db/dbMutableTexts.cc index 8556fe4db..d8789e591 100644 --- a/src/db/db/dbMutableTexts.cc +++ b/src/db/db/dbMutableTexts.cc @@ -50,7 +50,9 @@ void MutableTexts::insert (const db::Shape &shape) { if (shape.is_text ()) { - insert (shape.text ()); + db::Text text; + shape.text (text); + insert (text); } } diff --git a/src/db/unit_tests/dbEdgesTests.cc b/src/db/unit_tests/dbEdgesTests.cc index 15740ccde..543b60704 100644 --- a/src/db/unit_tests/dbEdgesTests.cc +++ b/src/db/unit_tests/dbEdgesTests.cc @@ -55,7 +55,7 @@ TEST(1) EXPECT_EQ (r.bbox ().to_string (), "(0,0;100,200)"); EXPECT_EQ (r.transformed (db::Trans (db::Vector (1, 2))).bbox ().to_string (), "(1,2;101,202)"); EXPECT_EQ (r.empty (), false); - EXPECT_EQ (r.is_merged (), true); + EXPECT_EQ (r.is_merged (), false); EXPECT_EQ (r.begin ().at_end (), false); db::Edges r1 = r; diff --git a/testdata/drc/drcSimpleTests_au4.gds b/testdata/drc/drcSimpleTests_au4.gds index 843f2b33c..6920b9a33 100644 Binary files a/testdata/drc/drcSimpleTests_au4.gds and b/testdata/drc/drcSimpleTests_au4.gds differ diff --git a/testdata/ruby/dbEdgePairsTest.rb b/testdata/ruby/dbEdgePairsTest.rb index 021dbb358..5a27c58fa 100644 --- a/testdata/ruby/dbEdgePairsTest.rb +++ b/testdata/ruby/dbEdgePairsTest.rb @@ -179,12 +179,11 @@ class DBEdgePairs_TestClass < TestBase assert_equal(r.is_deep?, true) r.flatten - assert_equal(r.has_valid_edge_pairs?, true) - assert_equal(r[1].to_s, "(0,101;2,103)/(10,111;12,113)") - assert_equal(r[100].inspect, "nil") + assert_equal(r.has_valid_edge_pairs?, false) + assert_equal(r.to_s, "(0,1;2,3)/(10,11;12,13);(0,101;2,103)/(10,111;12,113);(200,101;202,103)/(210,111;212,113)") assert_equal(r.bbox.to_s, "(0,1;212,113)") - assert_equal(r.is_deep?, false) + assert_equal(r.is_deep?, true) end diff --git a/testdata/ruby/dbEdgesTest.rb b/testdata/ruby/dbEdgesTest.rb index 4c7f29c17..ffc0e0d36 100644 --- a/testdata/ruby/dbEdgesTest.rb +++ b/testdata/ruby/dbEdgesTest.rb @@ -81,7 +81,7 @@ class DBEdges_TestClass < TestBase assert_equal(r.count, 4) assert_equal(r.hier_count, 4) assert_equal(r.bbox.to_s, "(10,20;100,200)") - assert_equal(r.is_merged?, true) + assert_equal(r.is_merged?, false) assert_equal(r.moved(RBA::Point::new(10, 20)).bbox.to_s, "(20,40;110,220)") assert_equal(r.moved(10, 20).bbox.to_s, "(20,40;110,220)") @@ -615,12 +615,11 @@ class DBEdges_TestClass < TestBase r.flatten - assert_equal(r.is_deep?, false) + assert_equal(r.is_deep?, true) assert_equal(r.count, 12) assert_equal(r.hier_count, 12) - assert_equal(r[1].to_s, "(-10,20;10,20)") - assert_equal(r[100].to_s, "") + assert_equal(r.to_s, "(-10,-20;-10,20);(-10,20;10,20);(10,20;10,-20);(10,-20;-10,-20);(-10,80;-10,120);(-10,120;10,120);(10,120;10,80);(10,80;-10,80);(190,80;190,120);(190,120;210,120)...") end diff --git a/testdata/ruby/dbRegionTest.rb b/testdata/ruby/dbRegionTest.rb index 79985b676..144d5cffd 100644 --- a/testdata/ruby/dbRegionTest.rb +++ b/testdata/ruby/dbRegionTest.rb @@ -95,7 +95,7 @@ class DBRegion_TestClass < TestBase assert_equal(r.count, 1) assert_equal(r.hier_count, 1) assert_equal(r.bbox.to_s, "(10,20;100,200)") - assert_equal(r.is_merged?, false) + assert_equal(r.is_merged?, true) r = RBA::Region::new(RBA::SimplePolygon::new(RBA::Box::new(10, 20, 100, 200))) assert_equal(r.to_s, "(10,20;10,200;100,200;100,20)") @@ -107,7 +107,7 @@ class DBRegion_TestClass < TestBase assert_equal(r.area, 90*180) assert_equal(r.perimeter, 2*90+2*180) assert_equal(r.perimeter(RBA::Box::new(0, 0, 50, 50)), 30+40) - assert_equal(r.is_merged?, false) + assert_equal(r.is_merged?, true) r = RBA::Region::new(RBA::Path::new([ RBA::Point::new(0, 0), RBA::Point::new(100, 0) ], 20)) assert_equal(r.to_s, "(0,-10;0,10;100,10;100,-10)") @@ -116,7 +116,7 @@ class DBRegion_TestClass < TestBase assert_equal(r.count, 1) assert_equal(r.hier_count, 1) assert_equal(r.bbox.to_s, "(0,-10;100,10)") - assert_equal(r.is_merged?, false) + assert_equal(r.is_merged?, true) r = RBA::Region::new( [ RBA::Polygon::new(RBA::Box::new(10, 20, 100, 200)), @@ -1002,7 +1002,7 @@ class DBRegion_TestClass < TestBase assert_equal(RBA::Region::new(target.cell("TRANS").shapes(target_li)).to_s, "") r.flatten - assert_equal(r.is_deep?, false) + assert_equal(r.is_deep?, true) assert_equal(r.area, 53120000) # force destroy, so the unit tests pass on the next iteration diff --git a/testdata/ruby/dbTextsTest.rb b/testdata/ruby/dbTextsTest.rb index bff5640d2..50d7fb8e2 100644 --- a/testdata/ruby/dbTextsTest.rb +++ b/testdata/ruby/dbTextsTest.rb @@ -186,12 +186,10 @@ class DBTexts_TestClass < TestBase assert_equal(r.is_deep?, true) r.flatten - assert_equal(r.has_valid_texts?, true) - assert_equal(r[1].to_s, "('abc',r0 100,-100)") - assert_equal(r[100].inspect, "nil") + assert_equal(r.to_s, "('abc',r0 100,-200);('abc',r0 100,-100);('abc',r0 300,-100)") assert_equal(r.bbox.to_s, "(100,-200;300,-100)") - assert_equal(r.is_deep?, false) + assert_equal(r.is_deep?, true) end