пятница, 27 декабря 2019 г.

OpenSCAD. Первые шаги

Для создания 3D модели в OpenSCAD необходимо написать сценарий её построения, а именно, перечислить базовые блоки и операции над ними. Базовыми блоками могут быть геометрические примитивы (кубы, сферы), их комбинации и другие отображаемые элементы. При этом команды записываются в виде

    преобразование1 преобразование2 ... преобразованиеN элемент;

т.е. каждое действие выполняется над записанным справа потомком, а самым правым элементом является отображаемый объект. Если элемент не представляет собой блок в фигурных скобках, в конце ставится точка с запятой. 


Рассмотрим базовые команды и геометрические примитивы. Отрисовка параллелепипеда производится командой cube(). Если аргументом является одно число, будет отображён куб с заданным размером стороны. Для указания длин каждой из сторон используется вектор [a,b,c], т.е. последовательность значений в квадратных скобках, разделённая запятыми. Элементами вектора могут быть любые типы данных, но чаще всего это числа. Вторым, необязательным аргументом команды cube() является флаг center, установка которого в состояние true приводит к совмещению центра параллелепипеда с началом системы координат. 

Базовыми операциями в пространстве являются перенос и поворот. Перенос  формируется командой translate(), аргументом которой выступает трёхэлементный вектор смещения. Поворот можно задать командой rotate(), либо указав ей угол и ось вращения, либо вектор из трёх углов, причём сперва будет произведён поворот относительно оси X, затем Y, и наконец Z. Угол задаётся в градусах. Важность порядка вызовов команд при операции поворота демонстрирует следующий пример, здесь синий куб сперва повёрнут, а затем сдвинут, в то время как зелёный сначала сдвинут, а затем повёрнут.


В приведённом примере присутствуют ещё два полезных элемента. Первым из них являются комментарии (в стиле С++), а вторым - команда color(), которая служит для окрашивания объекта. Цвет может быть определён с помощью строки имени, либо вектором RGBA. Разбиение команд на строки не обязательно и сделано исключительно для удобства восприятия. Обновить отображение модели после внесённых в код изменений можно с помощью клавиши F5.

Другим доступным для работы примитивом является объект cylinder(), который строит как цилиндр, так и конус, и даже пирамиду. Это возможно благодаря тому, что радиусы основания и вершины могут быть определены независимо. Помимо них требуется указать высоту объекта и, возможно, центрирование в глобальной системе координат. Как видно из следующего рисунка, сторона фигуры является по сути многоугольником, изменить число углов позволяет параметр $fn. В результате, можно получить пирамиду, либо тот же параллелепипед. 

Одна из концепций, демонстрируемых данным примером, это объединение нескольких элементов в блок с помощью фигурных скобок. Благодаря этому, все преобразования, применяемые к блоку, будут распространяться на все расположенные в нём элементы. Другой важной концепцией является использование переменных для описания параметров модели. В результате, если вы хотите изменить, например, толщину, вам не нужно править десятки связанных строк кода. Однако следует помнить, что переменные в OpenSCAD являются скорее константами (даже макросами, если проводить аналогию с языком С): они инициализируются при компиляции и не могут быть изменены в процессе работы программы. 

Сфера и её производные формируются с помощью команды sphere(), где аргументами является радиус (или диаметр) и ряд опциональных параметров. В принципе, OpenSCAD позволяет не указывать имена агрументов при выполнении команд, но в тех случаях, когда существует несколько способов вызова, лучше это сделать. В следующем примере познакомимся с двумя операторами масштабирования. Каждый из них изменяет размер своего потомка, но scale() использует для этого вектор коэффициентов, а resize() - желаемые размеры. 

Для управления формой поверхности здесь используются два опциональных параметра. $fa определяет минимальный угловой размер фрагмента, соответственно, их общее число по периметру будет 360/$fa. Минимальный линейный размер фрагмента определяется параметром $fs. Как видно из примера, эффект применения каждого параметра по-отдельности мал, наилучший результат достигается их сочетанием. Однако следует иметь ввиду, что увеличение "гладкости" поверхности приводит к увеличению времени отрисовки, и в некоторых случаях стоит этой возможностью пренебречь. 

Наиболее распространёнными способами получить новые объекты из существующих являются булевы операции: объединение union(), пересечение intersection() и разность difference(). В первом случае будет создан объект, включающий все точки каждого из исходных элементов, во втором - только общие для всех точки. В случае разности из первого объекта будут удалены точки, относящиеся ко всем последующим элементам блока. 


В данном примере параметр $fn определён вне какой-либо команды и является глобальным. Это позволяет получить одинаковую гладкость для всех круглых поверхностей модели и упростить запись.

После того, как модель построена, вы можете конвертировать в один из поддерживаемых графических форматов. Для этого выполните рендеринг путём нажатия кнопки F6. Если процесс завершился успешно, сохраните файл с помощью меню File - Export, или нажатием кнопки на панели инструментов (только для STL).

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

Комментариев нет:

Отправить комментарий