From 220c1b714a4f3caea133616cf143fc92d2661e7d Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 19 Jan 2023 22:20:07 +0100 Subject: [PATCH] WIP: support for 'flatten' with properties --- src/db/db/dbDeepRegion.cc | 7 ++++- src/db/unit_tests/dbDeepRegionTests.cc | 40 +++++++++++++++++++++++++ testdata/algo/deep_region_au45.gds | Bin 0 -> 2192 bytes 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 testdata/algo/deep_region_au45.gds diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index 884250907..72317757b 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -352,11 +352,16 @@ flatten_layer (db::DeepLayer &deep_layer) 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) { if (iter->is_polygon ()) { db::Polygon poly; iter->polygon (poly); - flat_shapes.insert (db::PolygonRef (poly.transformed (iter.trans ()), layout.shape_repository ())); + if (! iter->prop_id ()) { + flat_shapes.insert (db::PolygonRef (poly.transformed (iter.trans ()), layout.shape_repository ())); + } else { + flat_shapes.insert (db::PolygonRefWithProperties (db::PolygonRef (poly.transformed (iter.trans ()), layout.shape_repository ()), iter->prop_id ())); + } } } diff --git a/src/db/unit_tests/dbDeepRegionTests.cc b/src/db/unit_tests/dbDeepRegionTests.cc index 5e2de4973..6cf0658d5 100644 --- a/src/db/unit_tests/dbDeepRegionTests.cc +++ b/src/db/unit_tests/dbDeepRegionTests.cc @@ -2444,6 +2444,46 @@ TEST(44_SizeWithProperties) db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au44.gds"); } +TEST(45_FlattenWithProperties) +{ + db::Layout ly; + { + std::string fn (tl::testdata ()); + fn += "/algo/deep_region_42.gds"; + tl::InputStream stream (fn); + db::Reader reader (stream); + reader.read (ly); + } + + db::cell_index_type top_cell_index = *ly.begin_top_down (); + db::Cell &top_cell = ly.cell (top_cell_index); + + db::DeepShapeStore dss; + + unsigned int l1 = ly.get_layer (db::LayerProperties (1, 0)); + unsigned int l2 = ly.get_layer (db::LayerProperties (2, 0)); + + db::RecursiveShapeIterator si1 (ly, top_cell, l1); + si1.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); + db::Region r1 (si1, dss); + + db::RecursiveShapeIterator si2 (ly, top_cell, l2); + si2.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); + db::Region r2 (si2, dss); + + db::Layout target; + unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (1, 0)), r1); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (2, 0)), r2); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (10, 0)), r1.flatten ()); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (11, 0)), r2.flatten ()); + + CHECKPOINT(); + db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au45.gds"); +} + TEST(100_Integration) { db::Layout ly; diff --git a/testdata/algo/deep_region_au45.gds b/testdata/algo/deep_region_au45.gds new file mode 100644 index 0000000000000000000000000000000000000000..659325c025334e47eb16adda76ff7467d0dbcb24 GIT binary patch literal 2192 zcmcJQKTK0m6vn^4zCNB%p!^rC+JqRZ5E0S@Oo$1DL1Pmg7zkl-WOQ&~aBy%jad0%z zfx$!v1_uWR1}Ed-;K1PEz+mFy;Nak(KEHEszt>l!R0m1OuQ|Er+;hM4-TM$B2-Z-} z1zn$!!w^O>h)VW1;vlMDT?U5ph09C#=dZna_Vv=rtC{V`>#Hai+UG@4v;>4P5cLME z9rXnOrb~ICXBCKlc=j&>Bm01;I2jJK$v>yoY-wraWdPB@)zwa@gtzL={dFs^zN`$gH}&aAYNCrPr9B)|5I zK;ff5vly_?(mO!xy~4gOgD9$Wk;tw!JNCKV^szGvsXCS5qv1#uLu zUZ)IUH+?W@j)*35^g*#)SY9XXuV^}szvVo?`I?8U<;mQiU(28KTP-t@zuZhJ@2O1) z7|(42XFfGKavYd_LeDj*b>tssi@kSS<~`26N1wA_a)vy`xrpU^!1;?5q(QACJJohG zFbxL2do3*2YKe-IX{`gk?#}w!?uE_KXnr)Wh>DY0U$^AjJ*qBx&t15~T04NKIC)t9 z|Cm8bZ}wK?sj<=SsA(iBPX3ineINKJeWBmU+8Q;w)uiHNyIMV2&F!9;FN`N&c+Et` z$*g9X{3Q9g0!&str#9SufT;Ln_0W8$x$R+E80AS(o)oo?OwXn}9edwrdh?!?2QBv> zy{THRPu_FqOJo1G*GshCkKOcVFq(fG>(f3D_+GW^_Kpm3mbqz9d&}(I6$f9_CwBqS z&N0CrMCFm4_Hy^tYIViFW@*!ZH$=tBv{oB^ohJ58JpI&v6FFmdX7Oyve>+62Bh%VP zX%g1`yo?Ln!`>Ouy@mUYH<7IE@>^DG(&pUA@3fcG#O7r=#yR*oh>DYGEos8