Hey Thomas,
I am beginning to look at this problem.
To my point of view the best (not fastest perhaps) is to work with the roof component.
It is quite easy to filter the brep and use them to have lines.
Here a first result. Calculation time is ~0.1 s.
The idea is to take each brep face, then look if edge is on medial axis or on contour.
Then join, orient. Then I’ll have to orient all groups of lines. and it will be good to go on a component.
Still some problems for the curves orientations but seems good.
What is the logic to have for the offset of curves ? Min distance, number of curves ?
If you want to test it works now.
And it could be projected