mirror of https://github.com/KLayout/klayout.git
New DRC features:
* inside, not_inside, outside, not_outside (edge/edge, edge/polygon) * related select_* * split_inside, split_outside (edge/edge, edge/polygon) * andnot (edge/edge, edge/polygon) * inside_outside_part (edge/polygon)
This commit is contained in:
parent
81b605c197
commit
c720e2d3eb
|
|
@ -2858,29 +2858,6 @@ CODE
|
|||
CODE
|
||||
end
|
||||
|
||||
%w(split_inside split_outside).each do |f|
|
||||
eval <<"CODE"
|
||||
def #{f}(other, *args)
|
||||
|
||||
@engine._context("#{f}") do
|
||||
|
||||
check_is_layer(other)
|
||||
requires_edges_or_region
|
||||
if self.data.is_a?(RBA::Edges)
|
||||
other.requires_edges_or_region
|
||||
elsif self.data.is_a?(RBA::Region)
|
||||
other.requires_region
|
||||
end
|
||||
|
||||
res = @engine._tcmd_a2(self.data, 0, self.data.class, self.data.class, :#{f}, other.data, *minmax_count(*args))
|
||||
[ DRCLayer::new(@engine, res[0]), DRCLayer::new(@engine, res[1]) ]
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
CODE
|
||||
end
|
||||
|
||||
%w(overlapping not_overlapping covering not_covering).each do |f|
|
||||
eval <<"CODE"
|
||||
|
||||
|
|
@ -2971,15 +2948,19 @@ CODE
|
|||
|
||||
%w(split_inside split_outside).each do |f|
|
||||
eval <<"CODE"
|
||||
def #{f}(other)
|
||||
def #{f}(other, *args)
|
||||
|
||||
@engine._context("#{f}") do
|
||||
|
||||
check_is_layer(other)
|
||||
requires_region
|
||||
other.requires_region
|
||||
requires_edges_or_region
|
||||
if self.data.is_a?(RBA::Edges)
|
||||
other.requires_edges_or_region
|
||||
elsif self.data.is_a?(RBA::Region)
|
||||
other.requires_region
|
||||
end
|
||||
|
||||
res = @engine._tcmd_a2(self.data, 0, self.data.class, self.data.class, :#{f}, other.data)
|
||||
res = @engine._tcmd_a2(self.data, 0, self.data.class, self.data.class, :#{f}, other.data, *minmax_count(*args))
|
||||
[ DRCLayer::new(@engine, res[0]), DRCLayer::new(@engine, res[1]) ]
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -169,6 +169,22 @@ def run_testsuite(dm, ic, tiled = false, hier = false)
|
|||
p.output(lb, dm + 10)
|
||||
m.output(lb, dm + 11)
|
||||
|
||||
b.edges.inside(c).output(lb, dm + 20)
|
||||
b.edges.not_inside(c).output(lb, dm + 21)
|
||||
b.edges.inside(empty).output(lb, dm + 22)
|
||||
b.edges.not_inside(empty).output(lb, dm + 23)
|
||||
(p, m) = b.edges.split_inside(c)
|
||||
p.output(lb, dm + 30)
|
||||
m.output(lb, dm + 31)
|
||||
|
||||
b.edges.inside(c.edges).output(lb, dm + 40)
|
||||
b.edges.not_inside(c.edges).output(lb, dm + 41)
|
||||
b.edges.inside(empty.edges).output(lb, dm + 42)
|
||||
b.edges.not_inside(empty.edges).output(lb, dm + 43)
|
||||
(p, m) = b.edges.split_inside(c.edges)
|
||||
p.output(lb, dm + 50)
|
||||
m.output(lb, dm + 51)
|
||||
|
||||
b.covering(c).output(lb, dm + 100)
|
||||
b.not_covering(c).output(lb, dm + 101)
|
||||
b.covering(empty).output(lb, dm + 102)
|
||||
|
|
@ -185,6 +201,22 @@ def run_testsuite(dm, ic, tiled = false, hier = false)
|
|||
p.output(lb + 1, dm + 10)
|
||||
m.output(lb + 1, dm + 11)
|
||||
|
||||
b.edges.outside(c).output(lb + 1, dm + 20)
|
||||
b.edges.not_outside(c).output(lb + 1, dm + 21)
|
||||
b.edges.outside(empty).output(lb + 1, dm + 22)
|
||||
b.edges.not_outside(empty).output(lb + 1, dm + 23)
|
||||
(p, m) = b.edges.split_outside(c)
|
||||
p.output(lb + 1, dm + 30)
|
||||
m.output(lb + 1, dm + 31)
|
||||
|
||||
b.edges.outside(c.edges).output(lb + 1, dm + 40)
|
||||
b.edges.not_outside(c.edges).output(lb + 1, dm + 41)
|
||||
b.edges.outside(empty.edges).output(lb + 1, dm + 42)
|
||||
b.edges.not_outside(empty.edges).output(lb + 1, dm + 43)
|
||||
(p, m) = b.edges.split_outside(c.edges)
|
||||
p.output(lb + 1, dm + 50)
|
||||
m.output(lb + 1, dm + 51)
|
||||
|
||||
b.overlapping(c).output(lb + 2, dm)
|
||||
b.not_overlapping(c).output(lb + 2, dm + 1)
|
||||
b.overlapping(empty).output(lb + 2, dm + 2)
|
||||
|
|
@ -201,6 +233,22 @@ def run_testsuite(dm, ic, tiled = false, hier = false)
|
|||
p.output(lb + 3, dm + 10)
|
||||
m.output(lb + 3, dm + 11)
|
||||
|
||||
b.edges.interacting(c).output(lb + 3, dm + 20)
|
||||
b.edges.not_interacting(c).output(lb + 3, dm + 21)
|
||||
b.edges.interacting(empty).output(lb + 3, dm + 22)
|
||||
b.edges.not_interacting(empty).output(lb + 3, dm + 23)
|
||||
(p, m) = b.edges.split_interacting(c)
|
||||
p.output(lb + 3, dm + 30)
|
||||
m.output(lb + 3, dm + 31)
|
||||
|
||||
b.edges.interacting(c.edges).output(lb + 3, dm + 40)
|
||||
b.edges.not_interacting(c.edges).output(lb + 3, dm + 41)
|
||||
b.edges.interacting(empty.edges).output(lb + 3, dm + 42)
|
||||
b.edges.not_interacting(empty.edges).output(lb + 3, dm + 43)
|
||||
(p, m) = b.edges.split_interacting(c.edges)
|
||||
p.output(lb + 3, dm + 50)
|
||||
m.output(lb + 3, dm + 51)
|
||||
|
||||
bdup = b.dup
|
||||
bdup.select_inside(c)
|
||||
bdup.xor(b.inside(c)).output(lb + 4, dm)
|
||||
|
|
@ -213,6 +261,31 @@ def run_testsuite(dm, ic, tiled = false, hier = false)
|
|||
bdup = b.dup
|
||||
bdup.select_not_inside(empty)
|
||||
bdup.output(lb + 4, dm + 3)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_inside(c)
|
||||
bdup.xor(b.edges.inside(c)).output(lb + 4, dm + 10)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_not_inside(c)
|
||||
bdup.output(lb + 4, dm + 11)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_inside(empty)
|
||||
bdup.output(lb + 4, dm + 12)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_not_inside(empty)
|
||||
bdup.output(lb + 4, dm + 13)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_inside(c.edges)
|
||||
bdup.xor(b.edges.inside(c.edges)).output(lb + 4, dm + 20)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_not_inside(c.edges)
|
||||
bdup.output(lb + 4, dm + 21)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_inside(empty)
|
||||
bdup.output(lb + 4, dm + 22)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_not_inside(empty)
|
||||
bdup.output(lb + 4, dm + 23)
|
||||
|
||||
bdup = b.dup
|
||||
bdup.select_outside(c)
|
||||
bdup.xor(b.outside(c)).output(lb + 5, dm)
|
||||
|
|
@ -225,6 +298,31 @@ def run_testsuite(dm, ic, tiled = false, hier = false)
|
|||
bdup = b.dup
|
||||
bdup.select_not_outside(empty)
|
||||
bdup.output(lb + 5, dm + 3)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_outside(c)
|
||||
bdup.xor(b.edges.outside(c)).output(lb + 5, dm + 10)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_not_outside(c)
|
||||
bdup.output(lb + 5, dm + 11)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_outside(empty)
|
||||
bdup.output(lb + 5, dm + 12)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_not_outside(empty)
|
||||
bdup.output(lb + 5, dm + 13)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_outside(c.edges)
|
||||
bdup.xor(b.edges.outside(c.edges)).output(lb + 5, dm + 20)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_not_outside(c.edges)
|
||||
bdup.output(lb + 5, dm + 21)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_outside(empty)
|
||||
bdup.output(lb + 5, dm + 22)
|
||||
bdup = b.dup.edges
|
||||
bdup.select_not_outside(empty)
|
||||
bdup.output(lb + 5, dm + 23)
|
||||
|
||||
bdup = b.dup
|
||||
bdup.select_overlapping(c)
|
||||
bdup.xor(b.overlapping(c)).output(lb + 6, dm)
|
||||
|
|
@ -237,6 +335,7 @@ def run_testsuite(dm, ic, tiled = false, hier = false)
|
|||
bdup = b.dup
|
||||
bdup.select_not_overlapping(empty)
|
||||
bdup.output(lb + 6, dm + 3)
|
||||
|
||||
bdup = b.dup
|
||||
bdup.select_interacting(c)
|
||||
bdup.xor(b.interacting(c)).output(lb + 7, dm)
|
||||
|
|
@ -249,8 +348,10 @@ def run_testsuite(dm, ic, tiled = false, hier = false)
|
|||
bdup = b.dup
|
||||
bdup.select_not_interacting(empty)
|
||||
bdup.output(lb + 7, dm + 3)
|
||||
|
||||
b.inside(empty).output(lb + 8, dm)
|
||||
b.not_inside(empty).output(lb + 8, dm + 1)
|
||||
|
||||
b.outside(empty).output(lb + 9, dm)
|
||||
b.not_outside(empty).output(lb + 9, dm + 1)
|
||||
|
||||
|
|
@ -641,6 +742,16 @@ def run_testsuite(dm, ic, tiled = false, hier = false)
|
|||
p.output(lb + 4, dm)
|
||||
p = b.edges.intersections(c.edges)
|
||||
p.output(lb + 5, dm)
|
||||
(u, v) = c.edges.andnot(b.edges)
|
||||
u.output(lb + 6, dm)
|
||||
v.output(lb + 6, dm + 1)
|
||||
p = b.edges.inside_part(c)
|
||||
p.output(lb + 7, dm)
|
||||
p = b.edges.outside_part(c)
|
||||
p.output(lb + 7, dm + 1)
|
||||
(u, v) = b.edges.inside_outside_part(c)
|
||||
u.output(lb + 7, dm + 2)
|
||||
v.output(lb + 7, dm + 3)
|
||||
|
||||
lb += 10 #450
|
||||
message "--- texts and filters #{lb}"
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue