LINUX.ORG.RU

Почему stl основной формат для подготовки gcode для 3D-принтера?

 , ,


0

1

stl (stereolithography) содержит в себе информацию о вершинах треугольников из которых получается полигональная сетка. Изобразить идеальный круг с помощью stl невозможно.

gcode – векторный формат, следовательно и круг можно идеально изобразить.

получается полигональная сетка. Изобразить идеальный круг с помощью stl невозможно.

«Идеальность» круга задаётся мелкостью МКЭ © (wikipedia.org) на полигональной сетке и позволяет в пределе изображать почти любые гладкие функции, особенно при использовании вариационных методов аппроксимации (например, минимизацией функционала методом Ритца).

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

«Идеальность» круга задаётся мелкостью

Куча треугольников или одна строка:

G02 X100.000 Y100.000 R50

И всё равно, с кучей треугольников круг не идеален.

Jullyfish
() автор топика

gcode – векторный формат,

G-code это не векторный формат, это язык программирования, вообще-то. Да-да, с циклами, условиями и всем таким. Ну и команды для перемещения там тоже есть, да.

следовательно и круг можно идеально изобразить.

Круг идеально можно изобразить только если скормить G-code токарному станку. Во всех остальных случаях (в т.ч. 3D принтера) команды движения по дуге будут выполняться либо шаговыми двигателями, либо сервоприводами с энкодерами. в любом случае с какой-то дискретностью. Так что круг идеально изобразить не выйдет.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

G-code это не векторный формат, это язык программирования, вообще-то.

В целом да.

Да-да, с циклами, условиями и всем таким.

Это скорее в спецификации. Станки, которые по факту умели бы в циклы, подпрограммы и пр. – я не встречал.

Ну и команды для перемещения там тоже есть, да.

И они представляют из себя вектора, по которым можно построить модель.

Во всех остальных случаях (в т.ч. 3D принтера) команды движения по дуге будут выполняться либо шаговыми двигателями, либо сервоприводами с энкодерами. в любом случае с какой-то дискретностью. Так что круг идеально изобразить не выйдет.

Физические ограничения есть, это да. (Хотя один мой знакомый рассказывал, что в СССР видел аналоговый ЧПУ-станок, который умеет делать круги). Я про сам формат. Всякие CAD’ы хранят информацию в векторе (вроде как), потом это дело преобразуется в STL, чтобы потом из этого сделать векторы другого формата. Для меня это выглядит крайне сомнительным.

Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

Станки, которые по факту умели бы в циклы, подпрограммы и пр. – я не встречал.

Даже LinuxCNC умеет. И большинство больших и серьёзных машин тоже. Когда-то G-code не генерился каким-нибудь CAM’ом, а писался вручную. И без циклов, подпрограмм и пр. было бы весьма тоскливо его писать. Например, если надо 100 одинаковых деталей из листа выфрезеровать.

Всякие CAD’ы хранят информацию в векторе (вроде как), потом это дело преобразуется в STL, чтобы потом из этого сделать векторы другого формата.

Совсем не обязательно. Модельку для печати можно и в блендере нарисовать, и отсканировать, например. Будут вершины треугольников без всяких векторов. Даже OpenSCAD без всяких векторов обходится.

Время чертежей и всяких векторных DXF прошло уже давно. Я кроме как для лазерного резака нигде и никак ничем векторным не пользуюсь, например. Да, можно в каких-то CAD’ах экспортировать в что-то векторное, сгенерировать чертёжик даже, но нафига?

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Даже LinuxCNC умеет.

Я в основном с grbl имел дело. Он не умеет.

Даже OpenSCAD без всяких векторов обходится.

Это да, но модель в исходном коде задаётся векторами.

Время чертежей и всяких векторных DXF прошло уже давно.

DXF ещё очень живой, но это скорее не про мелкие изделия, а про генпланы, топографические карты и т.п.

Да, можно в каких-то CAD’ах экспортировать в что-то векторное, сгенерировать чертёжик даже, но нафига?

Для меня сомнительно преобразование вектор -> полигональная сетка -> вектор. Выглядит как лишняя ступенька.

Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

Это да, но модель в исходном коде задаётся векторами.

Нет, задаётся 3D примитивами.

Для меня сомнительно преобразование вектор -> полигональная сетка -> вектор. Выглядит как лишняя ступенька.

А такого и нет на практике. На практике цепочка такая:

3D модель в каком-то виде, полигональном, 3D примитивы и т.п. -> STL -> слои -> программа G-code.

Причём «слои» - это далеко не вектор. Там на каждый элемент, помимо координат, ещё куча параметров.

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

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

Нет, задаётся 3D примитивами

Это да. Но оно всё равно всё описывается через координаты и/или размеры.

-> слои ->

А вот про слои я не знал, может быть они ключ к закрытию моего затупа. Обдумаю. Благодарю!

Jullyfish
() автор топика

Позиционирование головы принтера всё равно происходит в координатной сетке, не?

Bfgeshka ★★★★★
()

Ты свой gcode от прусы не скормишь дельте и тем более фотополимернику. А так-то да, STL слишком угловатый, мне больше нравилось отдавать исполнителям STEP.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)

Дык при 3D-печати движение башки всё равно происходит линейно и от одной координаты к другой. Типа из этой точки двигаться в эту. Он не напечатает тебе идеальный круг, это будет правильный 100500-угольник. Ну и формат, соответственно, хранит данные в наиболее приближенном к физике процесса виде, получается. Зачем тебе в формате идеальный круг, если физически его напечатать всё равно не получится, но понадобится предварительное преобразование во всё тот же 100500-угольник, чтобы «сказать» принтеру, как двигать головку?

CrX ★★★★★
()
Ответ на: комментарий от unDEFER

Это понятно, я про преобразование данных. Круг -> набор треугольников -> круг.

Jullyfish
() автор топика
Ответ на: комментарий от CrX

Дык при 3D-печати движение башки всё равно происходит линейно и от одной координаты к другой.

Дык, нет. Команды G02-G03 круговой интерполяции.

Jullyfish
() автор топика

Похоже, мне не получилось нормально изложить суть моего возмущения. Попытаюсь привести конкретные примеры с моделями и gcode, но это потребует n-ое время.

Jullyfish
() автор топика
26 августа 2026 г.

Изобразить идеальный круг с помощью stl невозможно.

Это вы еще не знаете, что в один прекрасный момент, когда несколько простых с виду примитивов пересекается, то кривая их пересечения CAD ядром в аналитическом виде не может быть найдена, она вообще математиками не может быть найдена. Поэтому даже в промышленности - все аппроксимация. А еще принтеры 3д работают в основном на шаговых двигателях, и чтобы аппроксимировать кусочно-линейные фигуры еще и применяется шаговая аппроксимация, например, алгоритмом Брезенхама. Короче, аппроксимация сидит на аппроксимации, можно ломать голову, но современные люди предпочитают - уменьшить шаг сетки, увеличить количество шагов двигателя, добавить микрошаг… И гори она огнём, эта точная математика!

EvilSpirit
()
Последнее исправление: EvilSpirit (всего исправлений: 1)
Ответ на: комментарий от CrX

Зачем тебе в формате идеальный круг, если физически его напечатать всё равно не получится, но понадобится предварительное преобразование во всё тот же 100500-угольник

Ну могут быть разные принтеры с разными возможностями. Кто-то может только 100500-угольник, а у кого-то количество углов на порядки больше/меньше.

Bad_ptr ★★★★★
()

Меня больше другое бесило. 3д принтер не мог почему-то печатать непрерывно по кругу всю модель. Т.е. ехал в одну сторону, остановился, пошёл обратно и с другой стороны уже допечатывает.
Вобщем на модели получается шов, хотя теоретически ничего не мешает печатать непрерывный контур.
Впрочем это было давно и принтер был простой. Может с тех пор всё пофиксили.

Bad_ptr ★★★★★
()
Ответ на: комментарий от EvilSpirit

А есть какие альтернативы?

ИМХО, мне кажется воксели для ЧПУ работ могли бы подойти.

Jullyfish
() автор топика
Ответ на: комментарий от EvilSpirit

Это худший формат для всего.

А ты когда-то реализовывал 3D и загрузку моделек? Чтоб было быстро и просто? Я — да. STL это как раз быстро и просто (быстрота не только в реализации, у STL, особенно бинарного не только быстрота и простота со стороны разработчика, у него ещё очень маленький оверхед, это не всратый 3MF/X3D и иже с ними, где всё вроде как удобнее запаковали и вершины, и материалы, которые вообще-то могут быть одинаковыми у разных моделек и нет смысла их грузить для каждого объекта свои, но цена за это сомнительное удобство куча xml тегов, которых парсить и тупо читать с диска в 2 раза дольше, чем сами данные).

Другие форматы есть смысл брать, когда нужны какие-то фичи полезные, вроде скелетки или если готовый движок приучен жрать что-то конкретное. Но это уже не фига не просто под капотом.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 3)
Ответ на: комментарий от Stanson

Круг идеально … токарному станку.

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

сколь помню STL потому, что он самый примитивный - там самая простая математика на самом простом 3д-элементе. проще просто некуда. ну и проверка тож получается простой.
более сложные 3д-построения могут создать кучу проблемм при перестроении.
к примеру большой сложный вордовский документ может развалится изза изменений области печати. а пдф развалится не сможет.
по идее никто не запрещает иметь в 3д-станке рендер сложных параметрических/функциональных 3д-моделек. но это лишние функции лишний гемор.

pfg ★★★★★
()
Ответ на: комментарий от pfg

Гугловая ИИшка выдала такое:

Для прочных деталей принтер печатает каждый слой отдельно. В точке начала и конца каждого слоя сопло делает микропаузу или меняет поток пластика. Из-за этого на готовой детали всегда образуется вертикальный или диагональный шов (Z-seam). Слайсеры умеют прятать этот шов в углах модели, но полностью убрать его при многослойной печати нельзя.

Bad_ptr ★★★★★
()
Ответ на: комментарий от pfg

физически круг точнее размера атома материала не сделаешь.

Верно. :)

к примеру большой сложный вордовский документ может развалится изза изменений области печати. а пдф развалится не сможет.

Типа того, хотя пдф вообще-то достаточно навороченный.

по идее никто не запрещает иметь в 3д-станке рендер сложных параметрических/функциональных 3д-моделек. но это лишние функции лишний гемор.

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

Stanson ★★★★★
()
Ответ на: комментарий от Jullyfish

Я это никак не расследовал. Просто отметил такую неприятность и кажущуюся нелогичность в 3д печати(на самом то деле наверняка какие-то причины у шовности 3д печатания есть).

Bad_ptr ★★★★★
()
Ответ на: комментарий от peregrine

А ты когда-то реализовывал 3D и загрузку моделек?

Тыщу раз. И форматы сам придумывал, и другие грузил. STL очень тупой формат с дублированием вершин, без pervertex нормалей зато с нормалью грани, которая нахрен обычно никому не нужна, потому что высчитывается. Текстовый - та вообще жопа излшняя. Нет в нем ни простоты, ни лаконичности, ни функционала минимального. Любой школьник создаст свой формат лучше чем тот. Хочешь я достану свой школьный исходник и покажу тебе формат, который я в 11 классе сделал, когда еще нихрена не понимал в графике? Он и то лучше, чем STL. STL - говно, как ни посмотри. OBJ, например, на порядок лучше.

EvilSpirit
()
Ответ на: комментарий от EvilSpirit

Хочешь я достану свой школьный исходник и покажу тебе формат, который я в 11 классе сделал, когда еще нихрена не понимал в графике?

Я хочу!

Jullyfish
() автор топика
Вы не можете добавлять комментарии в эту тему: только для зарегистрированных, score>=50.