OpenSCAD – это 3D-редактор, в котором удобно создавать несложные объекты в технических целях. Ниже мы расскажем, что представляет собой эта программа, какими возможностями, преимуществами и недостатками обладает, а также дадим пару уроков по основам проектирования объемных моделей и операций с ними.
Содержание
Что такое OpenSCAD
OpenSCAD представляет собой скриптовый 3D-редактор параметрических моделей. Программа занимает крайне мало места на жестком диске, при этом обладает обширным функционалом, позволяющим создавать сложные и многогранные модели.
[off_ad]
Интерфейс программы достаточно прост. Кому-то это покажется плюсом – нет лишних и ненужных нагромождений, на виду только окно для ввода кода слева, окошко с визуализацией модели и консоль справа, а также пара пунктов меню сверху. Для начинающих это может быть минусом – подсказок и интерактивности минимум, вспомогательные кнопки не помогают при непосредственном моделировании.
Чтобы начать создавать модели, нужно просто написать соответствующую команду в левой части окна. Так выглядит окно OpenSCAD на MacOS (на других системах заметных отличий нет).
Полезно также почитать: Подробный обзор программы Wings 3d
Возможности OpenSCADа
Чтобы сделать, к примеру, самый простой геометрический примитив – куб – нужно просто написать команду cube(), а в скобках указать размер грани. При нажатии на F5 в правой части окна появится окошко визуализации с готовой фигурой, расположенной на осях координат в точном соответствии с указанным размером.
В программе есть все необходимое для программиста, включая разделение программы на модули, возможность написания библиотек, циклы, условия и функции (например, математические). При помощи математических функций можно создавать довольно сложные геометрические фигуры, а потом соединять их друг с другом, получая в результате еще более сложные модели.
Без знаний сложных математических функций пользователю будет доступно создание скудного набора графических примитивов, таких как сферы, параллелепипеды, цилиндры и т. д. Набор операций тоже скромный – масштаб, трансляция, поворот и комбинирование при помощи булевых операций, создание тел вращения и вытяжения. Для того чтобы снять фаску с ребра фигуры, нужно искать специальные библиотеки, включающие соответствующие функции. То же самое с шестеренками и резьбой.
Ведь многое придется держать в уме: в программе отсутствует визуализация размеров, не отображается элемент в окне визуализации, код которого редактируется в данный момент. То есть необходимо запоминать, за какой элемент отвечает каждая часть кода.
Преимущества и недостатки
Программа имеет целый ряд плюсов, отметим самые основные:
- Полностью бесплатная модель распространения. Любой желающий может загрузить утилиту с официального сайта и пользоваться. Также можно по желанию поддержать производителя, заплатив ему небольшую сумму на сайте.
- Открытый исходный код.
- Портативность: нет необходимости устанавливать программу. Можно загрузить ее на флеш-карту и запускать на любом удобном компьютере.
- Интуитивно понятный интерфейс, которым легко научиться пользоваться. Сам язык проектировки также прост.
- Не занимает много памяти на накопителе (всего 14 мегабайт).
- Доступен не только на Windows (как 64, так и 32-битной версии), но также на MacOS и Linux.
- При необходимости можно перенести свои проекты на другие CAD (Системы автоматизированного проектирования), так как код, написанный в OpenSCAD, будет легко распознаваться большинством из них.
- В ходе работы с программой можно усвоить азы программирования, после чего переключиться на другие CAD – более сложные, но и обладающие большим диапазоном возможностей. Некоторые из САПР также имеют поддержку параметрических систем проектирования.
- Проект можно сохранить в различных форматах: STL, OFF, AMF, DXF, SVG, CSG.
Модель можно создать в OpenScad, прописав несколько незамысловатых команд. К примеру, чтобы создать квадрат в середине экрана со стороной 100 мм, достаточно написать следующее: «cube (100, true)». Отдельно стоит перечислить главные преимущества кода, с которым предстоит работать в программе:
- Простая и железная логика поведения объекта. Возможность точно назначать размеры фигур.
- Возможность делать проекты с помощью блоков, которые потенциально могут использоваться неоднократно. Здесь можно провести параллель с объектно-ориентированным программированием.
- Возможность задавать размеры с помощью параметров – замена одного числа меняет фигуру целиком, нет необходимости переписывать размеры и расположение каждой грани.
- Поддерживается использование математических функций, условий и циклов, возможность контроля версий и подключения сторонних библиотек.
Простота языка – это заметное преимущество, так как иногда проще набрать команду собственными руками, чем искать нужный ярлык или пункт меню в интерактивной оболочки. Тем более, что второй путь занимает гораздо больше времени.
Но программа OpenSCAD не лишена и минусов. Самые значительные из них:
- При создании моделей используются примитивы. Это значительно упрощает проектирование, но в то же время многие возможности становятся недоступны при таком способе моделирования.
- Легко убрать фаску с грани не получится. Для обеспечения плавности фигур нужно тратить много времени. Во многих других CAD это делается одним кликом курсора.
- Язык OpenSCAD неполноценен, также он является недостаточно низкоуровневым.
- Плохо подходит для работы со скульптурой или анимацией. Для этих целей лучше пользоваться Blender.
- Если вы только начинаете использовать программу и знаете мало команд, то вам будет удобнее пользоваться специальными иконками с определенными действиями в интерактивной оболочке. К сожалению, интерфейс OpenSCAD довольно беден, и функций в нем предоставлено недостаточно.
- Программа тормозит при обработке и рендере сложных моделей. Особенно, если модель имеет большое количество граней.
- OpenSCAD редко обновляется. Если обновление все же появилось, то оно вряд ли что-то значительно поменяет. Последнее на данный момент обновление датируется маем 2019 года.
- Отсутствует поддержка сплайнов и NURBS.
Уроки для начинающих по OpenSCAD
Ниже мы рассмотрим, что нужно знать и уметь начинающему программисту в OpenSCAD.
Настройка программы
Настройка программы не вызывает никаких трудностей, достаточно выбрать нужную версию и скачать с официального сайта. Есть 64-битная и 32-битная версии. При необходимости можно выбрать портативную версию, не требующую установки на компьютер (например, если нужно закачать ее на флешку и работать со своими проектами на других ПК).
Основы
Для начала рассмотрим, как создавать простейшие геометрические фигуры, а затем расскажем, какие основные операции к ним можно применять.
Сфера создается следующей командой: «sphere(r=x, $fn=y)», где r – радиус, а $fn – разрешение. Наглядно разницу в разрешении вы можете увидеть на примерах ниже.
У наиболее гладкой фигуры (которая больше всего похожа на шар) разрешение равно 100, время у фигуры в левом нижнем углу – 4 при радиусе 8. Также в функции sphere можно задавать и другие параметры (вместо радиуса – диаметр d, вместо разрешения – угловое разрешение $fa или размер грани в мм $fs). Центр сферы всегда по умолчанию располагается в начале координат.
Параллелепипед создается функцией «cube(size=[x,y,z], center=true )», где x, y, z – длины сторон по соответствующим осям. Значение center можно заменить на false (это его значение по умолчанию), чтобы расположить фигуру в положительных значениях осей, а не строго по центру. Так выглядит параллелепипед, вызванный командой «cube([10, 20, 30], true );» (как видите, это сокращенный вариант записи, т. е. ключевые аргументы прописывать необязательно).
Чтобы вызвать куб, достаточно указать только одно число, ему будут равны длины граней во всех плоскостях (например, при команде cube(5) появится куб со стороной 5 мм, левый нижний задний угол которого находится в начале координат).
Пирамиду, цилиндр, а также их усеченные варианты создаются при помощи функции cylinder. В общем виде функция выглядит следующим образом: «cylinder(h=a, r1=b, r2=c, center=true, $fn=d);», где h – высота цилиндра, r1 – радиус снизу, r2 – радиус сверху, $fn – число граней. Ключевые аргументы писать также необязательно при вызове команды, краткий вариант записи — «cylinder(a, b, c, center=true, d);».
Вместо r1 и r2 можно указывать диаметры d1 и d2. Если нужен цилиндр, достаточно указать один радиус r.
Многогранник задается через функцию polyhedron. Пример кода в OpenScad:
polyhedron(
points=[ [10,10,0], [10,-10,0], [-10,-10,0], [-10,10,0], [0,0,10] ],
faces=[ [0,1,4], [1,2,4], [2,3,4], [3,0,4], [1,0,3], [2,1,3] ]
);
Функция сложная в использовании, а потому применяется редко. В параметре points указываются координаты всех вершин фигуры, а в faces – грани, в которых перечислены индексы элементов в points. То есть грани создаются за счет соединения точек, чьи координаты указаны.
В данном случае мы имеем дело с пирамидой, основание которой находится в плоскости Z = 0 по центру, а вершина располагается на высоте 10 мм. Основание создается за счет двух треугольных граней, поэтому в параметре faces перечислено 6 элементов.
Как кодировать в OpenScad
Функционал программы позволяет совершать операции с фигурами.
Чтобы переместить объект, нужно применить функцию «translate ([x, y, z])», где x, y, z – расстояние по соответствующим осям, на которое фигуру нужно передвинуть. Сначала мы меняем первоначальное положение, а потом создаем в нем фигуру:
translate([10,10,0]) cube(10, true);
То есть центр куба со стороной 10 мм будет располагаться в координатах x = 10, y = 10, z = 0.
Если нужно передвинуть несколько объектов, их нужно перечислить в фигурных скобках:
translate([x,y,z]) {};
Переносы могут быть вложенными, если вы хотите переместить набор моделей в одну точку, а затем одну из них передвинуть относительно этой точки:
translate([x1,y1,z1]) {
cube(10, true);
translate([x2,y2,z2]) sphere(5, $fn=50);
};
Таких вложенных переносов может быть много.
Модели можно вращать на заданное количество градусов при помощи функции rotate, указанной перед другой функцией, создающей фигуру: «rotate([x, y, z]) cube(5, true);», где x, y, z – градусы по осям. Пример кода:
Rotate([90, 0, 0]) cube(5, true);
В данном случае мы вращаем куб на 90 градусов по оси x. Как и в случае с функцией translate, можно делать операцию над группой объектов, заключенных в фигурные скобки:
Rotate([x,y,z]){};
Сочетаем обе функции:
- color([0,1,1]) translate([0,0,15]) rotate([75,0,0]) cube(10, true);
- color([1,0,1]) rotate([75,0,0]) translate([0,0,15]) cube(10, true);
Учитывайте, что порядок функций имеет значение. Бирюзовая фигура была сначала повернута, затем перемещена, сиреневая – наоборот. Цифры, указанные в функциях, одинаковые.
Функция, позволяющая складывать (объединять) объекты: «union(){}», в фигурных скобках указываются объекты.
Пример кода:
union(){
cylinder(30, 6, 6, true, $fn=60);
rotate([60,0,0]) cylinder(30, 6, 6, true, $fn=60);
};
В данном случае мы объединяем 2 цилиндра, один из которых повернут на 60 градусов. Количество объектов в фигурных скобках не ограничено.
Функция разности – difference(){} — позволяет вычитать один объект из другого. В фигурных скобках первой указывается фигура, из которой будут вычитаться последующие.
Пример кода:
difference(){
cylinder(30, 6, 6, true, $fn=60);
rotate([60,0,0]) cylinder(30, 6, 6, true, $fn=60);
};
Фигуры с теми же параметры, что и в примере со сложением.
Функция intersection(){} оставляет только общую область, в которой перечисленные в фигурных скобках объекты пересекаются.
Пример кода:
intersection(){
cylinder(30, 6, 6, true, $fn=60);
rotate([60,0,0]) cylinder(30, 6, 6, true, $fn=60);
};
Модификатор # используется, если вы хотите, чтобы объект, участвовавший в пересечении, сложении или вычитании, был виден целиком. Это бывает полезно при отладке.
Пример кода:
translate([10,0,0]) difference(){
cylinder(30, 6, 6, true, $fn=60);
rotate([60,0,0]) #cylinder(30, 6, 6, true, $fn=60);
};
или
translate([-10,0,0]) intersection(){
#cylinder(30, 6, 6, true, $fn=60);
rotate([60,0,0]) cylinder(30, 6, 6, true, $fn=60);
};
В первом случае мы видим вторую фигуру, вычитаемую из первой, которая стала прозрачной. Во втором случае отображен первый цилиндр, участвовавший в операции пересечения.
Модификатор * прописывается перед участком кода программы, который пользователь не хочет выводить в окно просмотра в данный момент. При этом не требуется удалять код. * — аналог # на некоторых языках программирования, которым можно научиться тут: https://itvdn.com/ru.
Модификатор ! выделяет элемент, перед которым он указывается. При этом остальной код не отображается в окне просмотра.
Модификатор % убирает элемент из кода, но модель показывается прозрачным серым цветом.
Фигуры можно сжимать посредством функции «scale([kx, ky, kz])», где kx, ky, kz – коэффициенты растяжения (или, при значении меньше 1, – сжатия) по соответствующим осям.
Пример кода:
scale([2,2,0.5]) sphere(9, $fn=25);
В данном случае мы растягиваем сферу в 2 раза в плоскости xy и сжимаем ее по z вдвое.
Чтобы задавать цвет модели, нужно использовать команду color(x, y), где x – цвет в виде строки («red», «green», «black», «yellow», «lime», «wheat», вплоть до составных, вроде «lightgoldenrodyellow».) или в формате [R, G, B] (R – доля красного, G – доля зеленого, B – доля синего), а y – прозрачность (0 – невидимый, 1 – совсем непрозрачный). Прозрачность в OpenSCAD иногда отображается некорректно.
Обычно доли цветов задаются от 0 до 255, но в случае с OpenSCAD нужно указывать цифру от 0 до 1. К примеру, синий цвет задается как [0, 0, 1]. Полный список цветов в текстовом формате:
Функция text позволяет создать двумерную модель написанного текста. Поддерживается как латиница, так и кириллица. Шрифты берутся из вашей системы, т. е., если вы хотите нестандартный шрифт, то нужно загрузить его и установить в Windows, затем пользоваться им в самой программе. В программе OpenSCAD есть справка по шрифтам, где описано, какой из шрифтов какие стили поддерживает – жирный, курсив и т. д.
Пример кода:
text(text=»\u00A9 Наш Колхоз»,
language=»ru»,
font=»Segoe Script:style=Bold»,
$fn=30);
В параметре language задается язык написанного (по умолчанию параметр равен «en») в параметре font указывается шрифт, после двоеточия в style можно указать курсив («Italic») или жирный («Bold»), при условии, что эти стили поддерживаются данным шрифтом.
С помощью всех перечисленных функций уже можно создавать сложные фигуры.
Как экспортировать дизайн из OpenScad в STL
В интерфейсе программы нужно перейти по пути Файл – Экспорт, затем выбрать пункт «Экспорт как STL», чтобы экспортировать проект, если его нужно открыть в другом редакторе.
Все дело в том, что OpenSCAD сохраняет проект в текстовом формате, а не в двоичном. Чтобы преобразовать файл в двоичный формат, можно воспользоваться утилитой MeshLab, которая совершенно бесплатна.
Для начинающего программиста будет довольно тяжело работать с этой программой и создавать сложные фигуры, так как нужен опыт работы с кодом. Но в то же время для опытного программиста OpenSCAD дает огромный диапазон возможностей благодаря подключению сторонних библиотек и высокой скорости работы, а также функции импорта. Ею можно воспользоваться, чтобы продолжить работать с проектом в другом редакторе, если функционала OpenSCAD перестанет хватать.
Полезно также почитать: Подробно о программе Daz Studio
Полезное видео
В этом видео дается подробный обзор программы OpenSCAD: