OpenSCAD не может визуализировать объединение двух многогранников, но может отлично просматривать их

Я сталкиваюсь с тем, что, честно говоря, кажется ошибкой в OpenSCAD, но я не могу поверить, что что-то настолько простое может выявить ошибку. Я пытаюсь отобразить следующий код:

module tri_prism(base1, base2) {
    polyhedron([
        base1[0], base1[1], base1[2],
        base2[0], base2[1], base2[2]],
        [[0,1,2],[3,4,5],
        [0,1,4,3],[1,2,5,4],[2,0,3,5]],
        convexity=5);
}

union() {
    tri_prism(
        [[0,0,0],[0,1,0],[1,0,0]],
        [[0,0,1],[0,1,1],[1,0,1]]);
    tri_prism(
        [[2,1,0],[2,0,0],[1,1,0]],
        [[2,1,1],[2,0,1],[1,1,1]]);
}

Это должно сделать две (неперекрывающиеся) треугольные призмы, например:

Two triangular prisms side-by-side

Однако это изображение является только предварительным просмотром. Когда я нажимаю F6, он визуализирует это, причем визуализируются только треугольные основания:

Only the triangular bases are rendered

И консоль показывает это предупреждение, значения которого я не знаю, потому что я новичок:

UI-WARNING: Object may not be a valid 2-manifold and may need repair!

Каждая из призм по отдельности рендерится просто отлично, но две из них вместе - нет. Кроме того, это не просто проблема внешнего вида, так как экспортируя его как STL и открывая в Cura, я вижу ту же бесполезную чепуху.

Это ошибка или я делаю что-то не так? И если это ошибка, то как мне ее обойти?

, 👍7

Обсуждение

Если вы открываете эти файлы в Cura, то, вероятно, вы собираетесь (в конечном итоге) напечатать их в 3D, как только исправите проблему, описанную в вашем вопросе?, @Greenonline


1 ответ


Лучший ответ:

10

Это случай "Неправильно упорядоченных лиц".

Это означает, что порядок, в котором вершины, составляющие одну или несколько граней, находятся не в правильном порядке. Вершины грани должны быть перечислены по часовой стрелке с точки зрения камеры, смотрящей на грань, образующую внешнюю часть многогранника.

В этом случае задача может быть решена путем переупорядочения грани [0,1,2] многогранника tri_prism как, например, [0,2,1].

Неупорядоченные грани можно найти, включив опцию "Собрать вместе" в меню " Вид " и "Предварительный просмотр". Лица, о которых идет речь, будут показаны пурпурным цветом.

Почему же тогда, если грани неправильно упорядочены, призмы по отдельности выглядят просто прекрасно? Я предполагаю, что лица должны быть правильно упорядочены, чтобы получить правильный рендеринг. Поведение рендеринга просто неопределенно для многогранников с неупорядоченными гранями. В некоторых ситуациях это может сработать, но это не гарантировано.

Edit: я забыл добавить, что, на мой взгляд, это не должно быть проблемой, и что если это такая большая проблема для подпрограммы рендеринга, она должна разумно переупорядочить неправильно упорядоченные грани в прелюдии. Это позволило бы новичкам избежать таких ненужных неприятностей.


,