1. Switch from B-rep to meshes.

2. Intersect mesh edges with planes (1-dimensional intersection, fast to compute).

**3. Sort and connect all intersection points.**

I am at the 3-rd stage right now. And for that I'm using the approach from this paper: [Moreira, A., & Santos, M. Y. (2007). Concave hull : a k-nearest neighbours approach for the computation of the region occupied by a set of points. Proceedings of the Second International Conference on Computer Graphics Theory and Applications, 61–68.] This is a pretty basic and sort of "blind" approach as whenever the algorithm gets into trouble, it attempts to increase the number of considered neighbors and repeats the whole process without any promise of success. I have its naive implementation which is not very efficient (as it uses dynamic memory allocation and some heavy OpenCascade calls that are better to be avoided) and not quite accurate. So I'm thinking either to improve what I have OR to find something better.

The problem looks quite standard, and it should have had been resolved thousands of times. Does anyone have any practical experience with this sort of slicing? What I need to have at the end is a closed planar polygon.

I'll post here on my progress if anyone's interested.