Corrected the array DRC checking, which was clipping to the error

area + halo but then failing to limit overlap checks to that clip
area, resulting in bizarre errors whenever an array is made.  Not
sure why the error didn't show up more often.
This commit is contained in:
Tim Edwards 2021-05-07 10:42:44 -04:00
parent e403e92017
commit 94a6daa9b0
3 changed files with 28 additions and 7 deletions

View File

@ -1 +1 @@
8.3.160
8.3.161

View File

@ -105,7 +105,7 @@ drcArrayFunc(scx, arg)
int xsep, ysep;
int xsize, ysize;
int rval, oldTiles;
Rect errorArea, yankArea, tmp, tmp2;
Rect errorArea, yankArea, tmp, tmp2, saveClip;
DRCCookie *save_cptr;
CellUse *use = scx->scx_use;
Rect *area;
@ -183,6 +183,8 @@ drcArrayFunc(scx, arg)
(ClientData) &yankArea);
drcArrayCount += DRCBasicCheck(DRCdef, &yankArea, &errorArea,
drcArrayErrorFunc, drcArrayClientData);
*arg->dCD_clip = *area;
GeoClip(arg->dCD_clip, &yankArea);
(void) DBArraySr(use, &errorArea, drcArrayOverlapFunc,
(ClientData) arg);
}
@ -200,6 +202,8 @@ drcArrayFunc(scx, arg)
(ClientData) &yankArea);
drcArrayCount += DRCBasicCheck(DRCdef, &yankArea, &errorArea,
drcArrayErrorFunc, drcArrayClientData);
*arg->dCD_clip = *area;
GeoClip(arg->dCD_clip, &yankArea);
(void) DBArraySr(use, &errorArea, drcArrayOverlapFunc,
(ClientData) arg);
}
@ -222,6 +226,8 @@ drcArrayFunc(scx, arg)
(ClientData) &yankArea);
drcArrayCount += DRCBasicCheck(DRCdef, &yankArea, &errorArea,
drcArrayErrorFunc, drcArrayClientData);
*arg->dCD_clip = *area;
GeoClip(arg->dCD_clip, &yankArea);
(void) DBArraySr(use, &errorArea, drcArrayOverlapFunc,
(ClientData) arg);
}
@ -239,11 +245,16 @@ drcArrayFunc(scx, arg)
(ClientData) &yankArea);
drcArrayCount += DRCBasicCheck(DRCdef, &yankArea, &errorArea,
drcArrayErrorFunc, drcArrayClientData);
*arg->dCD_clip = *area;
GeoClip(arg->dCD_clip, &yankArea);
(void) DBArraySr(use, &errorArea, drcArrayOverlapFunc,
(ClientData) arg);
}
}
/* Restore original clip rect */
*arg->dCD_clip = *area;
(void) DBNewPaintTable(savedPaintTable);
(void) DBNewPaintPlane(savedPaintPlane);

View File

@ -539,13 +539,23 @@ drcExactOverlapTile(tile, cxp)
type = TiGetType(tile);
TTMaskSetOnlyType(&typeMask, type);
for (t = DBNumUserLayers; t < DBNumTypes; t++)
if (type < DBNumUserLayers)
{
rmask = DBResidueMask(t);
if (TTMaskHasType(rmask, type))
TTMaskSetType(&typeMask, t);
for (t = DBNumUserLayers; t < DBNumTypes; t++)
{
rmask = DBResidueMask(t);
if (TTMaskHasType(rmask, type))
TTMaskSetType(&typeMask, t);
}
TTMaskCom2(&invMask, &typeMask);
}
else
{
rmask = DBResidueMask(type);
TTMaskSetMask(&typeMask, rmask); // Add residue types for inverse only
TTMaskCom2(&invMask, &typeMask);
TTMaskSetOnlyType(&typeMask, type); // Restore original type mask
}
TTMaskCom2(&invMask, &typeMask);
for (i = PL_TECHDEPBASE; i < DBNumPlanes; i++)
{