Corrected an error in the "bloat-all" operator of the CIF generation,
which was failing to clear tiles in the layout of the "processed" state, leading to unpredicatable results if the same layout layer is used in a subsequent CIF operation.
This commit is contained in:
parent
a015b7f8eb
commit
a67b8cc395
74
cif/CIFgen.c
74
cif/CIFgen.c
|
|
@ -1024,6 +1024,27 @@ endbloat:
|
||||||
STACKPUSH((ClientData) (tp), stack); \
|
STACKPUSH((ClientData) (tp), stack); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*-------------------------------------------------------
|
||||||
|
*
|
||||||
|
* cifProcessResetFunc --
|
||||||
|
*
|
||||||
|
* Unmark tiles
|
||||||
|
*
|
||||||
|
* Results: Return 0 to keep the search going.
|
||||||
|
*
|
||||||
|
*-------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
cifProcessResetFunc(tile, clientData)
|
||||||
|
Tile *tile;
|
||||||
|
ClientData clientData; /* unused */
|
||||||
|
{
|
||||||
|
tile->ti_client = (ClientData) CIF_UNPROCESSED;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*-------------------------------------------------------
|
*-------------------------------------------------------
|
||||||
*
|
*
|
||||||
|
|
@ -1260,6 +1281,21 @@ cifBloatAllFunc(tile, bls)
|
||||||
STACKPUSH(tp, BloatStack);
|
STACKPUSH(tp, BloatStack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Reset marked tiles */
|
||||||
|
|
||||||
|
if (bloats->bl_plane < 0) /* Bloat types are CIF types */
|
||||||
|
{
|
||||||
|
temps = bls->temps;
|
||||||
|
for (ttype = 0; ttype < TT_MAXTYPES; ttype++, temps++)
|
||||||
|
if (bloats->bl_distance[ttype] > 0)
|
||||||
|
(void) DBSrPaintArea((Tile *)NULL, *temps, &TiPlaneRect,
|
||||||
|
&CIFSolidBits, cifProcessResetFunc, (ClientData)NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DBSrPaintArea((Tile *)NULL, def->cd_planes[bloats->bl_plane], &TiPlaneRect,
|
||||||
|
&connect, cifProcessResetFunc, (ClientData)NULL);
|
||||||
|
|
||||||
return 0; /* Keep the search alive. . . */
|
return 0; /* Keep the search alive. . . */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2188,28 +2224,6 @@ cifSquaresStripFunc(tile, stripsData)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
*-------------------------------------------------------
|
|
||||||
*
|
|
||||||
* cifSquaresResetFunc --
|
|
||||||
*
|
|
||||||
* Unmark tiles
|
|
||||||
*
|
|
||||||
* Results: Return 0 to keep the search going.
|
|
||||||
*
|
|
||||||
*-------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
cifSquaresResetFunc(tile, clientData)
|
|
||||||
Tile *tile;
|
|
||||||
ClientData clientData; /* unused */
|
|
||||||
{
|
|
||||||
tile->ti_client = (ClientData) CIF_UNPROCESSED;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*-------------------------------------------------------
|
*-------------------------------------------------------
|
||||||
*
|
*
|
||||||
|
|
@ -2387,10 +2401,6 @@ cifRectBoundingBox(op, cellDef, plane)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear all the tiles that were processed */
|
|
||||||
DBSrPaintArea((Tile *)NULL, plane, &TiPlaneRect, &CIFSolidBits,
|
|
||||||
cifSquaresResetFunc, (ClientData)NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -2725,7 +2735,7 @@ cifSquaresFillArea(op, cellDef, plane)
|
||||||
|
|
||||||
/* Clear all the tiles that were processed */
|
/* Clear all the tiles that were processed */
|
||||||
DBSrPaintArea((Tile *)NULL, plane, &TiPlaneRect, &CIFSolidBits,
|
DBSrPaintArea((Tile *)NULL, plane, &TiPlaneRect, &CIFSolidBits,
|
||||||
cifSquaresResetFunc, (ClientData)NULL);
|
cifProcessResetFunc, (ClientData)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -3088,7 +3098,7 @@ cifSlotsFillArea(op, cellDef, plane)
|
||||||
|
|
||||||
/* Clear all the tiles that were processed */
|
/* Clear all the tiles that were processed */
|
||||||
DBSrPaintArea((Tile *)NULL, plane, &TiPlaneRect, &CIFSolidBits,
|
DBSrPaintArea((Tile *)NULL, plane, &TiPlaneRect, &CIFSolidBits,
|
||||||
cifSquaresResetFunc, (ClientData)NULL);
|
cifProcessResetFunc, (ClientData)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -4848,11 +4858,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, clientdata)
|
||||||
cifPlane = nextPlane;
|
cifPlane = nextPlane;
|
||||||
cifScale = 1;
|
cifScale = 1;
|
||||||
/* First copy the existing paint into the target plane */
|
/* First copy the existing paint into the target plane */
|
||||||
(void) DBSrPaintArea((Tile *) NULL, curPlane, &TiPlaneRect,
|
DBSrPaintArea((Tile *) NULL, curPlane, &TiPlaneRect,
|
||||||
&CIFSolidBits, cifPaintFunc, (ClientData)CIFPaintTable);
|
&CIFSolidBits, cifPaintFunc, (ClientData)CIFPaintTable);
|
||||||
|
DBSrPaintArea((Tile *) NULL, curPlane, &TiPlaneRect,
|
||||||
|
&DBSpaceBits, cifCloseFunc, (ClientData)&curPlane);
|
||||||
|
|
||||||
(void) DBSrPaintArea((Tile *) NULL, curPlane, &TiPlaneRect,
|
|
||||||
&DBSpaceBits, cifCloseFunc, (ClientData)&curPlane);
|
|
||||||
temp = curPlane;
|
temp = curPlane;
|
||||||
curPlane = nextPlane;
|
curPlane = nextPlane;
|
||||||
nextPlane = temp;
|
nextPlane = temp;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue