Created an additional argument "start" to the "slots" operator,
which adds an offset value of "start" to both X and Y from the lower left corner of the fill area. This allows the use of the "offset" (from the previous git commit) to be declared on different layers without creating an exact overlap, as is often required by foundries for fill patterns.
This commit is contained in:
parent
adb4d2613d
commit
be8ba09373
|
|
@ -2011,13 +2011,13 @@ cifSlotsFillArea(op, cellDef, plane)
|
|||
|
||||
cifSlotFunc(&bbox, op, &nUp, &nAcross, &llcut, vertical);
|
||||
|
||||
cut.r_ybot = llcut.r_ybot;
|
||||
cut.r_ytop = llcut.r_ytop;
|
||||
cut.r_ybot = llcut.r_ybot + slots->sl_start;
|
||||
cut.r_ytop = llcut.r_ytop + slots->sl_start;
|
||||
|
||||
/* For each contact cut area, check that there is */
|
||||
/* no whitespace */
|
||||
|
||||
offset = 0;
|
||||
offset = slots->sl_start;
|
||||
for (i = 0; i < nUp; i++)
|
||||
{
|
||||
cut.r_xbot = llcut.r_xbot + offset;
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ typedef struct slots_data
|
|||
int sl_lsize;
|
||||
int sl_lsep;
|
||||
int sl_offset;
|
||||
int sl_start;
|
||||
} SlotsData;
|
||||
|
||||
typedef struct cifop
|
||||
|
|
|
|||
|
|
@ -1327,6 +1327,7 @@ bloatCheck:
|
|||
slots->sl_lsize = 0;
|
||||
slots->sl_lsep = 0;
|
||||
slots->sl_offset = 0;
|
||||
slots->sl_start = 0;
|
||||
}
|
||||
if (argc >= 5)
|
||||
{
|
||||
|
|
@ -1361,7 +1362,7 @@ bloatCheck:
|
|||
goto errorReturn;
|
||||
}
|
||||
}
|
||||
if (argc == 8)
|
||||
if (argc >= 8)
|
||||
{
|
||||
i = atoi(argv[7]);
|
||||
slots->sl_offset = i;
|
||||
|
|
@ -1371,7 +1372,17 @@ bloatCheck:
|
|||
goto errorReturn;
|
||||
}
|
||||
}
|
||||
if ((argc < 4) || (argc == 6) || (argc > 8))
|
||||
if (argc == 9)
|
||||
{
|
||||
i = atoi(argv[8]);
|
||||
slots->sl_start = i;
|
||||
if (i < 0)
|
||||
{
|
||||
TechError("Slot start must be non-negative.\n");
|
||||
goto errorReturn;
|
||||
}
|
||||
}
|
||||
if ((argc < 4) || (argc == 6) || (argc > 9))
|
||||
goto wrongNumArgs;
|
||||
break;
|
||||
}
|
||||
|
|
@ -1685,7 +1696,7 @@ CIFTechFinal()
|
|||
{
|
||||
slots = (SlotsData *)op->co_client;
|
||||
|
||||
for (j = 0; j < 7; j++)
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
switch (j) {
|
||||
case 0: bvalue = slots->sl_sborder; break;
|
||||
|
|
@ -1695,6 +1706,7 @@ CIFTechFinal()
|
|||
case 4: bvalue = slots->sl_lsize; break;
|
||||
case 5: bvalue = slots->sl_lsep; break;
|
||||
case 6: bvalue = slots->sl_offset; break;
|
||||
case 7: bvalue = slots->sl_start; break;
|
||||
}
|
||||
if (bvalue != 0)
|
||||
{
|
||||
|
|
@ -2193,7 +2205,7 @@ CIFTechOutputScale(n, d)
|
|||
else if (op->co_opcode == CIFOP_SLOTS)
|
||||
{
|
||||
slots = (SlotsData *)op->co_client;
|
||||
for (j = 0; j < 7; j++)
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
switch (j) {
|
||||
case 0: bptr = &slots->sl_sborder; break;
|
||||
|
|
@ -2203,6 +2215,7 @@ CIFTechOutputScale(n, d)
|
|||
case 4: bptr = &slots->sl_lsize; break;
|
||||
case 5: bptr = &slots->sl_lsep; break;
|
||||
case 6: bptr = &slots->sl_offset; break;
|
||||
case 7: bptr = &slots->sl_start; break;
|
||||
}
|
||||
if (*bptr != 0)
|
||||
{
|
||||
|
|
@ -2319,6 +2332,8 @@ CIFTechOutputScale(n, d)
|
|||
slots->sl_lsep /= lexpand;
|
||||
if (slots->sl_offset != 0)
|
||||
slots->sl_offset /= lexpand;
|
||||
if (slots->sl_start != 0)
|
||||
slots->sl_start /= lexpand;
|
||||
break;
|
||||
case CIFOP_SQUARES_G:
|
||||
squares = (SquaresData *)op->co_client;
|
||||
|
|
|
|||
Loading…
Reference in New Issue