mirror of
https://github.com/KLayout/klayout.git
synced 2026-08-29 09:20:45 +02:00
Global transformations for DRC and RecursiveShapeIterator
This commit is contained in:
Vendored
+57
@@ -0,0 +1,57 @@
|
||||
|
||||
source $drc_test_source
|
||||
target $drc_test_target
|
||||
|
||||
if $drc_test_deep
|
||||
deep
|
||||
end
|
||||
|
||||
def self_test(id, a, b)
|
||||
a == b || raise(id + ": self-test failed (" + a.inspect + " != " + b.inspect + ")")
|
||||
end
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r0 *1 0,0")
|
||||
|
||||
global_transform(magnify(2.0))
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r0 *2 0,0")
|
||||
|
||||
global_transform(magnify(2.0), rotate(90.0))
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r90 *2 0,0")
|
||||
|
||||
global_transform(mirror_x, mirror_y)
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r180 *1 0,0")
|
||||
|
||||
global_transform(magnify(2.0), shift(10.um, 20.um))
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r0 *2 10,20")
|
||||
|
||||
|
||||
# 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)
|
||||
|
||||
Vendored
BIN
Binary file not shown.
Vendored
+59
@@ -0,0 +1,59 @@
|
||||
|
||||
source $drc_test_source
|
||||
target $drc_test_target
|
||||
|
||||
clip(0.um, 0.um, 26.um, 45.um)
|
||||
|
||||
if $drc_test_deep
|
||||
deep
|
||||
end
|
||||
|
||||
def self_test(id, a, b)
|
||||
a == b || raise(id + ": self-test failed (" + a.inspect + " != " + b.inspect + ")")
|
||||
end
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r0 *1 0,0")
|
||||
|
||||
global_transform(magnify(2.0))
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r0 *2 0,0")
|
||||
|
||||
global_transform(magnify(2.0), rotate(90.0))
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r90 *2 0,0")
|
||||
|
||||
global_transform(mirror_x, mirror_y)
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r180 *1 0,0")
|
||||
|
||||
global_transform(magnify(2.0), shift(10.um, 20.um))
|
||||
|
||||
self_test("magnify(2.0)", source.global_transformation.to_s, "r0 *2 10,20")
|
||||
|
||||
|
||||
# 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)
|
||||
|
||||
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
BIN
Binary file not shown.
+32
@@ -63,6 +63,25 @@ class DBRecursiveShapeIterator_TestClass < TestBase
|
||||
|
||||
end
|
||||
|
||||
def acollect(s, l)
|
||||
|
||||
res = []
|
||||
while !s.at_end?
|
||||
r = "[#{l.cell_name(s.cell_index)}]"
|
||||
if s.shape.is_box?
|
||||
box = s.shape.box
|
||||
r += box.transformed(s.always_apply_trans).to_s
|
||||
else
|
||||
r += "X";
|
||||
end
|
||||
s.next
|
||||
res.push(r)
|
||||
end
|
||||
|
||||
return res.join("/")
|
||||
|
||||
end
|
||||
|
||||
def test_1
|
||||
|
||||
# Recursive shape iterator tests
|
||||
@@ -197,6 +216,19 @@ class DBRecursiveShapeIterator_TestClass < TestBase
|
||||
|
||||
ii = RBA::RecursiveShapeIterator::new(l, c2, [0, 1], RBA::Box.new(-100, 0, 2000, 101), false)
|
||||
assert_equal(collect(ii, l), "[c2](0,100;1000,1200)/[c3](1100,100;2100,1200)/[c3](1101,101;2101,1201)")
|
||||
ii.reset
|
||||
assert_equal(acollect(ii, l), "[c2](0,100;1000,1200)/[c3](0,100;1000,1200)/[c3](1,101;1001,1201)")
|
||||
|
||||
ii = RBA::RecursiveShapeIterator::new(l, c2, [0, 1], RBA::Box.new(-100, 20, 2000, 121), true)
|
||||
ii.global_trans = RBA::ICplxTrans::new(RBA::Vector::new(10, 20))
|
||||
assert_equal(ii.global_trans.to_s, "r0 *1 10,20")
|
||||
assert_equal(collect(ii, l), "[c2](10,120;1010,1220)/[c3](1110,120;2110,1220)")
|
||||
ii.global_dtrans = RBA::DCplxTrans::new(RBA::DVector::new(0.01, 0.02))
|
||||
ii.reset
|
||||
assert_equal(ii.global_dtrans.to_s, "r0 *1 0.01,0.02")
|
||||
assert_equal(collect(ii, l), "[c2](10,120;1010,1220)/[c3](1110,120;2110,1220)")
|
||||
ii.reset
|
||||
assert_equal(acollect(ii, l), "[c2](10,120;1010,1220)/[c3](0,100;1000,1200)")
|
||||
|
||||
ii = RBA::RecursiveShapeIterator::new(l, c2, [0, 1], RBA::Box.new(-100, 0, 2000, 101), true)
|
||||
assert_equal(collect(ii, l), "[c2](0,100;1000,1200)/[c3](1100,100;2100,1200)")
|
||||
|
||||
Reference in New Issue
Block a user