CGAL позволяет конвертировать Nef_polyhedron
к Polyhedron
только если Nef_polyhedron
«просто» (это можно проверить методом is_simple()
).
Теперь, если у меня есть простой многогранник Нефа, который я обрезаю таким образом, чтобы получить два тома, которые касаются одной точки (или одного сегмента), он больше не рассматривается как «простой», следовательно, преобразование в нормальный многогранник не удается. Такая ситуация может произойти легко, если плоскость отсечения проходит точно через вершину.
Итак, нет ли абсолютно никакого способа получить нормальный (не nef) многогранник из такого многогранника Nef? Или я просто не нашел правильный способ выполнить это преобразование?
Вот код:
Polyhedron clip(Polyhedron p, FT z) {
Nef_polyhedron np(p); // np is now a simple nef polyhedron
assert(np.is_simple());
Plane clip(Point(0, 0, z), Vector(0, 0, -1)); // The clipping plane
// The result of the following operation might result in a
// non-simple polygon, since it might clip the original polygon,
// which is a single volume, to two volumes, which touch in one
// point or segment
Nef_polyhedron result = np.intersection(clip, Nef_polyhedron::CLOSED_HALFSPACE);
Polyhedron ret;
result.convert_to_polyhedron(ret); // This might fail now.
return ret;
}
Btw. это не имеет никакого значения, если я пересекаюсь с закрытым или открытым полупространством.
Задача ещё не решена.
Других решений пока нет …