OpenSCAD - это программа твердотельного 3D моделирования, которая очень популярна среди RepRap сообщества. Принцип ее работы основан на написании алгоритма отрисовки 3D объекта.
Для начала нужно настроить наше рабочее пространство, как это сделать и облегчить себе работу в OpenSCAD читайте здесь.
Теперь удобно расположите ваши руки на клавиатуре и мы начнем.
Весь код мы будем вводить в окне Sublime Text и по нажатию Ctrl+S он будет отображаться в окне OpenSCAD. Но вы также можете обойтись и одним OpenSCAD, в этом случае вводите код в окно редактора OpenSCAD.
OpenSCAD использует С++-подобный язык программирования для создания модели, которая отображается на экране.
Первое что мы сделаем так это включим отображение осей в рабочем пространстве OpenSCAD для того чтобы проще было ориентироваться в пространстве, меню View - Show Axes.
Куб в OpenSCAD относится к прямоугольной призме. Чтобы создать куб введите:
Мы также можем отобразить куб в центре координат:
Куб с разными сторонами отображается следующей командой, где размер указывается в формате [x,y,z]:
Чтобы переместить объект используется команда translate([x,y,z]), например переместим предыдущий куб на 2 по Х, на 2 по У и на 10 по Z:
Если нужно переместить группу объектов то эта группа заключается в фигурные скобки, например так:
Перемещать естественно можно и в отрицательные полуоси, например:
А теперь сделаем модель буквы "П"
Каждая строка кода завершается точкой с запятой, после фигурных скобок точку с запятой ставить не обязательно.
Вы можете использовать цифры при задании команд и создании объектов, но если вы хотите чтобы от изменения одного значения пересчитались и все остальные и когда ваша 3D модель будет очень сложной с большим числом строк кода, вам не обойтись без переменных.
Переменная определяется следующим образом:
Попробуйте поэкспериментировать с различными значениями параметров.
Как видите теперь намного проще изменять модель.
Теперь давайте взглянем на другие формы которые вы можете использовать в OpenSCAD.
Простая сфера (шар) может быть определена командой:
Вы можете управлять разрешением сферы и других форм при помощи параметра $fn. Разрешение можно задать как для всего скрипта:
На время проектирования рекомендуется использовать разрешение 20-40, а при компиляции и прорисовке готовой модели 100-150, потому что чем выше разрешение тем дольше будет проходить компиляция и тем больше понадобится памяти OpenSCAD.
Для цилиндра нужно указать два параметра, радиус и высоту, а также можно указать разрешение как для сферы и положение относительно центра как для куба:
Цилиндр создается в вертикальном положении, а если нам он нужен в горизонтальном положении то мы воспользуемся функцией вращения rotate([x,y,z]), где x,y,z - это угол на который нужно повернуть относительно соответствующей оси. Например повернем цилиндр на 90° относительно оси Y:
А теперь повернем и переместим цилиндр одновременно:
Из цилиндра можно получить конус задав разные диаметры сверху и снизу:
Где r1 - диаметр основания, а r2 - диаметр вершины. Вы также можете получить идеальный конус задав диаметр r2 равным нулю.
Все что мы рассмотрели ранее позволяет создавать объекты сложной формы посредством добавления небольших частей друг к другу. Но очень часто нам нужно вырезать какую-то часть. И рассмотрим мы это на примере создания кольца. В функции вырезания из первого объекта вырезаются все последующие:
Иногда очень удобно видеть что мы вырезаем и в этом случае можно использовать специальный знак #, который делает видимым вырезаемую часть:
Вырезаемая часть всегда должна быть немного больше. Например в рассмотренном выше примере, если между внешним и внутренним цилиндрами не будет перекрытия мы получим "оболочку" равную нулю. Это плохой стиль 3D моделирования, и может привести к ошибкам при генерации модели (рендеринг) или отправке модели в 3D принтер.
Поэтому всегда учитывайте это и делайте вырезаемый объект немного выступающим, 0.1мм достаточно.
А теперь используем объединение и вырезание в одном примере, чтобы наглядно показать как вырезать из группы объектов:
Модули являются мощным средством в OpenSCAD, они позволяют упростить и повторно использовать однажды написаный код.
Сделаем ранее рассмотренную модель буквы "П" с использованием модуля:
А теперь давайте улучшим модуль и будем передавать параметры в него, что позволит повторно использовать модуль с разными размерами, и создадим несколько разных букв "П":
Модули незаменимы когда вы работаете с функциями которые должны повторно использоваться в вашей модели.
Вот мы и рассмотрели основные функции OpenSCAD, которые позволят вам создавать ваши 3D модели в такой замечательной программе твердотельного 3D моделирования как OpenSCAD.
Продолжение следует...
Для начала нужно настроить наше рабочее пространство, как это сделать и облегчить себе работу в OpenSCAD читайте здесь.
Теперь удобно расположите ваши руки на клавиатуре и мы начнем.
Весь код мы будем вводить в окне Sublime Text и по нажатию Ctrl+S он будет отображаться в окне OpenSCAD. Но вы также можете обойтись и одним OpenSCAD, в этом случае вводите код в окно редактора OpenSCAD.
OpenSCAD использует С++-подобный язык программирования для создания модели, которая отображается на экране.
Отобразить оси
Первое что мы сделаем так это включим отображение осей в рабочем пространстве OpenSCAD для того чтобы проще было ориентироваться в пространстве, меню View - Show Axes.
Куб и Перемещение
Куб в OpenSCAD относится к прямоугольной призме. Чтобы создать куб введите:
cube(5);
Мы также можем отобразить куб в центре координат:
cube(5, center=true);
Куб с разными сторонами отображается следующей командой, где размер указывается в формате [x,y,z]:
cube([2,2,5], center=true);
Чтобы переместить объект используется команда translate([x,y,z]), например переместим предыдущий куб на 2 по Х, на 2 по У и на 10 по Z:
translate([2,2,10]) cube([2,2,5], center=true);
Если нужно переместить группу объектов то эта группа заключается в фигурные скобки, например так:
translate([2,2,10]) {
cube([2,2,5], center=true);
//......
}В OpenSCAD все что идет после символов // является комментарием и не учитывается интерпретатором OpenSCAD при генерации 3D модели, в них можно писать пометки в вашем коде чтобы потом легче было разобраться в нем, особенно когда код будет очень большим и сложным.
Перемещать естественно можно и в отрицательные полуоси, например:
translate([2,-2,-10]) {
cube([2,2,5], center=true);
//......
}
А теперь сделаем модель буквы "П"
translate([2.5,0,2.5]) cube([2,2,5], center=true); //правая нога
translate([-2.5,0,2.5]) cube([2,2,5], center=true); //левая нога
translate([0,0,5]) cube([7,2,2], center=true); //перекладина
Каждая строка кода завершается точкой с запятой, после фигурных скобок точку с запятой ставить не обязательно.
Переменные
Вы можете использовать цифры при задании команд и создании объектов, но если вы хотите чтобы от изменения одного значения пересчитались и все остальные и когда ваша 3D модель будет очень сложной с большим числом строк кода, вам не обойтись без переменных.
Переменная определяется следующим образом:
parameter = 10;В OpenSCAD нельзя переопределять переменные, т.е. переменная должна быть задана только один раз, и она будет равна последнему присвоенному значению по всему тексту скрипта, например:
a = 10;Даст следующий результат:
echo(a);
a = 15;
echo(a);
ECHO: 15А теперь давайте сделаем ту же модель буквы "П" с применением переменных:
ECHO: 15
depth = 2; //глубина модели по оси Y
weight_leg = 2; //ширина ноги по оси X
height_leg = 5; //высота модели по оси Z
legs_space = 5; //расстояние между осями ног по X
weight_bridge = legs_space + weight_leg; //ширина перекладины равна расстоянию между осями ног плюс ширина ноги
height_bridge = weight_leg; //высота перекладины равна ширине ноги
translate([legs_space/2,0,height_leg/2]) //перемещаем правую ногу вправо по X
cube([weight_leg,depth,height_leg], center=true); //правая нога
translate([-(legs_space/2),0,height_leg/2]) //перемещаем левую ногу влево по X
cube([weight_leg,depth,height_leg], center=true); //левая нога
translate([0,0,height_leg + height_bridge/2]) //перемещаем перекладину вверх по Z
cube([weight_bridge,depth,height_bridge], center=true); //перекладина
Попробуйте поэкспериментировать с различными значениями параметров.
Как видите теперь намного проще изменять модель.
Теперь давайте взглянем на другие формы которые вы можете использовать в OpenSCAD.
Сфера
Простая сфера (шар) может быть определена командой:
sphere(r=5);
Вы можете управлять разрешением сферы и других форм при помощи параметра $fn. Разрешение можно задать как для всего скрипта:
$fn = 50;Так и для конкретной формы которая позволяет использовать этот параметр:
sphere(r=5, $fn = 50);
На время проектирования рекомендуется использовать разрешение 20-40, а при компиляции и прорисовке готовой модели 100-150, потому что чем выше разрешение тем дольше будет проходить компиляция и тем больше понадобится памяти OpenSCAD.
Цилиндр и Вращение
Для цилиндра нужно указать два параметра, радиус и высоту, а также можно указать разрешение как для сферы и положение относительно центра как для куба:
cylinder(r=5, h=5, center=true, $fn = 50);
Цилиндр создается в вертикальном положении, а если нам он нужен в горизонтальном положении то мы воспользуемся функцией вращения rotate([x,y,z]), где x,y,z - это угол на который нужно повернуть относительно соответствующей оси. Например повернем цилиндр на 90° относительно оси Y:
rotate([0,90,0]) cylinder(r=5, h=5, center=true, $fn = 50);
А теперь повернем и переместим цилиндр одновременно:
translate([0,0,5]) rotate([0,90,0]) cylinder(r=5, h=5, center=true, $fn = 50);Этот код можно написать и подругому:
translate([0,0,5]) {
rotate([0,90,0]){
cylinder(r=5, h=5, center=true, $fn = 50);
}
}
Из цилиндра можно получить конус задав разные диаметры сверху и снизу:
cylinder(r1=20, r2=3, h=40, center=true, $fn=50);
Где r1 - диаметр основания, а r2 - диаметр вершины. Вы также можете получить идеальный конус задав диаметр r2 равным нулю.
Объединение и Вырезание
Объединение неявно когда не используется. Но оно необходимо, например когда необходимо вырезать один объект из группы объектов. Пример объединения:union() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
Все что мы рассмотрели ранее позволяет создавать объекты сложной формы посредством добавления небольших частей друг к другу. Но очень часто нам нужно вырезать какую-то часть. И рассмотрим мы это на примере создания кольца. В функции вырезания из первого объекта вырезаются все последующие:
$fn = 50;
difference() {
// Из этого цилиндра мы будем вырезать
cylinder(r=10, h=5, center=true);
// Все остальное следующее далее будет вырезано
cylinder(r=8, h=6, center=true);
}
Иногда очень удобно видеть что мы вырезаем и в этом случае можно использовать специальный знак #, который делает видимым вырезаемую часть:
$fn = 50;
difference() {
// Эта часть будет создана
cylinder(r=10, h=5, center=true);
// Все остальное следующее далее будет вырезано
#cylinder(r=8, h=6, center=true);
}
Вырезаемая часть всегда должна быть немного больше. Например в рассмотренном выше примере, если между внешним и внутренним цилиндрами не будет перекрытия мы получим "оболочку" равную нулю. Это плохой стиль 3D моделирования, и может привести к ошибкам при генерации модели (рендеринг) или отправке модели в 3D принтер.
Поэтому всегда учитывайте это и делайте вырезаемый объект немного выступающим, 0.1мм достаточно.
А теперь используем объединение и вырезание в одном примере, чтобы наглядно показать как вырезать из группы объектов:
difference() {
union() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
rotate([0,90,0]) cylinder(r=1, h=10, center=true, $fn=100);
}
Модули
Модули являются мощным средством в OpenSCAD, они позволяют упростить и повторно использовать однажды написаный код.
Сделаем ранее рассмотренную модель буквы "П" с использованием модуля:
// Инструкции как должна создаваться буква "П"
module pi() {
// Параметры
depth = 2; //глубина модели по оси Y
weight_leg = 2; //ширина ноги по оси X
height_leg = 5; //высота модели по оси Z
legs_space = 5; //расстояние между осями ног по X
weight_bridge = legs_space + weight_leg; //ширина перекладины равна расстоянию между осями ног плюс ширина ноги
height_bridge = weight_leg; //высота перекладины равна ширине ноги
translate([legs_space/2,0,height_leg/2]) //перемещаем правую ногу вправо по X
cube([weight_leg,depth,height_leg], center=true); //правая нога
translate([-(legs_space/2),0,height_leg/2]) //перемещаем левую ногу влево по X
cube([weight_leg,depth,height_leg], center=true); //левая нога
translate([0,0,height_leg + height_bridge/2]) //перемещаем перекладину вверх по Z
cube([weight_bridge,depth,height_bridge], center=true); //перекладина
}
// Эта строчка говорит OpenSCAD найти инструкции как создавать букву "П" и создать ее
pi();
А теперь давайте улучшим модуль и будем передавать параметры в него, что позволит повторно использовать модуль с разными размерами, и создадим несколько разных букв "П":
// Инструкции как должна создаваться буква "П"
module pi(depth, weight_leg, height_leg, legs_space) {
// Параметры
weight_bridge = legs_space + weight_leg; //ширина перекладины равна расстоянию между осями ног плюс ширина ноги
height_bridge = weight_leg; //высота перекладины равна ширине ноги
translate([legs_space/2,0,height_leg/2]) //перемещаем правую ногу вправо по X
cube([weight_leg,depth,height_leg], center=true); //правая нога
translate([-(legs_space/2),0,height_leg/2]) //перемещаем левую ногу влево по X
cube([weight_leg,depth,height_leg], center=true); //левая нога
translate([0,0,height_leg + height_bridge/2]) //перемещаем перекладину вверх по Z
cube([weight_bridge,depth,height_bridge], center=true); //перекладина
}
// Эта строчка говорит OpenSCAD найти инструкции как создавать букву "П" и создать ее
pi(2,2,5,5);
translate([10,0,0]) pi(1,3,7,4);
translate([-10,0,0]) pi(4,1,2,5);
Модули незаменимы когда вы работаете с функциями которые должны повторно использоваться в вашей модели.
Вот мы и рассмотрели основные функции OpenSCAD, которые позволят вам создавать ваши 3D модели в такой замечательной программе твердотельного 3D моделирования как OpenSCAD.
Продолжение следует...
При копировании ссылка на источник обязательна.
Комментариев нет:
Отправить комментарий