Improve accuracy of boolean operations
This MR improves the accuracy of the shape builder / boolean operations in two main ways: a per-segment rather than a per-shape subdivision threshold, and pre-processing of the intersections using lib2geom. The MR is correspondingly split into two commits, plus a preliminary refactoring commit.
The first of these changes allows seamless re-unions, i.e. pieces that were generated during a previous boolean operation can now be joined together most of the time without artifacts:
The second change improves the accuracy of the geometry by computing intersections to much higher precision, which gets rid of #4453 (closed):
I'd like to fix the other issues (e.g. #4477 and #4733), but that wasn't possible with these rather minor modifications. That will take some heftier rewriting and redesigning. Hopefully this MR will enable livarot to work acceptably well in the meantime.
Fixes #612, #2875 (closed), #3265 (closed), #3543 (closed), #4453 (closed).