Modified the "bloat-all" cifoutput operator to allow operations on

templayers.  This permits some useful interactions like growing to
the size of a bounding box, or abutment box, as well as many other
possibilities.  Also:  Corrected the use of "cif see" for the boundary
(abutment box) layer, which was not working because the "cif see"
command uses a flattened CellDef that does not have the boundary
property of the cell it was flattened from.
This commit is contained in:
Tim Edwards 2020-05-26 14:29:36 -04:00
parent a908893ae3
commit 3203eec28c
12 changed files with 131 additions and 50 deletions

View File

@ -1 +1 @@
8.3.15 8.3.16

View File

@ -998,7 +998,7 @@ calmaOutFunc(def, f, cliprect)
/* Output all the tiles associated with this cell; skip temporary layers */ /* Output all the tiles associated with this cell; skip temporary layers */
GEO_EXPAND(&def->cd_bbox, CIFCurStyle->cs_radius, &bigArea); GEO_EXPAND(&def->cd_bbox, CIFCurStyle->cs_radius, &bigArea);
CIFErrorDef = def; CIFErrorDef = def;
CIFGen(def, &bigArea, CIFPlanes, &DBAllTypeBits, TRUE, TRUE, (ClientData) f); CIFGen(def, def, &bigArea, CIFPlanes, &DBAllTypeBits, TRUE, TRUE, (ClientData) f);
if (!CIFHierWriteDisable) if (!CIFHierWriteDisable)
CIFGenSubcells(def, &bigArea, CIFPlanes); CIFGenSubcells(def, &bigArea, CIFPlanes);
if (!CIFArrayWriteDisable) if (!CIFArrayWriteDisable)

View File

@ -1051,6 +1051,7 @@ cifFoundFunc(tile, BloatStackPtr)
typedef struct _bloatStruct { typedef struct _bloatStruct {
CIFOp *op; CIFOp *op;
CellDef *def; CellDef *def;
Plane **temps;
} BloatStruct; } BloatStruct;
/* /*
@ -1080,21 +1081,24 @@ cifBloatAllFunc(tile, bls)
Rect area; Rect area;
TileTypeBitMask connect; TileTypeBitMask connect;
Tile *t, *tp; Tile *t, *tp;
TileType type; TileType type, ttype;
BloatData *bloats; BloatData *bloats;
int i, locScale; int i, locScale;
PlaneMask pmask; PlaneMask pmask;
CIFOp *op; CIFOp *op;
CellDef *def; CellDef *def;
Plane **temps;
static Stack *BloatStack = (Stack *)NULL; static Stack *BloatStack = (Stack *)NULL;
op = bls->op; op = bls->op;
def = bls->def; def = bls->def;
temps = bls->temps;
bloats = (BloatData *)op->co_client; bloats = (BloatData *)op->co_client;
/* Create a mask of all connecting types (these must be in a single /* Create a mask of all connecting types (these must be in a single
* plane), then call a search function to find all connecting material * plane), then call a search function to find all connecting material
* of these types. * of these types (if the bloat types are temp layers, then this mask
* is not used).
*/ */
TTMaskZero(&connect); TTMaskZero(&connect);
@ -1117,6 +1121,9 @@ cifBloatAllFunc(tile, bls)
if (type == CIF_SOLIDTYPE) if (type == CIF_SOLIDTYPE)
{ {
pmask = 0; pmask = 0;
if (bloats->bl_isCif == TRUE)
locScale = 1;
else
locScale = (CIFCurStyle) ? CIFCurStyle->cs_scaleFactor : 1; locScale = (CIFCurStyle) ? CIFCurStyle->cs_scaleFactor : 1;
/* Get the tile into magic database coordinates if it's in CIF coords */ /* Get the tile into magic database coordinates if it's in CIF coords */
@ -1129,13 +1136,40 @@ cifBloatAllFunc(tile, bls)
else else
{ {
int pNum = DBPlane(type); int pNum = DBPlane(type);
pmask = CoincidentPlanes(&connect, PlaneNumToMaskBit(pNum)); pmask = (bloats->bl_isCif == TRUE) ? 0 :
CoincidentPlanes(&connect, PlaneNumToMaskBit(pNum));
if (pmask == 0) TiToRect(tile, &area); if (pmask == 0) TiToRect(tile, &area);
if (bloats->bl_isCif == TRUE)
{
/* Get the tile into CIF database coordinates if it's in magic coords */
area.r_xbot *= cifScale;
area.r_xtop *= cifScale;
area.r_ybot *= cifScale;
area.r_ytop *= cifScale;
locScale = 1;
}
else
{
locScale = cifScale; locScale = cifScale;
} }
}
if (pmask == 0) if (pmask == 0)
{
if (bloats->bl_isCif)
{
/* This expands the area to the OR of all temp layers specified */
/* which may or may not be useful; normally one would expand */
/* into a single layer if a temp layer is specified. */
for (ttype = 0; ttype < TT_MAXTYPES; ttype++, temps++)
if (bloats->bl_distance[ttype] > 0)
(void) DBSrPaintArea((Tile *)NULL, *temps, &area,
&CIFSolidBits, cifFoundFunc, (ClientData)(&BloatStack));
}
else
DBSrPaintArea((Tile *)NULL, def->cd_planes[bloats->bl_plane], &area, DBSrPaintArea((Tile *)NULL, def->cd_planes[bloats->bl_plane], &area,
&connect, cifFoundFunc, (ClientData)(&BloatStack)); &connect, cifFoundFunc, (ClientData)(&BloatStack));
}
else else
PUSHTILE(t, BloatStack); PUSHTILE(t, BloatStack);
@ -3127,7 +3161,7 @@ cifSrTiles(cifOp, area, cellDef, temps, func, cdArg)
*/ */
Plane * Plane *
CIFGenLayer(op, area, cellDef, temps, clientdata) CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
CIFOp *op; /* List of CIFOps telling how to make layer. */ CIFOp *op; /* List of CIFOps telling how to make layer. */
Rect *area; /* Area to consider when generating CIF. Only Rect *area; /* Area to consider when generating CIF. Only
* material in this area will be considered, so * material in this area will be considered, so
@ -3137,6 +3171,9 @@ CIFGenLayer(op, area, cellDef, temps, clientdata)
CellDef *cellDef; /* CellDef to search when paint layers are CellDef *cellDef; /* CellDef to search when paint layers are
* needed for operation. * needed for operation.
*/ */
CellDef *origDef; /* Original CellDef for which output is being
* generated (cellDef may be derived from this).
*/
Plane *temps[]; /* Temporary layers to be used when needed Plane *temps[]; /* Temporary layers to be used when needed
* for operation. * for operation.
*/ */
@ -3374,6 +3411,7 @@ CIFGenLayer(op, area, cellDef, temps, clientdata)
cifPlane = curPlane; cifPlane = curPlane;
bls.op = op; bls.op = op;
bls.def = cellDef; bls.def = cellDef;
bls.temps = temps;
cifSrTiles(op, area, cellDef, temps, cifSrTiles(op, area, cellDef, temps,
cifBloatAllFunc, (ClientData)&bls); cifBloatAllFunc, (ClientData)&bls);
break; break;
@ -3442,12 +3480,13 @@ CIFGenLayer(op, area, cellDef, temps, clientdata)
case CIFOP_BOUNDARY: case CIFOP_BOUNDARY:
cifPlane = curPlane; cifPlane = curPlane;
/* This function for cifoutput only. cifinput handled separately. */ /* This function for cifoutput only. cifinput handled separately. */
if (cellDef && (cellDef->cd_flags & CDFIXEDBBOX))
if (origDef && (origDef->cd_flags & CDFIXEDBBOX))
{ {
char *propvalue; char *propvalue;
bool found; bool found;
propvalue = (char *)DBPropGet(cellDef, "FIXED_BBOX", &found); propvalue = (char *)DBPropGet(origDef, "FIXED_BBOX", &found);
if (!found) break; if (!found) break;
if (sscanf(propvalue, "%d %d %d %d", &bbox.r_xbot, &bbox.r_ybot, if (sscanf(propvalue, "%d %d %d %d", &bbox.r_xbot, &bbox.r_ybot,
&bbox.r_xtop, &bbox.r_ytop) != 4) break; &bbox.r_xtop, &bbox.r_ytop) != 4) break;
@ -3527,8 +3566,9 @@ CIFGenLayer(op, area, cellDef, temps, clientdata)
*/ */
void void
CIFGen(cellDef, area, planes, layers, replace, genAllPlanes, clientdata) CIFGen(cellDef, origDef, area, planes, layers, replace, genAllPlanes, clientdata)
CellDef *cellDef; /* Cell for which CIF is to be generated. */ CellDef *cellDef; /* Cell for which CIF is to be generated. */
CellDef *origDef; /* Original cell, if different from cellDef */
Rect *area; /* Any CIF overlapping this area (in coords Rect *area; /* Any CIF overlapping this area (in coords
* of cellDef) will be generated. The CIF * of cellDef) will be generated. The CIF
* will be clipped to this area. * will be clipped to this area.
@ -3574,7 +3614,7 @@ CIFGen(cellDef, area, planes, layers, replace, genAllPlanes, clientdata)
{ {
CIFErrorLayer = i; CIFErrorLayer = i;
new[i] = CIFGenLayer(CIFCurStyle->cs_layers[i]->cl_ops, new[i] = CIFGenLayer(CIFCurStyle->cs_layers[i]->cl_ops,
&expanded, cellDef, new, clientdata); &expanded, cellDef, origDef, new, clientdata);
/* Clean up the non-manhattan geometry in the plane */ /* Clean up the non-manhattan geometry in the plane */
if (CIFUnfracture) DBMergeNMTiles(new[i], &expanded, if (CIFUnfracture) DBMergeNMTiles(new[i], &expanded,

View File

@ -325,8 +325,8 @@ cifHierCellFunc(scx)
CIFErrorDef = (CellDef *) NULL; CIFErrorDef = (CellDef *) NULL;
GeoTransRect(&scx->scx_trans, &scx->scx_area, &rootArea); GeoTransRect(&scx->scx_trans, &scx->scx_area, &rootArea);
CIFGen(CIFComponentDef, &rootArea, CIFComponentPlanes, CIFGen(CIFComponentDef, scx->scx_use->cu_def, &rootArea,
&CIFCurStyle->cs_hierLayers, FALSE, TRUE); CIFComponentPlanes, &CIFCurStyle->cs_hierLayers, FALSE, TRUE);
return 0; return 0;
} }
@ -575,7 +575,7 @@ CIFGenSubcells(def, area, output)
(void) DBTreeSrTiles(&scx, &CIFCurStyle->cs_yankLayers, 0, (void) DBTreeSrTiles(&scx, &CIFCurStyle->cs_yankLayers, 0,
cifHierCopyFunc, (ClientData) CIFTotalDef); cifHierCopyFunc, (ClientData) CIFTotalDef);
CIFErrorDef = def; CIFErrorDef = def;
CIFGen(CIFTotalDef, &interaction, CIFTotalPlanes, CIFGen(CIFTotalDef, def, &interaction, CIFTotalPlanes,
&CIFCurStyle->cs_hierLayers, TRUE, TRUE); &CIFCurStyle->cs_hierLayers, TRUE, TRUE);
/* Now go through all the subcells overlapping the area /* Now go through all the subcells overlapping the area
@ -592,7 +592,7 @@ CIFGenSubcells(def, area, output)
*/ */
CIFErrorDef = (CellDef *) NULL; CIFErrorDef = (CellDef *) NULL;
CIFGen(def, &interaction, CIFComponentPlanes, CIFGen(def, def, &interaction, CIFComponentPlanes,
&CIFCurStyle->cs_hierLayers, FALSE, TRUE); &CIFCurStyle->cs_hierLayers, FALSE, TRUE);
/* Make sure everything in the pieces is also in the overall /* Make sure everything in the pieces is also in the overall
@ -679,7 +679,7 @@ cifHierElementFunc(use, transform, x, y, checkArea)
cifHierCopyFunc, (ClientData) CIFComponentDef); cifHierCopyFunc, (ClientData) CIFComponentDef);
CIFErrorDef = (CellDef *) NULL; CIFErrorDef = (CellDef *) NULL;
CIFGen(CIFComponentDef, checkArea, CIFComponentPlanes, CIFGen(CIFComponentDef, use->cu_def, checkArea, CIFComponentPlanes,
&CIFCurStyle->cs_hierLayers, FALSE, TRUE); &CIFCurStyle->cs_hierLayers, FALSE, TRUE);
return 0; return 0;
@ -920,8 +920,8 @@ cifHierArrayFunc(scx, output)
(void) DBArraySr(use, &expandedArea, cifHierElementFunc, (void) DBArraySr(use, &expandedArea, cifHierElementFunc,
(ClientData) &A); (ClientData) &A);
CIFErrorDef = use->cu_parent; CIFErrorDef = use->cu_parent;
CIFGen(CIFTotalDef, &A, CIFTotalPlanes, &CIFCurStyle->cs_hierLayers, CIFGen(CIFTotalDef, use->cu_def, &A, CIFTotalPlanes,
FALSE, TRUE); &CIFCurStyle->cs_hierLayers, FALSE, TRUE);
anyInteractions = TRUE; anyInteractions = TRUE;
} }
@ -937,8 +937,8 @@ cifHierArrayFunc(scx, output)
(void) DBArraySr(use, &expandedArea, cifHierElementFunc, (void) DBArraySr(use, &expandedArea, cifHierElementFunc,
(ClientData) &C); (ClientData) &C);
CIFErrorDef = use->cu_parent; CIFErrorDef = use->cu_parent;
CIFGen(CIFTotalDef, &C, CIFTotalPlanes, &CIFCurStyle->cs_hierLayers, CIFGen(CIFTotalDef, use->cu_def, &C, CIFTotalPlanes,
FALSE, TRUE); &CIFCurStyle->cs_hierLayers, FALSE, TRUE);
anyInteractions = TRUE; anyInteractions = TRUE;
} }
@ -954,8 +954,8 @@ cifHierArrayFunc(scx, output)
(void) DBArraySr(use, &expandedArea, cifHierElementFunc, (void) DBArraySr(use, &expandedArea, cifHierElementFunc,
(ClientData) &B); (ClientData) &B);
CIFErrorDef = use->cu_parent; CIFErrorDef = use->cu_parent;
CIFGen(CIFTotalDef, &B, CIFTotalPlanes, &CIFCurStyle->cs_hierLayers, CIFGen(CIFTotalDef, use->cu_def, &B, CIFTotalPlanes,
FALSE, TRUE); &CIFCurStyle->cs_hierLayers, FALSE, TRUE);
/* D */ /* D */
@ -967,8 +967,8 @@ cifHierArrayFunc(scx, output)
(void) DBArraySr(use, &expandedArea, cifHierElementFunc, (void) DBArraySr(use, &expandedArea, cifHierElementFunc,
(ClientData) &D); (ClientData) &D);
CIFErrorDef = use->cu_parent; CIFErrorDef = use->cu_parent;
CIFGen(CIFTotalDef, &D, CIFTotalPlanes, &CIFCurStyle->cs_hierLayers, CIFGen(CIFTotalDef, use->cu_def, &D, CIFTotalPlanes,
FALSE, TRUE); &CIFCurStyle->cs_hierLayers, FALSE, TRUE);
} }
if (anyInteractions) if (anyInteractions)

View File

@ -45,6 +45,7 @@
typedef struct bloat_data typedef struct bloat_data
{ {
bool bl_isCif; /* TRUE if types of bl_distance are CIF types */
int bl_plane; /* Plane on which a bloat or squares int bl_plane; /* Plane on which a bloat or squares
* operation is valid. * operation is valid.
*/ */

View File

@ -327,7 +327,23 @@ CIFNameToMask(name, result, depend)
{ {
cl = CIFCurStyle->cs_layers[j]; cl = CIFCurStyle->cs_layers[j];
for (op = cl->cl_ops; op != NULL; op = op->co_next) for (op = cl->cl_ops; op != NULL; op = op->co_next)
{
TTMaskSetMask(depend, &op->co_cifMask); TTMaskSetMask(depend, &op->co_cifMask);
/* Bloat layers may depend on CIF layers */
/* Currently supported only with bloat-all */
if (op->co_opcode == CIFOP_BLOATALL)
{
BloatData *bloats = (BloatData *)op->co_client;
TileType ttype;
if (bloats->bl_isCif == TRUE)
for (ttype = 0; ttype < TT_MAXTYPES; ttype++)
if (bloats->bl_distance[ttype] > 0)
TTMaskSetType(depend, ttype);
}
}
} }
} }
return TRUE; return TRUE;

View File

@ -572,7 +572,7 @@ CIFPaintCurrent(filetype)
CIFOp *op; CIFOp *op;
plane = CIFGenLayer(cifCurReadStyle->crs_layers[i]->crl_ops, plane = CIFGenLayer(cifCurReadStyle->crs_layers[i]->crl_ops,
&TiPlaneRect, (CellDef *) NULL, cifCurReadPlanes); &TiPlaneRect, (CellDef *)NULL, (CellDef *)NULL, cifCurReadPlanes);
/* Generate a paint/erase table, then paint from the CIF /* Generate a paint/erase table, then paint from the CIF
* plane into the current Magic cell. * plane into the current Magic cell.

View File

@ -163,7 +163,8 @@ CIFPaintLayer(rootDef, area, cifLayer, magicLayer, paintDef)
(void) DBTreeSrTiles(&scx, &DBAllButSpaceAndDRCBits, 0, (void) DBTreeSrTiles(&scx, &DBAllButSpaceAndDRCBits, 0,
cifHierCopyFunc, (ClientData) CIFComponentDef); cifHierCopyFunc, (ClientData) CIFComponentDef);
oldCount = DBWFeedbackCount; oldCount = DBWFeedbackCount;
CIFGen(CIFComponentDef, area, CIFPlanes, &depend, TRUE, TRUE);
CIFGen(CIFComponentDef, rootDef, area, CIFPlanes, &depend, TRUE, TRUE);
DBCellClearDef(CIFComponentDef); DBCellClearDef(CIFComponentDef);
/* Report any errors that occurred. */ /* Report any errors that occurred. */
@ -277,7 +278,7 @@ CIFSeeLayer(rootDef, area, layer)
(void) DBTreeSrTiles(&scx, &DBAllButSpaceAndDRCBits, 0, (void) DBTreeSrTiles(&scx, &DBAllButSpaceAndDRCBits, 0,
cifHierCopyFunc, (ClientData) CIFComponentDef); cifHierCopyFunc, (ClientData) CIFComponentDef);
oldCount = DBWFeedbackCount; oldCount = DBWFeedbackCount;
CIFGen(CIFComponentDef, area, CIFPlanes, &depend, TRUE, TRUE); CIFGen(CIFComponentDef, rootDef, area, CIFPlanes, &depend, TRUE, TRUE);
DBCellClearDef(CIFComponentDef); DBCellClearDef(CIFComponentDef);
/* Report any errors that occurred. */ /* Report any errors that occurred. */
@ -440,7 +441,7 @@ CIFCoverageLayer(rootDef, area, layer)
scx.scx_trans = GeoIdentityTransform; scx.scx_trans = GeoIdentityTransform;
(void) DBTreeSrTiles(&scx, &DBAllButSpaceAndDRCBits, 0, (void) DBTreeSrTiles(&scx, &DBAllButSpaceAndDRCBits, 0,
cifHierCopyFunc, (ClientData) CIFComponentDef); cifHierCopyFunc, (ClientData) CIFComponentDef);
CIFGen(CIFComponentDef, area, CIFPlanes, &depend, TRUE, TRUE); CIFGen(CIFComponentDef, rootDef, area, CIFPlanes, &depend, TRUE, TRUE);
DBCellClearDef(CIFComponentDef); DBCellClearDef(CIFComponentDef);
cstats.coverage = 0; cstats.coverage = 0;

View File

@ -524,7 +524,7 @@ CIFTechLine(sectionName, argc, argv)
int argc; /* Number of fields on line. */ int argc; /* Number of fields on line. */
char *argv[]; /* Values of fields. */ char *argv[]; /* Values of fields. */
{ {
TileTypeBitMask mask, tempMask, bloatLayers; TileTypeBitMask mask, tempMask, cifMask, bloatLayers;
int i, j, l, distance; int i, j, l, distance;
CIFLayer *newLayer; CIFLayer *newLayer;
CIFOp *newOp = NULL; CIFOp *newOp = NULL;
@ -1093,21 +1093,37 @@ CIFTechLine(sectionName, argc, argv)
for (i = 0; i < TT_MAXTYPES; i++) for (i = 0; i < TT_MAXTYPES; i++)
bloats->bl_distance[i] = 0; bloats->bl_distance[i] = 0;
newOp->co_client = (ClientData)bloats; newOp->co_client = (ClientData)bloats;
cifParseLayers(argv[2], CIFCurStyle, &mask, &tempMask, TRUE); cifParseLayers(argv[2], CIFCurStyle, &mask, &cifMask, TRUE);
/* 5/25/2020: Lifting restriction that bloatLayers types */
/* cannot be CIF or temp layers. However, CIF/temp layers */
/* and magic database layers may not be mixed. */
if (!TTMaskIsZero(&mask) && !TTMaskIsZero(&cifMask))
TechError("Can't mix CIF and magic layers in bloat statement.\n");
/* 10/15/2019: Lifting restriction that the types that */ /* 10/15/2019: Lifting restriction that the types that */
/* trigger the bloating must be in the same plane as the */ /* trigger the bloating must be in the same plane as the */
/* types that are bloated into. */ /* types that are bloated into. */
TTMaskZero(&bloatLayers); TTMaskZero(&bloatLayers);
if (!TTMaskIsZero(&mask))
{
bloats->bl_isCif = FALSE;
TTMaskSetMask(&bloatLayers, &mask); TTMaskSetMask(&bloatLayers, &mask);
if (!TTMaskEqual(&tempMask, &DBZeroTypeBits))
TechError("Can't use templayers in bloat statement.\n");
for (i = 0; i < TT_MAXTYPES; i++) for (i = 0; i < TT_MAXTYPES; i++)
if (TTMaskHasType(&mask, i)) if (TTMaskHasType(&mask, i))
bloats->bl_distance[i] = 1; bloats->bl_distance[i] = 1;
goto bloatCheck; }
else
{
bloats->bl_isCif = TRUE;
TTMaskSetMask(&bloatLayers, &cifMask);
for (i = 0; i < TT_MAXTYPES; i++)
if (TTMaskHasType(&cifMask, i))
bloats->bl_distance[i] = 1;
}
break;
case CIFOP_BLOAT: case CIFOP_BLOAT:
case CIFOP_BLOATMIN: case CIFOP_BLOATMIN:
@ -1119,6 +1135,7 @@ CIFTechLine(sectionName, argc, argv)
bloatArg = argv + 2; bloatArg = argv + 2;
bloatLayers = newOp->co_paintMask; bloatLayers = newOp->co_paintMask;
bloats = (BloatData *)mallocMagic(sizeof(BloatData)); bloats = (BloatData *)mallocMagic(sizeof(BloatData));
bloats->bl_isCif = FALSE;
for (i = 0; i < TT_MAXTYPES; i++) for (i = 0; i < TT_MAXTYPES; i++)
bloats->bl_distance[i] = 0; bloats->bl_distance[i] = 0;
newOp->co_client = (ClientData)bloats; newOp->co_client = (ClientData)bloats;
@ -1859,8 +1876,13 @@ CIFTechFinal()
for (j = 0; j < TT_MAXTYPES; j++) for (j = 0; j < TT_MAXTYPES; j++)
{ {
if (bloats->bl_distance[j] != bloats->bl_distance[TT_SPACE]) if (bloats->bl_distance[j] != bloats->bl_distance[TT_SPACE])
{
if (bloats->bl_isCif)
TTMaskSetType(&ourDepend, j);
else
TTMaskSetType(&ourYank, j); TTMaskSetType(&ourYank, j);
} }
}
needThisLayer = TRUE; needThisLayer = TRUE;
break; break;

View File

@ -378,7 +378,7 @@ cifOutFunc(def, f)
GEO_EXPAND(&def->cd_bbox, CIFCurStyle->cs_radius, &bigArea); GEO_EXPAND(&def->cd_bbox, CIFCurStyle->cs_radius, &bigArea);
CIFErrorDef = def; CIFErrorDef = def;
CIFGen(def, &bigArea, CIFPlanes, &DBAllTypeBits, TRUE, TRUE); CIFGen(def, def, &bigArea, CIFPlanes, &DBAllTypeBits, TRUE, TRUE);
if (!CIFHierWriteDisable) if (!CIFHierWriteDisable)
CIFGenSubcells(def, &bigArea, CIFPlanes); CIFGenSubcells(def, &bigArea, CIFPlanes);
if (!CIFArrayWriteDisable) if (!CIFArrayWriteDisable)

View File

@ -540,7 +540,8 @@ drcCifCheck(arg)
arg->dCD_rect = &cifrect; arg->dCD_rect = &cifrect;
oldTiles = DRCstatTiles; oldTiles = DRCstatTiles;
CIFGen(arg->dCD_celldef, checkRect, CIFPlanes, &DBAllTypeBits, TRUE, TRUE); CIFGen(arg->dCD_celldef, arg->dCD_celldef, checkRect, CIFPlanes,
&DBAllTypeBits, TRUE, TRUE);
for (i = 0; i < drcCifStyle->cs_nLayers; i++) for (i = 0; i < drcCifStyle->cs_nLayers; i++)
{ {

View File

@ -1739,7 +1739,7 @@ W3DCIFredisplay(w, rootArea, clipArea)
scx.scx_trans = GeoIdentityTransform; scx.scx_trans = GeoIdentityTransform;
(void) DBTreeSrTiles(&scx, &DBAllButSpaceAndDRCBits, 0, (void) DBTreeSrTiles(&scx, &DBAllButSpaceAndDRCBits, 0,
cifHierCopyFunc, (ClientData) CIFComponentDef); cifHierCopyFunc, (ClientData) CIFComponentDef);
CIFGen(CIFComponentDef, &clipRect, CIFPlanes, &DBAllTypeBits, TRUE, TRUE); CIFGen(CIFComponentDef, cellDef, &clipRect, CIFPlanes, &DBAllTypeBits, TRUE, TRUE);
DBCellClearDef(CIFComponentDef); DBCellClearDef(CIFComponentDef);
w3dClear(); w3dClear();