Changed boolean_manifold iteration for improved performance. #2249
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hey Mike,
I was at a point where I had to perform a massive boolean union operation for a lot of small meshes.
The incremental way this was implemented became slower and slower with each manifold that was added.
Therefore, I've implemented a more binary-reduction-like iteration, going like this:
[a, b, c, d, e, f, g]
[ab, cd, ef, g]
[abcd, efg]
[abcdefg]
It still performs the same boolean operation for all objects in the input list, but is drastically more performant - especially if the input list is huge.
I have also added a test, verifying that it produces the same result as the original code.
As I was writing this, I realized that it should actually work analogously for the intersection - so I rewrote it too.
Cheers
Dennis