diff --git a/cif/CIFgen.c b/cif/CIFgen.c index c053f9b6..9315e36e 100644 --- a/cif/CIFgen.c +++ b/cif/CIFgen.c @@ -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) */ diff --git a/cif/CIFtech.c b/cif/CIFtech.c index 38a7d566..7d4a5360 100644 --- a/cif/CIFtech.c +++ b/cif/CIFtech.c @@ -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]);