diff --git a/src/db/db/dbAsIfFlatRegion.cc b/src/db/db/dbAsIfFlatRegion.cc index 00053b423..047137407 100644 --- a/src/db/db/dbAsIfFlatRegion.cc +++ b/src/db/db/dbAsIfFlatRegion.cc @@ -393,8 +393,8 @@ AsIfFlatRegion::selected_interacting_generic (const Texts &other, bool inverse) scanner.reserve1 (size ()); scanner.reserve2 (other.size ()); - std::auto_ptr output (new FlatRegion (false)); - region_to_text_interaction_filter filter (output->raw_polygons (), inverse); + std::auto_ptr output (new FlatRegion (true)); + region_to_text_interaction_filter filter (*output, inverse); AddressablePolygonDelivery p (begin_merged (), has_valid_merged_polygons ()); diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb index 5e1ce030d..d31cb68bc 100644 --- a/src/drc/drc/built-in-macros/_drc_engine.rb +++ b/src/drc/drc/built-in-macros/_drc_engine.rb @@ -1448,7 +1448,7 @@ CODE tp.input("self", obj) tp.threads = (@tt || 1) args.each_with_index do |a,i| - if a.is_a?(RBA::Edges) || a.is_a?(RBA::Region) + if a.is_a?(RBA::Edges) || a.is_a?(RBA::Region) || a.is_a?(RBA::EdgePairs) || a.is_a?(RBA::Texts) tp.input("a#{i}", a) else tp.var("a#{i}", a) diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index bebaa7dae..4f90e01f9 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -1807,12 +1807,19 @@ CODE # In tiled mode, there are no modifying versions. Emulate using the non-modifying one. eval <<"CODE" def #{f}(other) - if :#{fi} != :interacting && :#{f} != :not_interacting + if :#{fi} != :interacting && :#{fi} != :not_interacting + requires_edges_or_region("#{f}") requires_same_type(other, "#{f}") else - other.requires_edges_or_region("#{f}") + requires_edges_texts_or_region("#{f}") + if @data.is_a?(RBA::Text) + other.requires_region("#{f}") + elsif @data.is_a?(RBA::Region) + other.requires_edges_texts_or_region("#{f}") + else + other.requires_edges_or_region("#{f}") + end end - requires_edges_or_region("#{f}") if @engine.is_tiled? @data = @engine._tcmd(@data, 0, @data.class, :#{fi}, other.data) DRCLayer::new(@engine, @data) diff --git a/src/lay/lay/doc/manual/drc_runsets.xml b/src/lay/lay/doc/manual/drc_runsets.xml index fc928a702..6123f5e0a 100644 --- a/src/lay/lay/doc/manual/drc_runsets.xml +++ b/src/lay/lay/doc/manual/drc_runsets.xml @@ -545,7 +545,10 @@ output(w, "width violations")
  • Boolean AND with a polygon layer: will select those texts which are inside or at the border of a polygon. - "interact" is a synonym for this operation.
  • + interact is a synonym for this operation. +
  • Boolean NOT with a polygon layer: will select those texts + which are outside of any polygon. + not_interact is a synonym for this operation.
  • Text filtering by string: texts can be filtered either by matching against a fixed text or a glob pattern. The methods provided for this purpose are: diff --git a/testdata/drc/.drcSuiteTests.drc.swp b/testdata/drc/.drcSuiteTests.drc.swp index fd3a3af2f..ff550f50a 100644 Binary files a/testdata/drc/.drcSuiteTests.drc.swp and b/testdata/drc/.drcSuiteTests.drc.swp differ diff --git a/testdata/drc/drcSuiteTests.drc b/testdata/drc/drcSuiteTests.drc index 969736ce9..151cadaf8 100644 --- a/testdata/drc/drcSuiteTests.drc +++ b/testdata/drc/drcSuiteTests.drc @@ -638,12 +638,30 @@ def run_testsuite(dm, ic, tiled = false, hier = false) p.output(lb, dm) p = d.interacting(at) p.output(lb + 1, dm) + ddup = d.dup + ddup.select_interacting(at) + ddup.output(lb + 1, dm + 1) p = at.interacting(d) p.output(lb + 2, dm) + atdup = at.dup + atdup.select_interacting(d) + atdup.output(lb + 2, dm + 1) p = d.pull_interacting(at) p.output(lb + 3, dm) p = at.pull_interacting(d) p.output(lb + 4, dm) + p = at - d + p.output(lb + 5, dm) + p = d.not_interacting(at) + p.output(lb + 6, dm) + ddup = d.dup + ddup.select_not_interacting(at) + ddup.output(lb + 6, dm + 1) + p = at.not_interacting(d) + p.output(lb + 7, dm) + atdup = at.dup + atdup.select_not_interacting(d) + atdup.output(lb + 7, dm + 1) end diff --git a/testdata/drc/drcSuiteTests_au1.oas b/testdata/drc/drcSuiteTests_au1.oas index 4dfbe6425..d985dfd03 100644 Binary files a/testdata/drc/drcSuiteTests_au1.oas and b/testdata/drc/drcSuiteTests_au1.oas differ diff --git a/testdata/drc/drcSuiteTests_au2.oas b/testdata/drc/drcSuiteTests_au2.oas index 0f41d4df2..b02e611c6 100644 Binary files a/testdata/drc/drcSuiteTests_au2.oas and b/testdata/drc/drcSuiteTests_au2.oas differ diff --git a/testdata/drc/drcSuiteTests_au3.oas b/testdata/drc/drcSuiteTests_au3.oas index 19c82e622..003825e8c 100644 Binary files a/testdata/drc/drcSuiteTests_au3.oas and b/testdata/drc/drcSuiteTests_au3.oas differ diff --git a/testdata/drc/drcSuiteTests_au4.oas b/testdata/drc/drcSuiteTests_au4.oas index 4feb67d3f..d657c9306 100644 Binary files a/testdata/drc/drcSuiteTests_au4.oas and b/testdata/drc/drcSuiteTests_au4.oas differ diff --git a/testdata/drc/drcSuiteTests_au5.oas b/testdata/drc/drcSuiteTests_au5.oas index c3f8dba2c..1902b063c 100644 Binary files a/testdata/drc/drcSuiteTests_au5.oas and b/testdata/drc/drcSuiteTests_au5.oas differ diff --git a/testdata/drc/drcSuiteTests_au6.oas b/testdata/drc/drcSuiteTests_au6.oas index 9cd6913ee..3efe81486 100644 Binary files a/testdata/drc/drcSuiteTests_au6.oas and b/testdata/drc/drcSuiteTests_au6.oas differ diff --git a/testdata/drc/drctest.gds b/testdata/drc/drctest.gds index 643a120cb..4cea4d523 100644 Binary files a/testdata/drc/drctest.gds and b/testdata/drc/drctest.gds differ