防止裁剪器合并多边形?

Prevent clipper from merging polygons?

当我计算两个相互接触的形状(例如,矩形 A 在一个更大的矩形 B 中,在矩形 A 处有一个孔)和剪辑形状(矩形 C)之间的差异时,这两个接触的形状被合并,因为它们共享相同的边,然后执行裁剪。

是否可以在裁剪时避免合并接触形状?

下面是两个形状(绿色的A和红色的B)和剪辑(所以操作是:A & B - Clip)之间的区别的例子,它returns蓝色的形状:

我想要这两个形状而不是蓝色矩形:

交集会给出:

这会给出我想要的四种形状:

我知道我可以对每个形状分别进行操作,但恐怕成本会更高。

备注

这是异或的结果:

手上我自己计算运算:

  1. 计算(剪辑形状和其他形状的)边之间的交点。
  2. 对于每个顶点:按角度对边进行排序(强制)
  3. 顺时针和逆时针遍历每条边以计算带有孔的新多边形

这已经足够高效了,但我需要一个 space 分区数据结构来对边进行排序并快速对它们的交集进行排序。