Modified the CIFGenLayer() routine to be aware of when it is called during
hierarchical processing from CIFGenSubcells() and CIFGenArrays(), and to avoid certain operators that are useless and harmful when applied hierarchically; namely squares, slots, bbox, boundary, and net.
This commit is contained in:
parent
73629467ed
commit
75a18053f8
|
|
@ -799,6 +799,9 @@ calmaProcessDef(def, outf, do_library)
|
||||||
|
|
||||||
if (isReadOnly && hasContent && CalmaAddendum) return (0);
|
if (isReadOnly && hasContent && CalmaAddendum) return (0);
|
||||||
|
|
||||||
|
/* Give some feedback to the user */
|
||||||
|
TxPrintf(" Writing cell %s\n", def->cd_name);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Output the definitions for any of our descendants that have
|
* Output the definitions for any of our descendants that have
|
||||||
* not already been output. Numbers are assigned to the subcells
|
* not already been output. Numbers are assigned to the subcells
|
||||||
|
|
@ -1008,7 +1011,8 @@ 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, def, &bigArea, CIFPlanes, &DBAllTypeBits, TRUE, TRUE, (ClientData) f);
|
CIFGen(def, def, &bigArea, CIFPlanes, &DBAllTypeBits, TRUE, TRUE, FALSE,
|
||||||
|
(ClientData)f);
|
||||||
if (!CIFHierWriteDisable)
|
if (!CIFHierWriteDisable)
|
||||||
CIFGenSubcells(def, &bigArea, CIFPlanes);
|
CIFGenSubcells(def, &bigArea, CIFPlanes);
|
||||||
if (!CIFArrayWriteDisable)
|
if (!CIFArrayWriteDisable)
|
||||||
|
|
|
||||||
44
cif/CIFgen.c
44
cif/CIFgen.c
|
|
@ -4656,7 +4656,7 @@ cifBridgeLimFunc2(tile, brlims)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Plane *
|
Plane *
|
||||||
CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
CIFGenLayer(op, area, cellDef, origDef, temps, hier, 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
|
||||||
|
|
@ -4672,6 +4672,7 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
Plane *temps[]; /* Temporary layers to be used when needed
|
Plane *temps[]; /* Temporary layers to be used when needed
|
||||||
* for operation.
|
* for operation.
|
||||||
*/
|
*/
|
||||||
|
bool hier; /* TRUE if called from CIFGenSubcell or CIFGenArray */
|
||||||
ClientData clientdata; /*
|
ClientData clientdata; /*
|
||||||
* Data that may be passed to the CIF operation
|
* Data that may be passed to the CIF operation
|
||||||
* function.
|
* function.
|
||||||
|
|
@ -4689,6 +4690,7 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
BridgeStruct brs;
|
BridgeStruct brs;
|
||||||
BridgeLimStruct brlims;
|
BridgeLimStruct brlims;
|
||||||
BridgeData *bridge;
|
BridgeData *bridge;
|
||||||
|
bool hstop = FALSE;
|
||||||
int (*cifGrowFuncPtr)() = (CIFCurStyle->cs_flags & CWF_GROW_EUCLIDEAN) ?
|
int (*cifGrowFuncPtr)() = (CIFCurStyle->cs_flags & CWF_GROW_EUCLIDEAN) ?
|
||||||
cifGrowEuclideanFunc : cifGrowFunc;
|
cifGrowEuclideanFunc : cifGrowFunc;
|
||||||
|
|
||||||
|
|
@ -4703,6 +4705,10 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
|
|
||||||
/* Go through the geometric operations and process them one
|
/* Go through the geometric operations and process them one
|
||||||
* at a time.
|
* at a time.
|
||||||
|
*
|
||||||
|
* NOTE: Some opcodes (and whatever follows them) should never
|
||||||
|
* be run during hierarchical processing. That includes BOUNDARY,
|
||||||
|
* SQUARES/SLOTS, BBOX, and NET.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for ( ; op != NULL; op = op->co_next)
|
for ( ; op != NULL; op = op->co_next)
|
||||||
|
|
@ -4961,6 +4967,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CIFOP_SQUARES:
|
case CIFOP_SQUARES:
|
||||||
|
if (hier)
|
||||||
|
{
|
||||||
|
hstop = TRUE; /* Stop hierarchical processing */
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (CalmaContactArrays == FALSE)
|
if (CalmaContactArrays == FALSE)
|
||||||
{
|
{
|
||||||
DBClearPaintPlane(nextPlane);
|
DBClearPaintPlane(nextPlane);
|
||||||
|
|
@ -4973,6 +4984,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CIFOP_SQUARES_G:
|
case CIFOP_SQUARES_G:
|
||||||
|
if (hier)
|
||||||
|
{
|
||||||
|
hstop = TRUE; /* Stop hierarchical processing */
|
||||||
|
break;
|
||||||
|
}
|
||||||
DBClearPaintPlane(nextPlane);
|
DBClearPaintPlane(nextPlane);
|
||||||
cifPlane = nextPlane;
|
cifPlane = nextPlane;
|
||||||
cifSquaresFillArea(op, cellDef, curPlane);
|
cifSquaresFillArea(op, cellDef, curPlane);
|
||||||
|
|
@ -4982,6 +4998,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CIFOP_SLOTS:
|
case CIFOP_SLOTS:
|
||||||
|
if (hier)
|
||||||
|
{
|
||||||
|
hstop = TRUE; /* Stop hierarchical processing */
|
||||||
|
break;
|
||||||
|
}
|
||||||
DBClearPaintPlane(nextPlane);
|
DBClearPaintPlane(nextPlane);
|
||||||
cifPlane = nextPlane;
|
cifPlane = nextPlane;
|
||||||
cifSlotsFillArea(op, cellDef, curPlane);
|
cifSlotsFillArea(op, cellDef, curPlane);
|
||||||
|
|
@ -5002,6 +5023,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CIFOP_NET:
|
case CIFOP_NET:
|
||||||
|
if (hier)
|
||||||
|
{
|
||||||
|
hstop = TRUE; /* Stop hierarchical processing */
|
||||||
|
break;
|
||||||
|
}
|
||||||
netname = (char *)op->co_client;
|
netname = (char *)op->co_client;
|
||||||
cifPlane = curPlane;
|
cifPlane = curPlane;
|
||||||
ttype = CmdFindNetProc(netname, CIFDummyUse, &bbox, FALSE);
|
ttype = CmdFindNetProc(netname, CIFDummyUse, &bbox, FALSE);
|
||||||
|
|
@ -5022,6 +5048,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CIFOP_BOUNDARY:
|
case CIFOP_BOUNDARY:
|
||||||
|
if (hier)
|
||||||
|
{
|
||||||
|
hstop = TRUE; /* Stop hierarchical processing */
|
||||||
|
break;
|
||||||
|
}
|
||||||
cifPlane = curPlane;
|
cifPlane = curPlane;
|
||||||
/* This function for cifoutput only. cifinput handled separately. */
|
/* This function for cifoutput only. cifinput handled separately. */
|
||||||
|
|
||||||
|
|
@ -5047,6 +5078,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CIFOP_BBOX:
|
case CIFOP_BBOX:
|
||||||
|
if (hier)
|
||||||
|
{
|
||||||
|
hstop = TRUE; /* Stop hierarchical processing */
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (CIFErrorDef == NULL) break;
|
if (CIFErrorDef == NULL) break;
|
||||||
|
|
||||||
/* co_client contains the flag (1) for top-level only */
|
/* co_client contains the flag (1) for top-level only */
|
||||||
|
|
@ -5084,6 +5120,7 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
default:
|
default:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (hstop) break; /* Don't process any further rules */
|
||||||
}
|
}
|
||||||
|
|
||||||
return curPlane;
|
return curPlane;
|
||||||
|
|
@ -5112,7 +5149,7 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
CIFGen(cellDef, origDef, area, planes, layers, replace, genAllPlanes, clientdata)
|
CIFGen(cellDef, origDef, area, planes, layers, replace, genAllPlanes, hier, 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 */
|
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
|
||||||
|
|
@ -5135,6 +5172,7 @@ CIFGen(cellDef, origDef, area, planes, layers, replace, genAllPlanes, clientdata
|
||||||
* those layers not specified as being
|
* those layers not specified as being
|
||||||
* generated in the 'layers' mask above.
|
* generated in the 'layers' mask above.
|
||||||
*/
|
*/
|
||||||
|
bool hier; /* TRUE if called from CIFGenSubcell or CIFGenArray */
|
||||||
ClientData clientdata; /* Data that may be passed along to the
|
ClientData clientdata; /* Data that may be passed along to the
|
||||||
* CIF operation functions.
|
* CIF operation functions.
|
||||||
*/
|
*/
|
||||||
|
|
@ -5160,7 +5198,7 @@ CIFGen(cellDef, origDef, 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, origDef, new, clientdata);
|
&expanded, cellDef, origDef, new, hier, 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,
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "tcltk/tclmagic.h"
|
||||||
#include "utils/magic.h"
|
#include "utils/magic.h"
|
||||||
#include "utils/geometry.h"
|
#include "utils/geometry.h"
|
||||||
#include "tiles/tile.h"
|
#include "tiles/tile.h"
|
||||||
|
|
@ -35,6 +36,7 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
|
||||||
#include "cif/CIFint.h"
|
#include "cif/CIFint.h"
|
||||||
#include "cif/cif.h"
|
#include "cif/cif.h"
|
||||||
#include "drc/drc.h"
|
#include "drc/drc.h"
|
||||||
|
#include "graphics/graphics.h"
|
||||||
#include "textio/textio.h"
|
#include "textio/textio.h"
|
||||||
#include "utils/undo.h"
|
#include "utils/undo.h"
|
||||||
#include "utils/malloc.h"
|
#include "utils/malloc.h"
|
||||||
|
|
@ -326,7 +328,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, scx->scx_use->cu_def, &rootArea,
|
CIFGen(CIFComponentDef, scx->scx_use->cu_def, &rootArea,
|
||||||
CIFComponentPlanes, &CIFCurStyle->cs_hierLayers, FALSE, TRUE);
|
CIFComponentPlanes, &CIFCurStyle->cs_hierLayers, FALSE,
|
||||||
|
TRUE, TRUE, (ClientData)NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -523,6 +526,8 @@ CIFGenSubcells(def, area, output)
|
||||||
int stepSize, x, y, i, radius, oldTileOps, oldTileOps2;
|
int stepSize, x, y, i, radius, oldTileOps, oldTileOps2;
|
||||||
Rect totalArea, square, interaction;
|
Rect totalArea, square, interaction;
|
||||||
SearchContext scx;
|
SearchContext scx;
|
||||||
|
int cuts, totcuts;
|
||||||
|
float pdone, plast;
|
||||||
|
|
||||||
UndoDisable();
|
UndoDisable();
|
||||||
CIFInitCells();
|
CIFInitCells();
|
||||||
|
|
@ -537,6 +542,16 @@ CIFGenSubcells(def, area, output)
|
||||||
scx.scx_use = CIFDummyUse;
|
scx.scx_use = CIFDummyUse;
|
||||||
scx.scx_trans = GeoIdentityTransform;
|
scx.scx_trans = GeoIdentityTransform;
|
||||||
|
|
||||||
|
/* This routine can take a long time, so use the display
|
||||||
|
* timer to force a 5-second progress check (like is done
|
||||||
|
* with extract)
|
||||||
|
*/
|
||||||
|
GrDisplayStatus = DISPLAY_IN_PROGRESS;
|
||||||
|
SigSetTimer(5); /* Print at 5-second intervals */
|
||||||
|
cuts = 0;
|
||||||
|
pdone = 0.0;
|
||||||
|
plast = 0.0;
|
||||||
|
|
||||||
/* Any tile operations processed here get billed to hierarchy
|
/* Any tile operations processed here get billed to hierarchy
|
||||||
* in addition to being added to the total.
|
* in addition to being added to the total.
|
||||||
*/
|
*/
|
||||||
|
|
@ -551,6 +566,12 @@ CIFGenSubcells(def, area, output)
|
||||||
|
|
||||||
totalArea = *area;
|
totalArea = *area;
|
||||||
GeoClip(&totalArea, &def->cd_bbox);
|
GeoClip(&totalArea, &def->cd_bbox);
|
||||||
|
|
||||||
|
totcuts = (totalArea.r_ytop - totalArea.r_ybot + stepSize - 1)
|
||||||
|
/ stepSize;
|
||||||
|
totcuts *= ((totalArea.r_xtop - totalArea.r_xbot + stepSize - 1)
|
||||||
|
/ stepSize);
|
||||||
|
|
||||||
for (y = totalArea.r_ybot; y < totalArea.r_ytop; y += stepSize)
|
for (y = totalArea.r_ybot; y < totalArea.r_ytop; y += stepSize)
|
||||||
for (x = totalArea.r_xbot; x < totalArea.r_xtop; x += stepSize)
|
for (x = totalArea.r_xbot; x < totalArea.r_xtop; x += stepSize)
|
||||||
{
|
{
|
||||||
|
|
@ -576,7 +597,8 @@ CIFGenSubcells(def, area, output)
|
||||||
cifHierCopyFunc, (ClientData) CIFTotalDef);
|
cifHierCopyFunc, (ClientData) CIFTotalDef);
|
||||||
CIFErrorDef = def;
|
CIFErrorDef = def;
|
||||||
CIFGen(CIFTotalDef, def, &interaction, CIFTotalPlanes,
|
CIFGen(CIFTotalDef, def, &interaction, CIFTotalPlanes,
|
||||||
&CIFCurStyle->cs_hierLayers, TRUE, TRUE);
|
&CIFCurStyle->cs_hierLayers, TRUE, TRUE, TRUE,
|
||||||
|
(ClientData)NULL);
|
||||||
|
|
||||||
/* Now go through all the subcells overlapping the area
|
/* Now go through all the subcells overlapping the area
|
||||||
* and generate CIF for each subcell individually. OR this
|
* and generate CIF for each subcell individually. OR this
|
||||||
|
|
@ -593,7 +615,8 @@ CIFGenSubcells(def, area, output)
|
||||||
|
|
||||||
CIFErrorDef = (CellDef *) NULL;
|
CIFErrorDef = (CellDef *) NULL;
|
||||||
CIFGen(def, def, &interaction, CIFComponentPlanes,
|
CIFGen(def, def, &interaction, CIFComponentPlanes,
|
||||||
&CIFCurStyle->cs_hierLayers, FALSE, TRUE);
|
&CIFCurStyle->cs_hierLayers, FALSE, TRUE, TRUE,
|
||||||
|
(ClientData)NULL);
|
||||||
|
|
||||||
/* Make sure everything in the pieces is also in the overall
|
/* Make sure everything in the pieces is also in the overall
|
||||||
* CIF, then erase the piece stuff from the overall, and
|
* CIF, then erase the piece stuff from the overall, and
|
||||||
|
|
@ -618,9 +641,33 @@ CIFGenSubcells(def, area, output)
|
||||||
CIFHierRects += CIFTileOps - oldTileOps2;
|
CIFHierRects += CIFTileOps - oldTileOps2;
|
||||||
|
|
||||||
cifHierCleanup();
|
cifHierCleanup();
|
||||||
|
|
||||||
|
cuts++;
|
||||||
|
pdone = 100.0 * ((float)cuts / (float)totcuts);
|
||||||
|
if ((((pdone - plast) > 1.0) || (cuts == totcuts)) && (cuts > 1))
|
||||||
|
{
|
||||||
|
/* Only print something if the 5-second timer has expired */
|
||||||
|
if (GrDisplayStatus == DISPLAY_BREAK_PENDING)
|
||||||
|
{
|
||||||
|
TxPrintf("Completed %d%%\n", (int)(pdone + 0.5));
|
||||||
|
plast = pdone;
|
||||||
|
TxFlushOut();
|
||||||
|
|
||||||
|
GrDisplayStatus = DISPLAY_IN_PROGRESS;
|
||||||
|
SigSetTimer(5);
|
||||||
|
}
|
||||||
|
#ifdef MAGIC_WRAPPER
|
||||||
|
/* We need to let Tk paint the console display */
|
||||||
|
while (Tcl_DoOneEvent(TCL_DONT_WAIT) != 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CIFHierTileOps += CIFTileOps - oldTileOps;
|
CIFHierTileOps += CIFTileOps - oldTileOps;
|
||||||
|
|
||||||
|
GrDisplayStatus = DISPLAY_IDLE;
|
||||||
|
SigRemoveTimer();
|
||||||
|
|
||||||
UndoEnable();
|
UndoEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -680,7 +727,8 @@ cifHierElementFunc(use, transform, x, y, checkArea)
|
||||||
|
|
||||||
CIFErrorDef = (CellDef *) NULL;
|
CIFErrorDef = (CellDef *) NULL;
|
||||||
CIFGen(CIFComponentDef, use->cu_def, checkArea, CIFComponentPlanes,
|
CIFGen(CIFComponentDef, use->cu_def, checkArea, CIFComponentPlanes,
|
||||||
&CIFCurStyle->cs_hierLayers, FALSE, TRUE);
|
&CIFCurStyle->cs_hierLayers, FALSE, TRUE, TRUE,
|
||||||
|
(ClientData)NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -921,7 +969,8 @@ cifHierArrayFunc(scx, output)
|
||||||
(ClientData) &A);
|
(ClientData) &A);
|
||||||
CIFErrorDef = use->cu_parent;
|
CIFErrorDef = use->cu_parent;
|
||||||
CIFGen(CIFTotalDef, use->cu_def, &A, CIFTotalPlanes,
|
CIFGen(CIFTotalDef, use->cu_def, &A, CIFTotalPlanes,
|
||||||
&CIFCurStyle->cs_hierLayers, FALSE, TRUE);
|
&CIFCurStyle->cs_hierLayers, FALSE, TRUE, TRUE,
|
||||||
|
(ClientData)NULL);
|
||||||
anyInteractions = TRUE;
|
anyInteractions = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -938,7 +987,8 @@ cifHierArrayFunc(scx, output)
|
||||||
(ClientData) &C);
|
(ClientData) &C);
|
||||||
CIFErrorDef = use->cu_parent;
|
CIFErrorDef = use->cu_parent;
|
||||||
CIFGen(CIFTotalDef, use->cu_def, &C, CIFTotalPlanes,
|
CIFGen(CIFTotalDef, use->cu_def, &C, CIFTotalPlanes,
|
||||||
&CIFCurStyle->cs_hierLayers, FALSE, TRUE);
|
&CIFCurStyle->cs_hierLayers, FALSE, TRUE, TRUE,
|
||||||
|
(ClientData)NULL);
|
||||||
anyInteractions = TRUE;
|
anyInteractions = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -955,7 +1005,8 @@ cifHierArrayFunc(scx, output)
|
||||||
(ClientData) &B);
|
(ClientData) &B);
|
||||||
CIFErrorDef = use->cu_parent;
|
CIFErrorDef = use->cu_parent;
|
||||||
CIFGen(CIFTotalDef, use->cu_def, &B, CIFTotalPlanes,
|
CIFGen(CIFTotalDef, use->cu_def, &B, CIFTotalPlanes,
|
||||||
&CIFCurStyle->cs_hierLayers, FALSE, TRUE);
|
&CIFCurStyle->cs_hierLayers, FALSE, TRUE, TRUE,
|
||||||
|
(ClientData)NULL);
|
||||||
|
|
||||||
/* D */
|
/* D */
|
||||||
|
|
||||||
|
|
@ -968,7 +1019,8 @@ cifHierArrayFunc(scx, output)
|
||||||
(ClientData) &D);
|
(ClientData) &D);
|
||||||
CIFErrorDef = use->cu_parent;
|
CIFErrorDef = use->cu_parent;
|
||||||
CIFGen(CIFTotalDef, use->cu_def, &D, CIFTotalPlanes,
|
CIFGen(CIFTotalDef, use->cu_def, &D, CIFTotalPlanes,
|
||||||
&CIFCurStyle->cs_hierLayers, FALSE, TRUE);
|
&CIFCurStyle->cs_hierLayers, FALSE, TRUE, TRUE,
|
||||||
|
(ClientData)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (anyInteractions)
|
if (anyInteractions)
|
||||||
|
|
|
||||||
|
|
@ -572,7 +572,8 @@ 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, (CellDef *)NULL, cifCurReadPlanes);
|
&TiPlaneRect, (CellDef *)NULL, (CellDef *)NULL,
|
||||||
|
cifCurReadPlanes, FALSE, (ClientData)NULL);
|
||||||
|
|
||||||
/* 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.
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,8 @@ CIFPaintLayer(rootDef, area, cifLayer, magicLayer, paintDef)
|
||||||
cifHierCopyFunc, (ClientData) CIFComponentDef);
|
cifHierCopyFunc, (ClientData) CIFComponentDef);
|
||||||
oldCount = DBWFeedbackCount;
|
oldCount = DBWFeedbackCount;
|
||||||
|
|
||||||
CIFGen(CIFComponentDef, rootDef, area, CIFPlanes, &depend, TRUE, TRUE);
|
CIFGen(CIFComponentDef, rootDef, area, CIFPlanes, &depend, TRUE, TRUE, FALSE,
|
||||||
|
(ClientData)NULL);
|
||||||
DBCellClearDef(CIFComponentDef);
|
DBCellClearDef(CIFComponentDef);
|
||||||
|
|
||||||
/* Report any errors that occurred. */
|
/* Report any errors that occurred. */
|
||||||
|
|
@ -278,7 +279,8 @@ 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, rootDef, area, CIFPlanes, &depend, TRUE, TRUE);
|
CIFGen(CIFComponentDef, rootDef, area, CIFPlanes, &depend, TRUE, TRUE,
|
||||||
|
FALSE, (ClientData)NULL);
|
||||||
DBCellClearDef(CIFComponentDef);
|
DBCellClearDef(CIFComponentDef);
|
||||||
|
|
||||||
/* Report any errors that occurred. */
|
/* Report any errors that occurred. */
|
||||||
|
|
@ -441,7 +443,8 @@ 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, rootDef, area, CIFPlanes, &depend, TRUE, TRUE);
|
CIFGen(CIFComponentDef, rootDef, area, CIFPlanes, &depend, TRUE, TRUE,
|
||||||
|
FALSE, (ClientData)NULL);
|
||||||
DBCellClearDef(CIFComponentDef);
|
DBCellClearDef(CIFComponentDef);
|
||||||
|
|
||||||
cstats.coverage = 0;
|
cstats.coverage = 0;
|
||||||
|
|
|
||||||
|
|
@ -1537,6 +1537,12 @@ cifComputeRadii(layer, des)
|
||||||
|
|
||||||
for (op = layer->cl_ops; op != NULL; op = op->co_next)
|
for (op = layer->cl_ops; op != NULL; op = op->co_next)
|
||||||
{
|
{
|
||||||
|
/* BBOX and NET operators should never be used hierarchically */
|
||||||
|
/* so ignore any grow/shrink operators that come after them. */
|
||||||
|
|
||||||
|
if (op->co_opcode == CIFOP_BBOX || op->co_opcode == CIFOP_NET)
|
||||||
|
break;
|
||||||
|
|
||||||
/* If CIF layers are used, switch to the max of current
|
/* If CIF layers are used, switch to the max of current
|
||||||
* distances and those of the layers used.
|
* distances and those of the layers used.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1597,6 +1603,7 @@ cifComputeRadii(layer, des)
|
||||||
case CIFOP_BRIDGELIM: break;
|
case CIFOP_BRIDGELIM: break;
|
||||||
case CIFOP_SQUARES: break;
|
case CIFOP_SQUARES: break;
|
||||||
case CIFOP_SQUARES_G: break;
|
case CIFOP_SQUARES_G: break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -378,7 +378,8 @@ 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, def, &bigArea, CIFPlanes, &DBAllTypeBits, TRUE, TRUE);
|
CIFGen(def, def, &bigArea, CIFPlanes, &DBAllTypeBits, TRUE, TRUE, FALSE,
|
||||||
|
(ClientData)NULL);
|
||||||
if (!CIFHierWriteDisable)
|
if (!CIFHierWriteDisable)
|
||||||
CIFGenSubcells(def, &bigArea, CIFPlanes);
|
CIFGenSubcells(def, &bigArea, CIFPlanes);
|
||||||
if (!CIFArrayWriteDisable)
|
if (!CIFArrayWriteDisable)
|
||||||
|
|
|
||||||
|
|
@ -552,7 +552,7 @@ drcCifCheck(arg)
|
||||||
oldTiles = DRCstatTiles;
|
oldTiles = DRCstatTiles;
|
||||||
|
|
||||||
CIFGen(arg->dCD_celldef, arg->dCD_celldef, checkRect, CIFPlanes,
|
CIFGen(arg->dCD_celldef, arg->dCD_celldef, checkRect, CIFPlanes,
|
||||||
&DBAllTypeBits, TRUE, TRUE);
|
&DBAllTypeBits, TRUE, TRUE, FALSE, (ClientData)NULL);
|
||||||
|
|
||||||
for (i = 0; i < drcCifStyle->cs_nLayers; i++)
|
for (i = 0; i < drcCifStyle->cs_nLayers; i++)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1739,7 +1739,8 @@ 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, cellDef, &clipRect, CIFPlanes, &DBAllTypeBits, TRUE, TRUE);
|
CIFGen(CIFComponentDef, cellDef, &clipRect, CIFPlanes, &DBAllTypeBits, TRUE,
|
||||||
|
TRUE, FALSE, (ClientData)NULL);
|
||||||
DBCellClearDef(CIFComponentDef);
|
DBCellClearDef(CIFComponentDef);
|
||||||
|
|
||||||
w3dClear();
|
w3dClear();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue