From 7b3c4e8777a98ba696de0297f5297def758525d9 Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Fri, 21 Sep 2018 14:42:59 -0400 Subject: [PATCH] Refinement of run-length spacing rule analyzes all of the maximum area rectangles returned by the "maxrect" function and so does not get triggered simply by the length of the edge being checked. --- drc/DRCbasic.c | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/drc/DRCbasic.c b/drc/DRCbasic.c index e75aba43..e1443067 100644 --- a/drc/DRCbasic.c +++ b/drc/DRCbasic.c @@ -563,12 +563,24 @@ drcTile (tile, arg) { if (mrd) { - /* Run-length rule */ - if ((cptr->drcc_cdist <= cptr->drcc_dist) || - ((edgeTop - edgeBot) > cptr->drcc_cdist)) + if (cptr->drcc_cdist <= cptr->drcc_dist) triggered = mrd->entries; - else - cptr = cptr->drcc_next; + else + { + /* Run-length rule */ + for (i = 0; i < mrd->entries; i++) + { + lr = &mrd->rlist[i]; + GeoClip(lr, arg->dCD_clip); + if ((lr->r_ytop - lr->r_ybot) > cptr->drcc_cdist) + { + triggered = mrd->entries; + break; + } + } + if (i == mrd->entries) + cptr = cptr->drcc_next; + } } else cptr = cptr->drcc_next; @@ -930,12 +942,24 @@ checkbottom: if (trigpending) { if (mrd) - /* Run-length rule */ - if ((cptr->drcc_cdist <= cptr->drcc_dist) || - ((edgeRight - edgeLeft) > cptr->drcc_cdist)) + if (cptr->drcc_cdist <= cptr->drcc_dist) triggered = mrd->entries; - else - cptr = cptr->drcc_next; + else + { + /* Run-length rule */ + for (i = 0; i < mrd->entries; i++) + { + lr = &mrd->rlist[i]; + GeoClip(lr, arg->dCD_clip); + if ((lr->r_xtop - lr->r_xbot) > cptr->drcc_cdist) + { + triggered = mrd->entries; + break; + } + } + if (i == mrd->entries) + cptr = cptr->drcc_next; + } else cptr = cptr->drcc_next; }