Corrected some issues related to the handling of substrate hierarchy.

Most of this had to do with the incorrect use of the parent's substrate
name in extHierSubstrate().  After the correction, there still remains
an issue that is caused when a labeled isolated substrate region overlaps
an extraction tile boundary.  I believe that this particular error has
existed for some time and is not new, so I am committing these changes.
This commit is contained in:
Tim Edwards
2022-02-24 16:47:11 -05:00
parent 3d41b3e98b
commit db4fa65bfc
5 changed files with 82 additions and 59 deletions
+9 -2
View File
@@ -397,6 +397,7 @@ DBCellGenerateSubstrate(scx, subType, notSubMask, subShieldMask, targetDef)
int plane;
Rect rect;
TileTypeBitMask allButSubMask;
TileTypeBitMask defaultSubTypeMask;
int dbEraseSubFunc();
int dbPaintSubFunc();
int dbEraseNonSub();
@@ -417,9 +418,15 @@ DBCellGenerateSubstrate(scx, subType, notSubMask, subShieldMask, targetDef)
csd.csd_pNum = plane;
csd.csd_modified = FALSE;
/* First paint the substrate type in the temporary plane over the */
/* area of all substrate shield types. */
/* The substrate type will be redefined to denote only areas of */
/* isolated substrate. The first step is to erase the default */
/* substrate everywhere so that it can be regenerated automatically */
/* Note: xMask is always zero, as this is only called from extract routines */
TTMaskSetOnlyType(&defaultSubTypeMask, subType);
DBTreeSrTiles(scx, &defaultSubTypeMask, 0, dbEraseSubFunc, (ClientData)&csd);
/* Next, paint the substrate type in the temporary plane over the */
/* area of all substrate shield types. */
DBTreeSrTiles(scx, subShieldMask, 0, dbPaintSubFunc, (ClientData)&csd);
if (csd.csd_modified == FALSE) return NULL;