Урок 1. Графічні примітиви OpenSCAD Офіційна сторінка продукту https://openscad.org/ посилання на онлайн застосунок https://www.rollapp.com/app/openscad OpenSCAD - відкрита САПР для параметричного створення твердотільних тривимірних об'єктів OpenSCAD не є інтерактивним редактором. Натомість програма будує модель на основі текстового опису та перебудовує її заново при кожній зміні цього опису. OpenSCAD надає два основні методи моделювання: конструктивна блокова геометрія та видавлювання двовимірних контурів. Для завдання двовимірних контурів використовують AutoCAD DXF-файли. Графічні примітиви Паралелепіпед cube(size=[x,y,z], center=boolean_value) Приклади cube(); - куб зі стороною 1 cube(6); - куб зі стороною 6 cube([4,6,2]); - паралелепіпед з сторонами 4, 6, 2 cube([4,6,2], center=true); - паралелепіпед з сторонами 4, 6, 2 з цетром в точці (0,0,0) Сфера sphere(r = radius | d = diameter) Приклади sphere(3); sphere(r=3); sphere(d=3); Роздільність (кількість сторін багатокутника, яким будується коло) $fn=100; Приклад $fn=100; sphere(d=3); або sphere(d=3, $fn=100 ); Циліндр (конус, піраміда) cylinder(h,r|d,center); cylinder(h=a, r1=b, r2=c, center=true, $fn=d) при малих значеннях $fn будується піраміда/зрізана піраміда Приклади $fn=100; cylinder(h=10,r=20); - цилінр висота 10, радіус основи 20 cylinder(h=10,r1=10,r2=20); - зрізаний конус cylinder(h=10,r1=20,r2=10,center=true); - зрізаний конус з центром в точці (0,0,0) cylinder(h=10, r1=10, r2=5, center=true, $fn=5) cylinder(h=10,r1=10,r2=0); - конус cylinder(h=10,d=40); cylinder(h=10,d1=40,d2=20,center=true); Багатогранник 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 - грані, задані номерами (починаючи з 0) вершин. polyhedron( points=[ [0,0,0], [0,0,5],[0,5,0],[5,0,0]], faces=[ [0,1,3],[0,1,2],[0,2,3],[1,2,3] ] ); Урок 2. Базові операції перетворення графічних примітивів Переміщення об`єкта на вказаний вектор translate([x,y,z]) об’єкт; об’єкт переміщується на х одиниць по осі абсцис, на y одиниць по осі ординат і на z одиниць по осі аплікат. При застосуванні до групи об’єктів - цю групу потрібно взяти в фігурні дужки {}. translate([x,y,z]) { об’єкт1; об’єкт2; об’єкт3; … } Приклад
Поворот rotate([degX, degY, degZ]) об’єкт; об’єкт обертається на degX градусів навколо осі абсцис, на degY градусів навколо осі ординат і на degZ градусів навколо осі аплікат. При застосуванні до групи об’єктів - цю групу потрібно взяти в фігурні дужки {} rotate([degX, degY, degZ]) { об’єкт1; об’єкт2; об’єкт3; … } Напрямок повороту визначається за правилом “правої руки” Якщо направити великий палець правої руки вздовж додатнього напрямку відповідної осі - інші пальці покажуть напрямок обертання. обертання навколо осі X від осі +Y до осі +Z. обертання навколо осі Y від осі +Z до осі +X. обертання навколо осі Z від осі +X до осі +Y. Приклад
Можливо комбінувати переміщення і поворот. При цьому порядок операцій впливає на кінцевий результат Приклад
Стиснення/розтяг scale( [x, y, z]) об’єкт; об’єкт стискається/розтягується на х по осі абсцис, на y одиниць по осі ординат і на z одиниць по осі аплікат. Числа x,y,z - коефіцієнти стиснення (лінійні розміри домножуються на коефіцієнти). Якщо коефіцієнти менші за 1 - відбувається стиснення, якщо більші за 1 - розтяг. При застосуванні до групи об’єктів - цю групу потрібно взяти в фігурні дужки {}. scale( [x, y, z]) { об’єкт1; об’єкт2; об’єкт3; … } Приклад
Зміна розмірів resize ([ x, y , z ]) об’єкт; Змінює розмір дочірнього об’єкта відповідно до заданих x, y та z. Якщо x, y або z дорівнює 0, цей розмір залишається таким, яким він є. При застосуванні до групи об’єктів - цю групу потрібно взяти в фігурні дужки {}. resize ([ x, y , z ]) { об’єкт1; об’єкт2; об’єкт3; … } Колір - параметри приймають значення від 0 до 1 color([R,G,B,alpha]) { об’єкт1; … } Приклад
Побудова 3D моделі ялинки
Модифікація прикладу
Завдання на урок Урок 3. Логічні операції перетворення графічних примітивів Об’єднання фігур union() { об’єкт1; об’єкт2; … } Приклад
Кількість обєктів може бути більше двох.
Різниця об’єктів difference() { об’єкт1; об’єкт2; } Приклад
Якщо оператор difference() містить більше 2 об’єктів, то другий і всі наступні віднімаються від першого.
Якщо необхідно, щоб difference() виконувалось від 2 чи більше об’єктів, застосовують union() до цих об’єктів
Переріз об’єктів intersection() { об’єкт1; об’єкт2; } Приклад
Завдання на урок Внутрішні радіуси 3,5,7; товщина кільця - 1 , висота - 2. Частина 1. Частина 2. color([1,0,0]) difference() { cylinder(h=2,r=4,$fn=50, center=true); cylinder(h=4,r=3,$fn=50, center=true); } color([0,1,0]) rotate([90,0,0]) difference() { cylinder(h=2,r=6,$fn=50, center=true); cylinder(h=4,r=5,$fn=50, center=true); } color([0,0,1]) rotate([0,90,0]) difference() { cylinder(h=2,r=8,$fn=50, center=true); cylinder(h=4,r=7,$fn=50, center=true); } Урок 4. Логічні операції перетворення графічних примітивів Геометрична сума Мінковського minkowski() { об’єкт1; об’єкт2; } Приклад 1.
При виконанні суми Мінковського кольори фігур ігноруються Приклад 2.
Приклад 3.
Опукла оболонка. Опукла оболонка містить всі відрізки, які з’єднють довільну точку однієї фігури з довільною точкою іншої. hull () { об’єкт; об’єкт; } Приклад 1.
Приклад 2.
Робота на уроці Пелюстка hull() { translate([3,0,0]) rotate([0,0,60]) cylinder(1,3,3,$fn=3); translate([7,0,0]) cylinder(1,4,4, $fn=100); translate([11,0,0]) cylinder(1,3,3,$fn=3); } ** Урок 5. Модулі для побудови фрагментів 3D моделі. Модуль (функція) - іменована група операторів. Опис модуля module nameModule(параметри) { оператори; } Виклик модуля nameModule(параметри); Якщо параметри відсутні, круглі дужки записують без параметрів. Приклад 1
Приклад 2
Приклад 3.
Урок 6. 2D графічні примітиви Хоча двомірні примітиви теоретично нескінченно тонкі, в OpenSCAD вони відображаються з товщиною 1 для зручності роботи з ними. Квадрат square(size = [x, y], center = true/false); square (size = x, center = true / false); Cтворює квадрат або прямокутник у першому квадранті. Коли значення центра дорівнює true, квадрат центрується на початку координат. Імена аргументів є необов'язковими, якщо вони задані у вказаному порядку.
Круг circle() створює коло на початку координат. Усі параметри, крім r, мають бути названі. circle(r=radius | d=diameter);
Багатокутник polygon(points = [[x, y], ...], paths = [[p1, p2, p3..], ...], convexity = N); Параметри points Список x,y точок багатокутника. Точки пронумеровано від 0 до n-1. paths Якщо шлях не вказано, то всі точки використовуються в зазначеному порядку. Якщо вказано один шлях, він вказує порядок проходження точок. Якщо вказані декілька шляхів, створюються первинні та вторинні обриси. Вторинні обриси віднімаються з первинного обрису (як difference()). Вторинні контури можуть бути повністю або частково в межах первинних контурів. convexity Ціла кількість "внутрішніх" кривих, тобто очікуваних перетинів шляху довільної лінії через багатокутник. Приклад Координати зовнішньої оболонки [-6,6],[5,6],[-1,1],[-1.4]
Координати внутрішніх точок [-4,5],[1,5],[-2,3]
Урок 7. Операція обертання При обертанні навколо осі замкнутих кривих утворюється тіло обертання. Обертальна екструзія rotate_extrude() обертає двовимірний контур навколо осі Z, утворюючи тверде тіло. Двовимірна фігура візуалізується OpenSCAD на площині XY, тому представити цю операцію можна наступним чином: відбувається обертання двовимірної фігури навколо осі Y, утворюючи тверде тіло. Отримане тверде тіло розміщуєть так, щоб його вісь обертання лежала вздовж осі Z. rotate_extrude(angle = 360, convexity = 10) {...}
Вимоги: Двовимірна фігура повинна повністю перебувати або праворуч, або ліворуч від осі Y. Точніше кажучи, кожна вершина фігури повинна мати або x>=0, або x<=0. Якщо фігура перекриває вісь X, у вікні консолі з'являється попередження, а функція rotate_extrude()ігнорується.Приклад
Переміщення двовимірної фігури вздовж осі амплікат не впливає на результат екструзії
Переміщення по Y призводить до зміщення кінцевого об'єкта в напрямку Z. Переміщення по X збільшує діаметр кінцевого предмета.
Урок 8. Операція видавлювання. linear_extrude(height = 5, center = true, convexity = 10, twist =angle, slices = 20, scale = 1.0, $fn = 16) { оператори }
Приклад Урок 10. Оператор повторення for (змінна=[діапазон]){ оператори; } Приклади
Робота над проектами. Завдання 1. Шахівниця Завдання 2. Дизайн кімнати Завдання 3. Сервірування стола. Завдання 4. Машина Завдання 5. Торт Завдання 6. Робот |