Finished restoring the plow function to the original capability.
However, various updates are needed to match changes in magic over the years, including handling of non-manhattan geometry, and handling of added DRC rules such as surround and extend.
This commit is contained in:
parent
03933d7b26
commit
dc49771220
Binary file not shown.
|
|
@ -415,13 +415,14 @@ void
|
||||||
prContactLHS(edge)
|
prContactLHS(edge)
|
||||||
Edge *edge; /* Edge being moved (LHS is contact) */
|
Edge *edge; /* Edge being moved (LHS is contact) */
|
||||||
{
|
{
|
||||||
int pNum, pMax;
|
int pNum;
|
||||||
PlaneMask connPlanes = DBConnPlanes[edge->e_ltype];
|
PlaneMask connPlanes = DBConnPlanes[edge->e_ltype];
|
||||||
|
|
||||||
|
/* Remove the plane that has already been processed from the mask */
|
||||||
|
connPlanes &= ~PlaneNumToMaskBit(edge->e_pNum);
|
||||||
|
|
||||||
/* Add the edges of the contact on its other planes */
|
/* Add the edges of the contact on its other planes */
|
||||||
connPlanes &= ~(edge->e_pNum);
|
for (pNum = PL_TECHDEPBASE; pNum < DBNumPlanes; pNum++)
|
||||||
pMax = DBPlane(edge->e_ltype) + 1;
|
|
||||||
for (pNum = pMax - 2; pNum <= pMax; pNum++)
|
|
||||||
if (PlaneMaskHasPlane(connPlanes, pNum))
|
if (PlaneMaskHasPlane(connPlanes, pNum))
|
||||||
(void) plowAtomize(pNum, &edge->e_rect,
|
(void) plowAtomize(pNum, &edge->e_rect,
|
||||||
plowPropagateProcPtr, (ClientData) NULL);
|
plowPropagateProcPtr, (ClientData) NULL);
|
||||||
|
|
@ -431,13 +432,14 @@ int
|
||||||
prContactRHS(edge)
|
prContactRHS(edge)
|
||||||
Edge *edge; /* Edge being moved (RHS is contact) */
|
Edge *edge; /* Edge being moved (RHS is contact) */
|
||||||
{
|
{
|
||||||
int pNum, pMax;
|
int pNum;
|
||||||
PlaneMask connPlanes = DBConnPlanes[edge->e_rtype];
|
PlaneMask connPlanes = DBConnPlanes[edge->e_rtype];
|
||||||
|
|
||||||
|
/* Remove the plane that has already been processed from the mask */
|
||||||
|
connPlanes &= ~PlaneNumToMaskBit(edge->e_pNum);
|
||||||
|
|
||||||
/* Add the edges of the contact on its other planes */
|
/* Add the edges of the contact on its other planes */
|
||||||
connPlanes &= ~(edge->e_pNum);
|
for (pNum = PL_TECHDEPBASE; pNum < DBNumPlanes; pNum++)
|
||||||
pMax = DBPlane(edge->e_ltype) + 1;
|
|
||||||
for (pNum = pMax - 2; pNum <= pMax; pNum++)
|
|
||||||
if (PlaneMaskHasPlane(connPlanes, pNum))
|
if (PlaneMaskHasPlane(connPlanes, pNum))
|
||||||
(void) plowAtomize(pNum, &edge->e_rect,
|
(void) plowAtomize(pNum, &edge->e_rect,
|
||||||
plowPropagateProcPtr, (ClientData) NULL);
|
plowPropagateProcPtr, (ClientData) NULL);
|
||||||
|
|
|
||||||
|
|
@ -538,13 +538,25 @@ plowUpdatePaintTile(tile, ui)
|
||||||
{
|
{
|
||||||
Rect r, rtrans;
|
Rect r, rtrans;
|
||||||
TileType type = TiGetTypeExact(tile);
|
TileType type = TiGetTypeExact(tile);
|
||||||
|
int pNum, pMask;
|
||||||
|
|
||||||
r.r_ybot = BOTTOM(tile);
|
r.r_ybot = BOTTOM(tile);
|
||||||
r.r_ytop = TOP(tile);
|
r.r_ytop = TOP(tile);
|
||||||
r.r_xbot = TRAILING(tile);
|
r.r_xbot = TRAILING(tile);
|
||||||
r.r_xtop = LEADING(tile);
|
r.r_xtop = LEADING(tile);
|
||||||
GeoTransRect(&plowInverseTrans, &r, &rtrans);
|
GeoTransRect(&plowInverseTrans, &r, &rtrans);
|
||||||
DBPaintPlane(ui->pu_def->cd_planes[DBPlane(type)],
|
|
||||||
&rtrans, DBWriteResultTbl[type], ui);
|
pMask = DBTypePlaneMaskTbl[type];
|
||||||
|
|
||||||
|
for (pNum = PL_TECHDEPBASE; pNum < DBNumPlanes; pNum++)
|
||||||
|
{
|
||||||
|
if (PlaneMaskHasPlane(pMask, pNum))
|
||||||
|
{
|
||||||
|
ui->pu_pNum = pNum;
|
||||||
|
DBPaintPlane(ui->pu_def->cd_planes[pNum],
|
||||||
|
&rtrans, DBWriteResultTbl[type], ui);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue