Modified the "gds subcell polygon" command option to split into
three types: "none", "temporary", and "keep" (instead of "true" or "false"). "none" now reverts back to the original behavior, because it was found that saving polygons in subcells prevents them from participating in boolean operations. The "keep" option is the original option (polygons kept in subcells), and "temporary" is the one recently introduced (which puts polygons in subcells and then flattens them). This restores the original method while retaining the recently implemented method. However, a proper solution needs to be found that deals with the problem of boolean operators.
This commit is contained in:
parent
05ad386500
commit
be59d787a1
|
|
@ -606,7 +606,8 @@ calmaParseStructure(filename)
|
||||||
*/
|
*/
|
||||||
DBEraseLabelsByContent(cifReadCellDef, NULL, -1, "");
|
DBEraseLabelsByContent(cifReadCellDef, NULL, -1, "");
|
||||||
|
|
||||||
if ((!CalmaSubcellPolygons) && (locPolygonCount < CalmaPolygonCount))
|
if ((CalmaSubcellPolygons == CALMA_POLYGON_TEMP) &&
|
||||||
|
(locPolygonCount < CalmaPolygonCount))
|
||||||
DBCellEnum(cifReadCellDef, calmaFlattenPolygonFunc, (ClientData)cifReadCellDef);
|
DBCellEnum(cifReadCellDef, calmaFlattenPolygonFunc, (ClientData)cifReadCellDef);
|
||||||
|
|
||||||
DBAdjustLabelsNew(cifReadCellDef, &TiPlaneRect,
|
DBAdjustLabelsNew(cifReadCellDef, &TiPlaneRect,
|
||||||
|
|
|
||||||
|
|
@ -247,13 +247,13 @@ calmaElementBoundary()
|
||||||
/* so we need to set it again. */
|
/* so we need to set it again. */
|
||||||
if (ciftype >= 0) plane = cifCurReadPlanes[ciftype];
|
if (ciftype >= 0) plane = cifCurReadPlanes[ciftype];
|
||||||
|
|
||||||
/* Convert the polygon to rectangles. */
|
/* Save non-Manhattan polygons in their own subcells. */
|
||||||
/* NOTE: This was previously contingent on CalmaSubcellPolygons. */
|
/* NOTE: CALMA_POLYGON_TEMP and CALMA_POLYGON_KEEP read in polygons much
|
||||||
/* However, in practice it has been found to be much faster to read */
|
* faster, but that interferes with boolean processing. This method
|
||||||
/* polygons into subcells and then flatten into the layout instead */
|
* needs to be reworked.
|
||||||
/* of reading polygons directly into the layout. I am unsure why. */
|
*/
|
||||||
|
|
||||||
if (calmaNonManhattan > 0)
|
if ((CalmaSubcellPolygons != CALMA_POLYGON_NONE) && (calmaNonManhattan > 0))
|
||||||
{
|
{
|
||||||
/* Place the polygon in its own subcell */
|
/* Place the polygon in its own subcell */
|
||||||
char newname[] = "polygonXXXXX";
|
char newname[] = "polygonXXXXX";
|
||||||
|
|
@ -281,6 +281,8 @@ calmaElementBoundary()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Convert the polygon to rectangles. */
|
||||||
|
|
||||||
rp = CIFPolyToRects(pathheadp, plane, CIFPaintTable, (PaintUndoInfo *)NULL);
|
rp = CIFPolyToRects(pathheadp, plane, CIFPaintTable, (PaintUndoInfo *)NULL);
|
||||||
CIFFreePath(pathheadp);
|
CIFFreePath(pathheadp);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,9 +55,8 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
|
||||||
/* Globals for Calma reading */
|
/* Globals for Calma reading */
|
||||||
FILETYPE calmaInputFile = NULL; /* Read from this stream */
|
FILETYPE calmaInputFile = NULL; /* Read from this stream */
|
||||||
FILE *calmaErrorFile = NULL; /* Write error output here */
|
FILE *calmaErrorFile = NULL; /* Write error output here */
|
||||||
bool CalmaSubcellPolygons = FALSE; /* Put non-Manhattan polygons
|
unsigned char CalmaSubcellPolygons = CALMA_POLYGON_NONE;
|
||||||
* in their own subcells.
|
/* Read non-Manhattan polygons as-is */
|
||||||
*/
|
|
||||||
int CalmaPolygonCount;
|
int CalmaPolygonCount;
|
||||||
bool CalmaSubcellPaths = FALSE; /* Put paths in their own subcells. */
|
bool CalmaSubcellPaths = FALSE; /* Put paths in their own subcells. */
|
||||||
int CalmaPathCount;
|
int CalmaPathCount;
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
#include "utils/magic.h"
|
#include "utils/magic.h"
|
||||||
|
|
||||||
/* Externally visible variables */
|
/* Externally visible variables */
|
||||||
extern bool CalmaSubcellPolygons;
|
extern unsigned char CalmaSubcellPolygons;
|
||||||
extern bool CalmaSubcellPaths;
|
extern bool CalmaSubcellPaths;
|
||||||
extern bool CalmaDoLabels;
|
extern bool CalmaDoLabels;
|
||||||
extern bool CalmaDoLibrary;
|
extern bool CalmaDoLibrary;
|
||||||
|
|
@ -49,6 +49,15 @@ extern bool CalmaPostOrder;
|
||||||
extern bool CalmaAllowUndefined;
|
extern bool CalmaAllowUndefined;
|
||||||
extern bool CalmaAllowAbstract;
|
extern bool CalmaAllowAbstract;
|
||||||
|
|
||||||
|
/* Definitions used by the return value for CalmaSubcellPolygons */
|
||||||
|
/* CALMA_POLYGON_NONE: Process polygons immediately */
|
||||||
|
/* CALMA_POLYGON_TEMP: Create temporary polygon subcells */
|
||||||
|
/* CALMA_POLYGON_KEEP: Keep polygons in subcells */
|
||||||
|
|
||||||
|
#define CALMA_POLYGON_NONE 0
|
||||||
|
#define CALMA_POLYGON_TEMP 1
|
||||||
|
#define CALMA_POLYGON_KEEP 2
|
||||||
|
|
||||||
/* Externally-visible procedures: */
|
/* Externally-visible procedures: */
|
||||||
extern bool CalmaWrite();
|
extern bool CalmaWrite();
|
||||||
extern void CalmaReadFile();
|
extern void CalmaReadFile();
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,7 @@ CmdCalma(w, cmd)
|
||||||
static char *cmdCalmaYesNo[] = {
|
static char *cmdCalmaYesNo[] = {
|
||||||
"no", "false", "off", "0", "yes", "true", "on", "1", 0 };
|
"no", "false", "off", "0", "yes", "true", "on", "1", 0 };
|
||||||
static char *cmdCalmaAllowDisallow[] = {"disallow", "0", "allow", "1", 0};
|
static char *cmdCalmaAllowDisallow[] = {"disallow", "0", "allow", "1", 0};
|
||||||
|
static char *cmdCalmaPolygonType[] = {"none", "temporary", "keep", 0};
|
||||||
static char *cmdCalmaWarnOptions[] = { "default", "none", "align",
|
static char *cmdCalmaWarnOptions[] = { "default", "none", "align",
|
||||||
"limit", "redirect", "help", 0 };
|
"limit", "redirect", "help", 0 };
|
||||||
static char *cmdCalmaOption[] =
|
static char *cmdCalmaOption[] =
|
||||||
|
|
@ -672,22 +673,44 @@ CmdCalma(w, cmd)
|
||||||
if (cmd->tx_argc == 3)
|
if (cmd->tx_argc == 3)
|
||||||
{
|
{
|
||||||
#ifdef MAGIC_WRAPPER
|
#ifdef MAGIC_WRAPPER
|
||||||
Tcl_SetObjResult(magicinterp, Tcl_NewBooleanObj(CalmaSubcellPolygons));
|
switch (CalmaSubcellPolygons)
|
||||||
|
{
|
||||||
|
case CALMA_POLYGON_NONE:
|
||||||
|
Tcl_SetObjResult(magicinterp, Tcl_NewStringObj("none", 0));
|
||||||
|
break;
|
||||||
|
case CALMA_POLYGON_TEMP:
|
||||||
|
Tcl_SetObjResult(magicinterp, Tcl_NewStringObj("temporary", 0));
|
||||||
|
break;
|
||||||
|
case CALMA_POLYGON_KEEP:
|
||||||
|
Tcl_SetObjResult(magicinterp, Tcl_NewStringObj("keep", 0));
|
||||||
|
break;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
if (CalmaSubcellPolygons)
|
if (CalmaSubcellPolygons == CALMA_POLYGON_NONE)
|
||||||
TxPrintf("Non-manhattan polygons placed in subcells.\n");
|
|
||||||
else
|
|
||||||
TxPrintf("Non-manhattan polygons read as-is.\n");
|
TxPrintf("Non-manhattan polygons read as-is.\n");
|
||||||
|
else if (CalmaSubcellPolygons == CALMA_POLYGON_TEMP)
|
||||||
|
TxPrintf("Non-manhattan polygons placed in temporary subcells.\n");
|
||||||
|
else
|
||||||
|
TxPrintf("Non-manhattan polygons placed in subcells.\n");
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (cmd->tx_argc != 4)
|
else if (cmd->tx_argc != 4)
|
||||||
goto wrongNumArgs;
|
goto wrongNumArgs;
|
||||||
|
|
||||||
option = Lookup(cmd->tx_argv[3], cmdCalmaYesNo);
|
option = Lookup(cmd->tx_argv[3], cmdCalmaPolygonType);
|
||||||
if (option < 0)
|
if (option < 0)
|
||||||
goto wrongNumArgs;
|
{
|
||||||
CalmaSubcellPolygons = (option < 4) ? FALSE : TRUE;
|
option = Lookup(cmd->tx_argv[3], cmdCalmaYesNo);
|
||||||
|
if (option < 0)
|
||||||
|
goto wrongNumArgs;
|
||||||
|
else if (option < 4)
|
||||||
|
CalmaSubcellPolygons = (unsigned char)CALMA_POLYGON_NONE;
|
||||||
|
else
|
||||||
|
CalmaSubcellPolygons = (unsigned char)CALMA_POLYGON_KEEP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CalmaSubcellPolygons = (unsigned char)option;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case CALMA_NO_DUP:
|
case CALMA_NO_DUP:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue