Почему OpenSCAD не может вырезать отверстия в сторонах многоугольника точно по ширине стены?
Я пытаюсь сделать рамку для литографии, которую планирую напечатать в 3D-формате для своей жены ко Дню матери. Обычно я делаю так, чтобы мои различия были точно нужного размера (а не увеличивали их ради предварительного просмотра), потому что это дает мне хорошее представление о том, насколько точна моя математика (особенно когда я учитываю горизонтальный запас, создаваемый сжатым филаментом, выходящим из сопла).
В этом случае, однако, он вернулся, чтобы укусить меня. Я довольно долго отлаживал эту проблему, предполагая, что что-то просчитал или каким-то образом перепутал порядок своих вращений.
В конце концов, я увеличил свой вырез и, конечно же, отверстия появились правильно. После того, как я ткнул в него, я понял, что мне нужно всего 0,000005 мм
по обе стороны от моего выреза, чтобы он правильно отображался!
Я создал минимальный воспроизводимый пример моей проблемы здесь:
outerRadius = 100;
height = 40;
wallWidth = 2;
innerRadius = outerRadius - wallWidth / sin(60);
apothem = innerRadius * cos(180 / 6);
// change this to 0 and see what happens!!
holeSizeCorrection = 0.00001;
module holes() {
for (face = [0:5]) {
rotate([0, 0, face * 60 + 30])
translate([apothem - holeSizeCorrection / 2, 0, height / 2])
rotate([0, 90, 0])
cylinder(h = wallWidth + holeSizeCorrection, r = height / 4, $fn = 4);
}
}
color("orange") difference() {
$fn = 6;
cylinder(h = height, r = outerRadius);
translate([0, 0, -height/4]) // because if it's exactly right, you can't see inside
cylinder(h = height * 2, r = innerRadius);
color("blue") holes();
}
Когда отверстия, которые я пытаюсь вырезать в многоугольнике, точно совпадают по ширине со стеной, он правильно визуализирует предварительный просмотр, но визуализированный вывод неверен. Чтобы убедиться в правильности формы, я убрал отверстия из разницы, и это выглядит примерно так:
Предварительный просмотр (если не считать странной проблемы точного среза, которая обычно случается) тоже верен. Но когда я рендерю его, он выглядит примерно так:
Но если у меня форма отверстия торчит на 0,000005 мм
с обеих сторон, то она рендерится просто отлично!
Теперь, когда я знаю, как искать такие вещи, это, вероятно, сэкономит мне время на отладку в будущем. :) Но было бы неплохо узнать, не сделал ли я что-то не так.
@D. Patrick, 👍5
Обсуждение1 ответ
Лучший ответ:
OpenSCAD просто позволяет иметь поверхностные решения, которые приводят к стенке толщиной 0 мм. Стены, по-видимому, обрезаются в этих областях и иногда могут быть видны с обеих сторон, как в вашем примере:
0, то толщина стены будет также экспортировать в формат STL в виде треугольников раскручивается вершинами, которые друг у друга в плоскости, но уже перевернутый нормальные векторы двух сторон, что означает, что конструкт существует для компьютера - и я использовал это в 3D дизайна для голограмма-эффект, даже если он не приводит к физически возможный набор свойств.
Примером такого эффекта может служить куб (сделанный в блендере), задняя стенка которого фиолетовая, все остальные серые, а внутренняя стенка имеет то же значение X, что и задняя. Вы видите, как серая стена отсекается, несмотря на то, что нормаль ее указывает на +X, в то время как нормаль фиолетовой стены находится в-X.
Заставляя свой резак для печенья выдавливаться не только к задней стенке, но и через нее, вы заставляете решение, которое запрещает решение с нулевой поверхностью, и таким образом решаете проблему создания этих артефактных стенок.
Обратите внимание, что стена с 0-й поверхностью сохраняется в предварительном просмотре слайсера:
Но будьте уверены: почти все слайсеры игнорируют стены, которые слишком тонки для печати, и особенно игнорируются стены толщиной 0:
- Существует ли простой способ разделения моделей в OpenSCAD?
- OpenSCAD linear_extrude из многопутевого импорта svg
- .STEP/.F3D to .Файл SCAD?
- Как указать начало вращения в openscad
- Библиотека OpenSCAD для пустого пространства/отверстий
- OpenSCAD "not valid 2-manifold" полезная информация
- Рендер OpenSCAD (F6) завершается ошибкой "ERROR: CGAL error in CGAL_Nef_polyhedron3()"
- Создание "куска пирога" в OpenSCAD?
Мы не являемся местом общего 3D-дизайна. Что делает это актуальным для 3D-печати?, @Trish
@Триш, я планирую напечатать эту фигуру в 3D. Кроме того, я предположил, что есть тег "openscad" по какой-то причине (к лучшему или худшему). Я думаю, что OpenSCAD-относительно популярный CAD для людей, интересующихся 3D-печатью. Когда я искал "stackexchange openscad", 3dprinting были первыми 3 результатами. Это все просто для того, чтобы ответить на ваш вопрос . . . не для того, чтобы утверждать, что он принадлежит здесь . . . Я думаю, что у вас есть правильный мета-вопрос для бета-версии обмена стеками 3d-печати. Мое личное убеждение состоит в том, что это сообщество, скорее всего, в конечном итоге будет обсуждать инструменты моделирования так же, как и инструменты нарезки (если не больше)., @D. Patrick
Тег существует по этой причине, но политика также заключается в том, что при вопросах о 3D-дизайне [вы должны рассказать, как или почему ваш вопрос относится к 3D-печати, а не только к моделированию](https://3dprinting.meta.stackexchange.com/questions/501/cad-questions-review). Нам пришлось это сделать, потому что люди начали задавать вопросы, не имеющие отношения к 3D-печати и рассматривающие нас как общее руководство по 3D-моделированию. Пожалуйста, [отредактируйте] свой вопрос, чтобы включить в него, что это будет печатный проект., @Trish
@Trish, я добавил справочную информацию к вопросу, чтобы было более очевидно, как моя проблема (точность моих форм) связана с 3d-печатью (будучи уверенным, что мои расчеты верны в отношении размера сопла)., @D. Patrick
Связанный с этим вопрос: https://3d-printery.ru/topics/9794, @user31389
Это хорошо известная https://en.wikipedia.org/wiki/Z-fighting. Чтобы решить эту проблему в OpenSCAD, я использую глобальную переменную
eps=0.001
и делаю вырезы типаtranslate([0,0,- eps])цилиндр(r=Радиус,h=Высота+2*eps)
. Я также используюeps
для создания перекрытия/интерференции, если у меня возникают проблемы с несколькими поверхностями., @Dave X