New Loop Boolean
This is a new Boolean that is possible following the new code recently added to vtkIntersectionPolyDataFilter. @cory-quammen @dgobbi
I have given the new boolean the name vtkLoopBooleanPolyDataFilter as it finds intersection loops and runs around these in an oriented fashion in order to determine the sub-surfaces of the Boolean. I felt this was better than vtkBooleanOperationPolyDataFilter2, especially since there was a test already named that way. I'm open to changing the name though.
Oh, and as a plus, I removed the vtkDataSetSurfaceFilter that I was previously using, so I no longer need to bring in the Filters/Geometry module. Makes the change a lot smoother and simpler.
Again, more details on this can be found here: http://www.sciencedirect.com/science/article/pii/S0965997816300230
Merge request reports
Activity
Is there an open access version of this paper? http://www.sciencedirect.com/science/article/pii/S0965997816300230
@updega2 @cory-quammen Should this replace BooleanOPerationPolyDataFilter? API is similar and if it is more robust, why should we support two filters that do the same thing only with a different algorithm?
@bill: I used it for boolean operation of primitive surfaces (cube, cylinder, cone...) and it worked fine for me. Much better then the old BooleanOperationPolyDataFilter. I didn't try it with meshes of more complex surfaces. So at least you should have both methods for a while. BooleanOperationPolyDataFilter is not working at all for primitive surfaces.
mentioned in issue #16954 (closed)
@updega2 @cory-quammen @dgobbi @seanm @demarle @lassoan +2
I think this should be merged. It does need reindenting to conform to new style and it does need its doxygen fixed to the new style. But these can wait. This seems to perform much better that the vtkBooleanOperationPolyDataFilter.
I did have some trouble with some user data Gears.stl and sphere.stl. It seemed to eliminate a disconnected region that was outside the difference region, but we can address that later.
If I recall correctly, some folks who had problems with the existing implementation tried this one and it didn't fix their particular problem. I'm sure we'll run into more.
I propose to merge this as a parallel implementation to the existing one until we have enough test cases and user reports of which one is the clear winner. If this works in all cases, I would not hesitate to replace the existing implementation with this one, but I don't think that is completely clear at this point.
@updega2 If you don't mind after this is merged as is, I can do the reindenting and doxygen fixes. No need for you to waste time on that.
@lorensen Would you mind creating a new merge request with this branch and rebase it on master? It doesn't build with a number of the current buildbot configurations.
@bill : did you create a different MR? Could you share the link here if so?
I found it, here's a link for the archives:
void vtkLoopBooleanPolyDataFilter::Impl::DetermineIntersection(...) { .... newloop.endPt = nextPt; // NB: IF nextPt is last (== numInterPts-1) - cellIds->GetId(1); out of range (x64)? => exeption newloop.loopType = 2; nextCell = cellIds->GetId(1); .... } Sergey
Edited by Сергей Комаринский