STL — это формат файла , родной для программного обеспечения САПР стереолитографии , созданного 3D Systems . [3] [4] [5] Чак Халл , изобретатель стереолитографии и основатель 3D Systems, сообщает, что расширение файла является аббревиатурой от stereolithography , [6] хотя его также называют стандартным языком треугольников или стандартным языком тесселяции . [2]
Файл STL описывает сырую, неструктурированную триангулированную поверхность с помощью единичной нормали и вершин (упорядоченных по правилу правой руки [2] ) треугольников с использованием трехмерной декартовой системы координат . [7] В первоначальной спецификации все координаты STL должны были быть положительными числами, но это ограничение больше не применяется, и сегодня в файлах STL часто встречаются отрицательные координаты. Файлы STL не содержат информации о масштабе, а единицы измерения являются произвольными. [8] Файлы STL описывают только геометрию поверхности трехмерного объекта без какого-либо представления цвета, текстуры или других общих атрибутов модели CAD. Формат STL определяет как ASCII , так и двоичные представления. Двоичные файлы более распространены, поскольку они более компактны. [9]
STL широко используется для быстрого прототипирования , 3D-печати и автоматизированного производства [10] и поддерживается многими другими программными пакетами. [ необходима ссылка ]
STL был изобретен Albert Consulting Group для 3D Systems в 1987 году. [11] Формат был разработан для первых коммерческих 3D-принтеров 3D Systems. С момента своего первоначального выпуска формат оставался относительно неизменным в течение 22 лет. [12]
В 2009 году было предложено обновление формата, названное STL 2.0, которое превратилось в формат файла аддитивного производства . [12] [13]
Файл ASCII STL начинается со строки:
солидное имя
где name — необязательная строка (хотя если name опущено, после solid все равно должен быть пробел для совместимости с некоторым программным обеспечением). Оставшаяся часть строки игнорируется и иногда используется для хранения метаданных (например, имени файла, автора, даты изменения и т. д.). [14] Файл продолжается любым количеством треугольников, каждый из которых представлен следующим образом: [15]
фасет нормальный n i n j n k вершина внешнего цикла v1 x v1 y v1 z вершина v2 x v2 y v2 z вершина v3 x v3 y v3 z конечная грань цикла
где каждый n или v — число с плавающей точкой в формате знак — мантисса — знакe
— показатель степени , например, . Файл заканчивается следующим:2.648000e-002
имя endsolid
Структура формата предполагает, что существуют и другие возможности (например, грани с более чем одной loop
или петли с более чем тремя вершинами), хотя описание формата файла относится только к мозаикам из треугольников. [2]
Пробелы (пробелы, табуляции, переводы строк) можно использовать в любом месте файла, за исключением цифр или слов. Пробелы между facet
и normal
и между outer
и loop
обязательны. [9]
Поскольку файлы ASCII STL могут быть большими, существует двоичная версия STL. Двоичный файл STL имеет заголовок из 80 символов, который обычно игнорируется, но никогда не должен начинаться с ASCII-представления строки solid
, так как это может привести к тому, что некоторое программное обеспечение спутает его с файлом ASCII STL. После заголовка следует 4-байтовое целое число без знака с прямым порядком байтов, указывающее количество треугольных граней в файле. Затем следуют данные, описывающие каждый треугольник по очереди. Файл просто заканчивается после последнего треугольника.
Каждый треугольник описывается 12 32-битными числами с плавающей точкой: 3 для нормали и затем 3 для координат X/Y/Z каждой вершины – как в версии STL ASCII. После них следует 2-байтовое («короткое») беззнаковое целое число, которое является «количеством байтов атрибута» – в стандартном формате это должно быть ноль, потому что большинство программ не понимают ничего другого. [9]
Числа с плавающей точкой представлены как числа с плавающей точкой IEEE и предполагаются с прямым порядком байтов , хотя в документации это не указано.
UINT8[80] – Заголовок - 80 байтUINT32 – Количество треугольников - 4 байта
foreach треугольник - 50 байт: REAL32[3] – Нормальный вектор - 12 байт REAL32[3] – Вершина 1 - 12 байт REAL32[3] – Вершина 2 - 12 байт REAL32[3] – Вершина 3 - 12 байт UINT16 – Количество байтов атрибута – 2 байтаконец
Существует как минимум два нестандартных варианта двоичного формата STL для добавления цветовой информации:
COLOR=
за которой следуют четыре байта, представляющие красный, зеленый, синий и альфа-канал (прозрачность) в диапазоне 0–255. Это цвет всего объекта, если только он не переопределен на каждой грани. Magics также распознает описание материала; более подробную характеристику поверхности. Сразу после спецификации должна быть еще одна строка ASCII, за которой следуют три цвета (3×4 байта): первый — цвет диффузного отражения , второй — цвет зеркального блика , а третий — окружающий свет . Настройки материала предпочтительнее, чем цвет. Цвет каждой грани представлен в двух байтах «количества байтов атрибутов» следующим образом:COLOR=RGBA
,MATERIAL=
Порядок красный/зеленый/синий в этих двух байтах обратный в этих двух подходах – так что, хотя эти форматы могли бы быть легко совместимы, обратный порядок цветов означает, что они несовместимы – и что еще хуже, универсальный считыватель файлов STL не может автоматически различать их. Также нет способа сделать грани выборочно прозрачными, поскольку нет альфа-значения для каждой грани – хотя в контексте современных машин быстрого прототипирования это не важно.
В ASCII и двоичных версиях STL нормаль грани должна быть единичным вектором , направленным наружу от твердого объекта. [16] В большинстве программ это может быть установлено на (0,0,0), и программа автоматически вычисляет нормаль на основе порядка вершин треугольника, используя « правило правой руки », т. е. вершины перечислены в порядке против часовой стрелки снаружи. [2] Некоторые загрузчики STL (например, плагин STL для Art of Illusion) проверяют, что нормаль в файле согласуется с нормалью, которую они вычисляют с помощью правила правой руки, и предупреждают пользователя, если это не так. Другое программное обеспечение может полностью игнорировать нормаль грани и использовать только правило правой руки. Хотя редко указывается нормаль, которая не может быть вычислена с помощью правила правой руки, чтобы быть полностью переносимым, файл должен как предоставлять нормаль грани, так и упорядочивать вершины соответствующим образом. Заметным исключением является SolidWorks , который использует нормаль для эффектов затенения .
Невозможно использовать треугольники для идеального представления криволинейных поверхностей. Чтобы компенсировать это, пользователи часто сохраняют огромные файлы STL, чтобы уменьшить неточность. Однако собственные форматы, связанные со многими приложениями 3D-дизайна, используют математические поверхности для сохранения деталей без потерь в небольших файлах. Например, Rhino 3D [17] и Blender [18] реализуют NURBS для создания настоящих криволинейных поверхностей и сохраняют их в своих соответствующих собственных форматах файлов, но должны генерировать сетку треугольников при экспорте модели в формат STL.
3D-принтеры строят объекты путем затвердевания ( SLA , SLS , SHS , DMLS , EBM , DLP ) или печати (3DP, MJM, FDM , FFF , PJP, MJS) [19] по одному слою за раз. Для этого требуется ряд замкнутых 2D-контуров (горизонтальных слоев), которые заполняются затвердевшим материалом по мере слияния слоев. Естественным форматом файла для такой машины была бы серия замкнутых полигонов (слоев или срезов), соответствующих различным значениям Z. Однако, поскольку можно изменять толщину слоев для более быстрой, хотя и менее точной сборки, было проще определить модель для построения как замкнутый многогранник , который можно разрезать на необходимые горизонтальные уровни. Неправильная нормаль грани может повлиять на способ нарезки и заполнения файла. Можно выбрать срез с другим значением Z, чтобы пропустить плохую грань, или файл придется вернуть в программу CAD для внесения исправлений, а затем повторно сгенерировать файл STL.
Для правильного формирования 3D-объема поверхность, представленная любыми файлами STL, должна быть замкнутой (без отверстий или обратных векторных нормалей) и связанной, где каждое ребро является общим ровно для двух граней и не является самопересекающимся. Поскольку синтаксис STL не обеспечивает этого свойства, его можно игнорировать для приложений, где пустота не имеет значения. Отсутствующая поверхность имеет значение, поскольку программное обеспечение, которое разрезает треугольники, требует, чтобы оно гарантировало, что полученные 2D-полигоны будут замкнутыми. Иногда такое программное обеспечение может быть написано для устранения небольших несоответствий путем перемещения вершин, которые находятся близко друг к другу, так, чтобы они совпадали. Результаты непредсказуемы и могут потребовать исправления с помощью другой программы. Векторным 3D-принтерам требуется чистый файл STL, и печать плохого файла данных либо не заполняет, либо может прекратить печать.
STL прост и удобен для вывода. Следовательно, многие системы автоматизированного проектирования могут выводить формат файла STL. Хотя вывод прост для создания, информация о связности сетки отбрасывается, поскольку теряется идентичность общих вершин.
Многие автоматизированные системы производства требуют триангулированных моделей. Формат STL не является наиболее эффективным с точки зрения памяти и вычислений методом передачи этих данных, но STL часто используется для импорта триангулированной геометрии в систему CAM . Формат широко доступен, поэтому система CAM может его использовать. Чтобы использовать данные, системе CAM может потребоваться реконструировать связность. Поскольку файлы STL не сохраняют физические размеры единицы, система CAM запрашивает их. Типичные единицы — mm
и inch
.
STL также можно использовать для обмена данными между системами CAD/CAM и вычислительными средами, такими как Mathematica .
как фактический стандарт, использовался во многих, если не во всех, системах быстрого прототипирования.