From ba9a05640c1c0fd043c482cb75557f17d0daa300 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 23 May 2020 19:03:42 +0200 Subject: [PATCH] Bugfixed tiled mode with text input, DRC tests added and test data updated. --- src/db/db/dbAsIfFlatRegion.cc | 4 ++-- src/drc/drc/built-in-macros/_drc_engine.rb | 2 +- src/drc/drc/built-in-macros/_drc_layer.rb | 13 ++++++++++--- src/lay/lay/doc/manual/drc_runsets.xml | 5 ++++- testdata/drc/.drcSuiteTests.drc.swp | Bin 36864 -> 36864 bytes testdata/drc/drcSuiteTests.drc | 18 ++++++++++++++++++ testdata/drc/drcSuiteTests_au1.oas | Bin 13710 -> 13755 bytes testdata/drc/drcSuiteTests_au2.oas | Bin 62065 -> 62118 bytes testdata/drc/drcSuiteTests_au3.oas | Bin 1192903 -> 1196372 bytes testdata/drc/drcSuiteTests_au4.oas | Bin 61941 -> 61994 bytes testdata/drc/drcSuiteTests_au5.oas | Bin 13509 -> 13556 bytes testdata/drc/drcSuiteTests_au6.oas | Bin 20007 -> 20054 bytes testdata/drc/drctest.gds | Bin 3128 -> 3192 bytes 13 files changed, 35 insertions(+), 7 deletions(-) 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 fd3a3af2f0e88356c2a0181773152b009977fb83..ff550f50ae3f72229cd0660b59bd9c666f297c48 100644 GIT binary patch delta 698 zcmZ|L%WD%+6vy$Cm?lPJjiS@ihu&FPsfO61jGBPPf@a~P7TSe2F?B?uH4QrB!bTGd zE(BNJg`l9RxUkC-5iNEp;zliXW$Vg+Kz!mx{LTd2hyx$a;m+LOIZUk{tkr|YSaLXf zSXqgr@We%~4!zF(x-@Id#RHYbLcD+Tnqo-A4L9Fb^t$Ao>aCba3CCc;L>ymMi!9

    c|AQ1~4cS;kUSs`8#@5%YL~hnPkMBN)a} z9KkN^L?=4%eWl1dyu~~o;U+4W#3)W8gZ=2j&xptmEaO$=l*k;-bKJvS)KJAJ_F@nE z(TBBY#W()pSG>Ut9%CAHOyUYI!wokAp>jxfSTX&dU(*=BDQ zr3#MimQ|XXpy8mb&2dA2Oh=5;gp)6poHG{-r=4QyY>)rFt-A)=!#ljIwwGcQ9KUa- z*ndM728^heYbS`&CsL-qb}ri5oTRoZ+n+R>Gjw-q(Dau`Ot?nPktywOno<41dU?M`B#R}4;DZeoe7QtE@rGC2z`!X^P)8LNY$A;)eDGor z1Nd-?wDF85T;dqYDP^gWY$1jyBJe|p9o=|wh+Lrw1BckdE|N%K9&_;HhZDci!aE-E zfCesbgdDP(&ekL;L@BcFot9b)c}+EW f)}>mtK6RaNsDqhhbr*K2KzLNeYd*6PURe1Bjo(ov 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 4dfbe6425458a07f02db4ec668a7d6e8c8a6b35f..d985dfd03157ace5bef48eb1763a2cede13d0cda 100644 GIT binary patch delta 91 zcmeCn-krUn$iz#8iBUL{=^XPydEpGkpUT2nOpGvQHq&`#1}H~_`2sV8a3RA*=8vKx im6w=X*uOAOWPYgt(yn-!Sy+jYY4Svq-z*Ic3=9C{h8lSQ delta 48 xcmdm;-Iu+g$V65+lj$7uLV4i~#-GYS_IVgvgz*A1)8vCDKPF!=VP#@q005mC59$B_ diff --git a/testdata/drc/drcSuiteTests_au2.oas b/testdata/drc/drcSuiteTests_au2.oas index 0f41d4df2b7d60f561d2bb97a554e46f9b90e0a3..b02e611c6083b0f95e637d94a0dc414b619e8a29 100644 GIT binary patch delta 100 zcmezPgn8Lh<_!TKLq*sa8H970&M_ZQWf0C`e4)S~oX5n7;N&x%XJ&wNMc6MeGcX93 nGF)WdV9g*>dx^P){R{I1zaPpBV1raIGcyRQF>WsS$jAr)-H98^ delta 55 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 E1?|QUM*si- delta 32481 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%0DFIZ8YFJSS8ul8)`csEiMksS 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 delta 55 zcmZ4Wg!$`Z<_%XqC<*5>ont_(FjJ$UBeViLhQ^W?-6Z`0@K>hmUMb3=9BI C;S%Zq diff --git a/testdata/drc/drcSuiteTests_au5.oas b/testdata/drc/drcSuiteTests_au5.oas index c3f8dba2c6ba729109ef711aea9685da1b9d518b..1902b063c95ca04745fb9797a51c72635155db51 100644 GIT binary patch delta 92 zcmX?_`6YA18e>lpCPv{*rgO{-<%KgCe<}-SF)_lJ%IBFGgfo~H%8M{x0J16>E;4@< o{i!Tcd5O7&{R{I%=9dZ}-HMl)g_RhYCSNrEH2HxsHxmN`05>ih!2kdN delta 45 zcmey8c{Fpw8e=KpOr~?p3+06~7=J1YE1qW-&R|+7FT!|%nQ1bk$;Zh8COk|G3;=Y_ B4W|GA diff --git a/testdata/drc/drcSuiteTests_au6.oas b/testdata/drc/drcSuiteTests_au6.oas index 9cd6913eeaf2f5cf822a29eb353679ffa7c272b3..3efe81486bfefdcaeb41d72ae0b95daf8f497018 100644 GIT binary patch delta 87 zcmZ2Jhw<7R#tqd*9wJPP!kJ9xm>0?mXE6R$7S3W~gfW%RGcyQhFfEi9VZH!lRWe*; j{wVrWS)}q3a|`an>G+7z|dEyzP delta 40 wcmcaMhjIBF#tqd*lERrx=a?7D3uiF?R2Eh|&n%q5v`}7z@dESa!$y;(0UjR>RsaA1 diff --git a/testdata/drc/drctest.gds b/testdata/drc/drctest.gds index 643a120cbe7be5bcf670813a6aa7480024f51920..4cea4d52302add64b23a3de7b37ecf9bd0dabf3a 100644 GIT binary patch delta 244 zcmdlX@k2t1fsKKQDS|C(0BkfmfB*mh delta 180 zcmew%u|qk_A(EW7IcRId%pH e8CIOeP5#AQEsak;jC(Ss!IOV*IWx1cFaQ9f(injN