Update directed case for drcSurround in DRCtech.c
Before this modification "directed" surround rule only worked for layers1 and layers2 belonging to the same plane. After this modification the "directed" rule works also for different planes, even if layer1 is a contact type.
This commit is contained in:
parent
f6c6e2c29c
commit
a263a5a5a5
|
|
@ -2816,16 +2816,17 @@ drcSurround(argc, argv)
|
||||||
for (j = 0; j < DBNumTypes; j++)
|
for (j = 0; j < DBNumTypes; j++)
|
||||||
{
|
{
|
||||||
if (i == j) continue; /* Ignore false edges */
|
if (i == j) continue; /* Ignore false edges */
|
||||||
if (pset = (DBTypesOnSamePlane(i, j) & pmask2))
|
|
||||||
|
if (isDirectional)
|
||||||
{
|
{
|
||||||
if (isDirectional)
|
if (pset = (DBTypesOnSamePlane(i, j) & pmask))
|
||||||
{
|
{
|
||||||
/* Directional surround is done entirely differently */
|
/* Directional surround is done entirely differently */
|
||||||
|
|
||||||
if (TTMaskHasType(&setM, i) && TTMaskHasType(&invM, j))
|
if (TTMaskHasType(&setM, i) && TTMaskHasType(&invM, j))
|
||||||
{
|
{
|
||||||
plane1 = LowestMaskBit(pmask);
|
plane1 = LowestMaskBit(pset);
|
||||||
plane2 = LowestMaskBit(pset);
|
plane2 = LowestMaskBit(pmask2);
|
||||||
|
|
||||||
/* Find bucket preceding the new one we wish to insert */
|
/* Find bucket preceding the new one we wish to insert */
|
||||||
dp = drcFindBucket(i, j, distance);
|
dp = drcFindBucket(i, j, distance);
|
||||||
|
|
@ -2836,12 +2837,12 @@ drcSurround(argc, argv)
|
||||||
&DBAllTypeBits,
|
&DBAllTypeBits,
|
||||||
why, distance,
|
why, distance,
|
||||||
DRC_REVERSE | DRC_BOTHCORNERS,
|
DRC_REVERSE | DRC_BOTHCORNERS,
|
||||||
plane1, plane2);
|
plane2, plane1);
|
||||||
dptrig = (DRCCookie *)mallocMagic(sizeof(DRCCookie));
|
dptrig = (DRCCookie *)mallocMagic(sizeof(DRCCookie));
|
||||||
drcAssign(dptrig, distance, dpnew, &set2,
|
drcAssign(dptrig, distance, dpnew, &set2,
|
||||||
&DBZeroTypeBits, why, 0,
|
&DBZeroTypeBits, why, 0,
|
||||||
DRC_FORWARD | DRC_TRIGGER,
|
DRC_FORWARD | DRC_TRIGGER,
|
||||||
plane1, plane2);
|
plane2, plane1);
|
||||||
dp->drcc_next = dptrig;
|
dp->drcc_next = dptrig;
|
||||||
|
|
||||||
/* And the other direction. . . */
|
/* And the other direction. . . */
|
||||||
|
|
@ -2853,17 +2854,20 @@ drcSurround(argc, argv)
|
||||||
&DBAllTypeBits,
|
&DBAllTypeBits,
|
||||||
why, distance,
|
why, distance,
|
||||||
DRC_FORWARD | DRC_BOTHCORNERS,
|
DRC_FORWARD | DRC_BOTHCORNERS,
|
||||||
plane1, plane2);
|
plane2, plane1);
|
||||||
dptrig = (DRCCookie *)mallocMagic(sizeof(DRCCookie));
|
dptrig = (DRCCookie *)mallocMagic(sizeof(DRCCookie));
|
||||||
drcAssign(dptrig, distance, dpnew, &set2,
|
drcAssign(dptrig, distance, dpnew, &set2,
|
||||||
&DBZeroTypeBits, why, 0,
|
&DBZeroTypeBits, why, 0,
|
||||||
DRC_REVERSE | DRC_TRIGGER,
|
DRC_REVERSE | DRC_TRIGGER,
|
||||||
plane1, plane2);
|
plane2, plane1);
|
||||||
dp->drcc_next = dptrig;
|
dp->drcc_next = dptrig;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
|
{
|
||||||
|
if (pset = (DBTypesOnSamePlane(i, j) & pmask2))
|
||||||
|
{
|
||||||
if (TTMaskHasType(&set1, i) && TTMaskHasType(&set2, j))
|
if (TTMaskHasType(&set1, i) && TTMaskHasType(&set2, j))
|
||||||
{
|
{
|
||||||
plane1 = LowestMaskBit(pmask);
|
plane1 = LowestMaskBit(pmask);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue