Xor returns the boolean path operation of path p XOR q, i.e. the symmetric difference of both. It removes all self-intersections and overlapping areas, orients all filling paths CCW and all holes CW, and tries to separate paths as much as possible. Paths are grouped by the filling/outer ring followe
(q *Path)
| 179 | // flat. Path q is implicitly closed. It runs in O((n + k) log n), with n the number of segments, |
| 180 | // and k the number of intersections. |
| 181 | func (p *Path) Xor(q *Path) *Path { |
| 182 | return bentleyOttmann(p.Split(), q.Split(), opXOR, NonZero).Merge() |
| 183 | } |
| 184 | |
| 185 | // Xor is the same as Path.Xor, but faster if paths are already split. Each resulting path |
| 186 | // is a single filling path followed by its holes as subpaths. |