From cefc2eeddb7079e9a1c2fe2e5b74f4c31d0aa42b Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Mon, 29 Mar 2021 01:05:53 +0200 Subject: [PATCH] Bug fixes. --- src/db/db/dbDeepEdgePairs.cc | 8 ++++---- src/db/db/dbDeepEdges.cc | 8 ++++---- src/db/db/dbDeepRegion.cc | 12 ++++++++---- src/db/db/dbDeepTexts.cc | 12 ++++++++---- src/db/db/dbFlatRegion.cc | 7 ++++++- src/db/db/dbMutableTexts.cc | 4 +++- src/db/unit_tests/dbEdgesTests.cc | 2 +- testdata/drc/drcSimpleTests_au4.gds | Bin 10452 -> 10196 bytes testdata/ruby/dbEdgePairsTest.rb | 7 +++---- testdata/ruby/dbEdgesTest.rb | 7 +++---- testdata/ruby/dbRegionTest.rb | 8 ++++---- testdata/ruby/dbTextsTest.rb | 6 ++---- 12 files changed, 46 insertions(+), 35 deletions(-) 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 843f2b33cb1a804446a586af9e2e2ab5c092b3a2..6920b9a33203d8bff74f49374c7f3a9c6241fead 100644 GIT binary patch delta 346 zcmZ|JF-yZh7zW_4m*g&kflaS;@IAcC|SiXf4SQc*Gme};pTi<|Je=@49; z#ihT%*&*&ha2NaoenAJ94iE3~!uxUMae0)HBq7eJ-4N=N9O@9!2F3s1QU6Bs=}tDmCkbI0;pWKo8{yZ0zX5p&0MZPnr~s&{Kr5xFk?0A(0l Ag8%>k delta 716 zcmZ{gze^lZ5XZmn?d@*Bizl93^j7b=_p1pf=t2m>vN=QuIZh1+%7J9bKcKc2IRYuP zQ|2md78_F}MX<3+n^ID2W#f5RB#edm2=-n?KrSgk>WqO8Ll zQuJ#?k%odXr22ChidKGJ0uqs^^K9?Qi!UcXpDv!w`bV`Y%;>$oPqnisz0~ID&={t; zX43`p>mB!*s=h-vx}Lme?x|_K8z+CdMDL9`3Z}~BPr2mrxi$TUJh4PSj3PDCW%AN4 z2~nbB;gV&!)DjN)Gkljrv}xHCFoR5mjxC404C@?CzALgeH8^kND)c(*kjSx~b;;*w z=4`6+xmu`@m3OF_XPv`qvrwdSp;4mX)+4{5JyZZZjz@s;E5MlN?^*^PypoK4l=|@7 zZe1M(R0GgrO20o0e~$o