STL (формат файла) - STL (file format)

STL
Различия между CAD и STL Models.svg
CAD-представление тора (показано как два концентрических красных круга) и приближение STL той же формы (состоящее из треугольных плоскостей)
Расширение имени файла
.stl
Тип интернет-СМИ
Разработано 3D системы
Первый выпуск 1987 г.
Тип формата Стереолитография

STL - это формат файла, свойственный программному обеспечению САПР для стереолитографии, созданному компанией 3D Systems . STL имеет несколько бэкронимов, таких как «Стандартный язык треугольников» и «Стандартный язык тесселяции ». Этот формат файла поддерживается многими другими программными пакетами; он широко используется для быстрого прототипирования , 3D-печати и автоматизированного производства . Файлы STL описывают только геометрию поверхности трехмерного объекта без какого-либо представления цвета, текстуры или других общих атрибутов модели САПР. Формат STL определяет как ASCII, так и двоичное представление. Двоичные файлы более распространены, поскольку они более компактны.

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

ASCII STL

Файл ASCII STL начинается со строки

solid name

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

facet normal ni nj nk
    outer loop
        vertex v1x v1y v1z
        vertex v2x v2y v2z
        vertex v3x v3y v3z
    endloop
endfacet

где каждый n или v является числом с плавающей запятой в формате знак мантисса - знак «e» - показатель степени , например, «2.648000e-002». Файл заканчивается

endsolid name

Структура формата предполагает, что существуют другие возможности (например, фасеты с более чем одним «циклом» или циклы с более чем тремя вершинами). Однако на практике все грани представляют собой простые треугольники.

Пробелы (пробелы, табуляции, символы новой строки) можно использовать в любом месте файла, кроме чисел или слов. Пробелы между «фасетом» и «нормальным», а также между «внешним» и «петлей» обязательны.

Двоичный STL

Поскольку файлы ASCII STL могут быть очень большими, существует двоичная версия STL. Двоичный файл STL имеет 80-символьный заголовок (который обычно игнорируется, но никогда не должен начинаться со слова «сплошной», потому что это может привести к тому, что некоторые программы будут полагать, что это файл ASCII STL). За заголовком следует 4-байтовое целое число без знака с прямым порядком байтов, указывающее количество треугольных фасетов в файле. Далее следуют данные, описывающие каждый треугольник по очереди. Файл просто заканчивается после последнего треугольника.

Каждый треугольник описывается двенадцатью 32-битными числами с плавающей запятой: три для нормали, а затем три для координаты X / Y / Z каждой вершины - так же, как в ASCII-версии STL. После них следует 2-байтовое («короткое») целое число без знака, которое является «счетчиком байтов атрибута» - в стандартном формате оно должно быть равно нулю, потому что большая часть программного обеспечения не понимает ничего другого.

Числа с плавающей запятой представлены как числа с плавающей запятой IEEE и считаются с прямым порядком байтов , хотя в документации это не указано.

UINT8[80]    – Header                 -     80 bytes                           
UINT32       – Number of triangles    -      4 bytes

foreach triangle                      - 50 bytes:
    REAL32[3] – Normal vector             - 12 bytes
    REAL32[3] – Vertex 1                  - 12 bytes
    REAL32[3] – Vertex 2                  - 12 bytes
    REAL32[3] – Vertex 3                  - 12 bytes
    UINT16    – Attribute byte count      -  2 bytes
end

Цвет в двоичном STL

Существует как минимум два нестандартных варианта двоичного формата STL для добавления информации о цвете:

  • Пакеты программного обеспечения VisCAM и SolidView используют два байта «счетчика байтов атрибута» в конце каждого треугольника для хранения 15-битного цвета RGB :
    • биты от 0 до 4 - это уровень интенсивности синего (от 0 до 31),
    • биты с 5 по 9 - это уровень яркости зеленого (от 0 до 31),
    • биты с 10 по 14 - это уровень яркости красного (от 0 до 31),
    • бит 15 равен 1, если цвет допустим, или 0, если цвет недопустим (как в обычных файлах STL).
  • Программное обеспечение Materialize Magics использует 80-байтовый заголовок в верхней части файла для представления общего цвета всей части. Если используется цвет, то где-то в заголовке должна быть строка ASCII «COLOR =», за которой следуют четыре байта, представляющие красный, зеленый, синий и альфа-канал (прозрачность) в диапазоне 0–255. Это цвет всего объекта, если он не переопределен для каждого аспекта. Магия также распознает материальное описание; более подробная характеристика поверхности. Сразу после спецификации «COLOR = RGBA» должна быть другая строка ASCII «, MATERIAL =», за которой следуют три цвета (3 × 4 байта): первый - цвет диффузного отражения , второй - цвет зеркального отражения , а третий - окружающий свет. свет . Параметры материала предпочтительнее цвета. Цвет каждого фасета представлен в двух байтах «счетчика байтов атрибута» следующим образом:
    • биты от 0 до 4 - это уровень яркости красного (от 0 до 31),
    • биты с 5 по 9 - это уровень яркости зеленого (от 0 до 31),
    • биты с 10 по 14 - это уровень интенсивности синего (от 0 до 31),
    • бит 15 равен 0, если этот фасет имеет свой собственный уникальный цвет, или 1, если должен использоваться цвет для каждого объекта.

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

Единицы в двоичном STL

Единицы координат не указаны в стандарте STL. Одна из идей состоит в том, чтобы добавить строку ASCII «UNITS = xx» где-нибудь в заголовок, где «xx» - это два байта, представляющие используемые единицы при записи этого файла. Возможные варианты:

Подсказка заголовка UNITS
ASCII Шестигранник Описание
мм 6д 6д Миллиметры
см 63 6d Сантиметры
м 20 6д Метры. Первый байт - это пробел '', ASCII 32 = 0x20
футов 66 74 Десятичные футы
в 69 69 Десятичные дюймы
лы 6c 79 Световых лет

Грань нормальная

Как в ASCII, так и в двоичной версии STL нормаль фасета должна быть единичным вектором, направленным наружу от твердого объекта. В большинстве программ это может быть установлено на (0,0,0), и программа автоматически вычислит нормаль на основе порядка вершин треугольника, используя « правило правой руки », то есть вершины перечислены в счетчике времени. разумный заказ извне. Некоторые загрузчики STL (например, плагин STL для Art of Illusion) проверяют, соответствует ли норма в файле нормальному значению, которое они вычисляют с использованием правила правой руки, и предупреждают пользователя, когда это не так. Другое программное обеспечение может полностью игнорировать нормальный фасет и использовать только правило правой руки. Хотя редко можно указать нормаль, которая не может быть вычислена с использованием правила правой руки, для полной переносимости файл должен как обеспечивать нормаль фасета, так и соответствующим образом упорядочивать вершины. Заметным исключением является SolidWorks , в котором для эффектов затенения используется нормаль .

Использование в 3D-печати

Логотип Википедии

3D-принтеры создают объекты путем затвердевания ( SLA , SLS , SHS , DMLS , EBM , DLP ) или печати (3DP, MJM, FDM , FFF , PJP, MJS) по одному слою за раз. Для этого требуется серия замкнутых 2D-контуров (горизонтальных слоев), которые заполняются затвердевшим материалом по мере слияния слоев. Естественным форматом файла для такой машины была бы серия замкнутых многоугольников (слоев или срезов), соответствующих различным Z-значениям. Однако, поскольку можно изменять толщину слоев для более быстрого, но менее точного построения, было проще определить модель, которую нужно построить, как замкнутый многогранник, который можно разрезать на необходимых горизонтальных уровнях. Неправильная нормаль фасета может повлиять на то, как файл нарезан и заполнен. Можно выбрать срез с другим значением Z, чтобы пропустить плохой аспект, или файл необходимо вернуть в программу САПР для внесения исправлений, а затем повторно сгенерировать файл STL.

Формат файла STL, по-видимому, может определять многогранник с любой многоугольной гранью, но на практике он всегда используется только для треугольников, что означает, что большая часть синтаксиса протокола ASCII является излишней.

Чтобы правильно сформировать трехмерный объем, поверхность, представленная любыми файлами STL, должна быть закрыта (без отверстий или перевернутой векторной нормали) и соединена, где каждое ребро является частью ровно двух треугольников, а не самопересекающимся. Поскольку синтаксис STL не требует соблюдения этого свойства, его можно игнорировать для приложений, в которых значение void не имеет значения. Отсутствующая поверхность имеет значение только постольку, поскольку программное обеспечение, разрезающее треугольники, требует, чтобы она обеспечивала замкнутость результирующих 2D-полигонов. Иногда такое программное обеспечение может быть написано для устранения небольших несоответствий, перемещая вершины, которые расположены близко друг к другу, чтобы они совпадали. Результаты непредсказуемы, возможно, поверхность потребуется отремонтировать с помощью другой программы. Для векторных 3D-принтеров требуется чистый файл .STL, а при печати файла с плохими данными печать не будет заполнена, либо печать может прекратиться.

Использование в других областях

Формат файла STL прост и удобен для вывода. Следовательно, многие системы автоматизированного проектирования могут выводить файл в формате STL. Хотя выходные данные просто создать, информация о связности сетки отбрасывается, потому что идентичность общих вершин теряется.

Для многих автоматизированных производственных систем требуются триангулированные модели. Формат STL не является наиболее эффективным с точки зрения памяти и вычислений методом передачи этих данных, но STL часто используется для импорта триангулированной геометрии в систему CAM . Формат общедоступен, поэтому система CAM будет его использовать. Чтобы использовать данные, CAM-системе, возможно, придется восстановить связь. Поскольку файлы STL не сохраняют физический размер единицы, система CAM запросит это. Стандартные единицы измерения - миллиметры и дюймы.

STL также можно использовать для обмена данными между системами CAD / CAM и вычислительными средами, такими как Mathematica .

Изображение криволинейных поверхностей

Невозможно использовать треугольники для точного представления изогнутых поверхностей. Чтобы компенсировать это, пользователи часто сохраняют огромные файлы STL, чтобы уменьшить неточность. Однако собственные форматы, связанные со многими программами для 3D-проектирования, используют математические поверхности для сохранения деталей без потерь в небольших файлах. Например, Rhino 3D и Blender реализуют NURBS для создания истинных криволинейных поверхностей и сохранения их в соответствующих собственных форматах файлов, но должны генерировать треугольную сетку при экспорте модели в формат STL.

История

STL был изобретен консалтинговой группой Albert Consulting Group для 3D Systems в 1987 году. Формат был разработан для первых коммерческих 3D-принтеров 3D Systems. С момента первого выпуска формат оставался относительно неизменным в течение 22 лет.

В 2009 году было предложено обновление формата, получившее название STL 2.0. Он превратился в формат файлов аддитивного производства .

Смотрите также

использованная литература

внешние ссылки

  • Формат STL - стандартный формат данных для Fabbers