Для неоптимального (линейного времени), но простого решения, рассмотрите плоскость, содержащую линию, и пересекайте каждый край трехмерного корпуса с этой плоскостью. Затем поверните плоскость и точки на xy, и вы уменьшите задачу до 2D.
Создайте 2D выпуклую оболочку и пересекайте все ребра с линией. (Если вы сохраняете связи между точками прокалывания, которые принадлежат одним и тем же граням, вам даже не нужно перестраивать 2D-корпус.)