Added a new CIF operator "not-interact" which is complementary to

"interact", because it was trivially easy to implement and saves
processing vs. doing the same thing with two templayers and an
"and-not" operator.
This commit is contained in:
Tim Edwards 2025-02-04 20:43:30 -05:00
parent 21b810b375
commit a5653c8fca
2 changed files with 13 additions and 0 deletions

View File

@ -4752,6 +4752,13 @@ cifInteractingRegions(
}
}
/* op->co_client is an invert bit indicating the rule is "not-interact",
* so invert the sense of "interacts". Then the non-interacting regions
* will be kept and the interacting regions will be discarded.
*/
if (op->co_client == (ClientData)1)
interacts = (interacts) ? FALSE : TRUE;
/* Clear the tiles that were processed in this set, first copying them */
/* to the destination if this region was found to be interacting with */
/* op->co_paintMask (op->co_cifMask) */

View File

@ -110,6 +110,7 @@ cifTechFreeStyle(void)
case CIFOP_BBOX:
case CIFOP_MAXRECT:
case CIFOP_BOUNDARY:
case CIFOP_INTERACT:
/* These options use co_client to hold a single */
/* integer value, so it is not allocated. */
break;
@ -1096,6 +1097,11 @@ CIFTechLine(
newOp->co_opcode = CIFOP_BRIDGELIM;
else if (strcmp(argv[0], "interact") == 0)
newOp->co_opcode = CIFOP_INTERACT;
else if (strcmp(argv[0], "not-interact") == 0)
{
newOp->co_opcode = CIFOP_INTERACT;
newOp->co_client = (ClientData)1;
}
else
{
TechError("Unknown statement \"%s\".\n", argv[0]);