diff --git a/src/db/db/dbRecursiveShapeIterator.cc b/src/db/db/dbRecursiveShapeIterator.cc index 7cb884550..075752113 100644 --- a/src/db/db/dbRecursiveShapeIterator.cc +++ b/src/db/db/dbRecursiveShapeIterator.cc @@ -593,6 +593,8 @@ RecursiveShapeIterator::bbox () const } } + box = box.transformed (m_global_trans); + if (m_region != box_type::world ()) { box &= m_region; } diff --git a/src/db/unit_tests/dbRecursiveShapeIteratorTests.cc b/src/db/unit_tests/dbRecursiveShapeIteratorTests.cc index 2f5577c58..cd9829ce7 100644 --- a/src/db/unit_tests/dbRecursiveShapeIteratorTests.cc +++ b/src/db/unit_tests/dbRecursiveShapeIteratorTests.cc @@ -107,6 +107,16 @@ TEST(1) std::string x; + db::RecursiveShapeIterator i0s (g, c0, 0); + x = collect(i0s, g); + EXPECT_EQ (x, "[$1](0,100;1000,1200)/[$2](0,100;1000,1200)/[$3](100,0;1100,1100)/[$4](1200,0;2200,1100)/[$4](-1200,0;-100,1000)"); + EXPECT_EQ (i0s.bbox ().to_string (), "(-1200,0;2200,1200)"); + + i0s.set_global_trans (db::ICplxTrans (2.0)); + x = collect(i0s, g); + EXPECT_EQ (x, "[$1](0,200;2000,2400)/[$2](0,200;2000,2400)/[$3](200,0;2200,2200)/[$4](2400,0;4400,2200)/[$4](-2400,0;-200,2000)"); + EXPECT_EQ (i0s.bbox ().to_string (), "(-2400,0;4400,2400)"); + db::RecursiveShapeIterator i1 (g, c0, 0, db::Box (0, 0, 100, 100)); x = collect(i1, g); EXPECT_EQ (x, "[$1](0,100;1000,1200)/[$2](0,100;1000,1200)/[$3](100,0;1100,1100)"); diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index b1923f9cc..55627e7a9 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -1188,3 +1188,8 @@ TEST(32d_globalTransformationWithClip) run_test (_this, "32", true); } +TEST(33_globalTransformationWithTiles) +{ + run_test (_this, "33", true); +} + diff --git a/testdata/drc/drcSimpleTests_33.drc b/testdata/drc/drcSimpleTests_33.drc new file mode 100644 index 000000000..3e16fbb64 --- /dev/null +++ b/testdata/drc/drcSimpleTests_33.drc @@ -0,0 +1,34 @@ + +source $drc_test_source +target $drc_test_target + +tiles(10.um) + +global_transform(magnify(2.0), shift(10.um, 20.um)) + +# The actual DRC test + +l1 = input(1, 0) +l2 = input(2, 0) + +l1.output(1, 0) +l2.output(2, 0) + +l1.merged.output(10, 0) +l1.sized(100.nm).output(11, 0) +l2.sized(100.nm).output(12, 0) + +# reset +global_transform + +l1 = input(1, 0) +l2 = input(2, 0) + + +l1.output(101, 0) +l2.output(102, 0) + +l1.merged.output(110, 0) +l1.sized(100.nm).output(111, 0) +l2.sized(100.nm).output(112, 0) + diff --git a/testdata/drc/drcSimpleTests_33.gds b/testdata/drc/drcSimpleTests_33.gds new file mode 100644 index 000000000..735cbfe7c Binary files /dev/null and b/testdata/drc/drcSimpleTests_33.gds differ diff --git a/testdata/drc/drcSimpleTests_au33d.gds b/testdata/drc/drcSimpleTests_au33d.gds new file mode 100644 index 000000000..f3023fae4 Binary files /dev/null and b/testdata/drc/drcSimpleTests_au33d.gds differ