Ім'я файлу: Повний конспект.docx
Розширення: docx
Розмір: 2739кб.
Дата: 30.05.2023
скачати

Урок 1. Графічні примітиви OpenSCAD

Офіційна сторінка продукту

https://openscad.org/

посилання на онлайн застосунок

https://www.rollapp.com/app/openscad

OpenSCAD - відкрита САПР для параметричного створення твердотільних тривимірних об'єктів 

OpenSCAD не є інтерактивним редактором. Натомість програма будує модель на основі текстового опису та перебудовує її заново при кожній зміні цього опису.

OpenSCAD надає два основні методи моделювання: конструктивна блокова геометрія та видавлювання двовимірних контурів. Для завдання двовимірних контурів використовують AutoCAD DXF-файли. 

Графічні примітиви

  1. Паралелепіпед  

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)


  1. Сфера

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 );

  1. Циліндр (конус, піраміда) 

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);

  1. Багатогранник

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. Базові операції перетворення графічних примітивів

  1. Переміщення об`єкта на вказаний вектор

translate([x,y,z])

об’єкт;

об’єкт переміщується на х одиниць по осі абсцис, на y одиниць по осі ординат і на z  одиниць по осі аплікат.
При застосуванні до групи об’єктів - цю групу потрібно взяти в фігурні дужки {}.

translate([x,y,z])

{

об’єкт1;

об’єкт2;

об’єкт3;



}

Приклад

sphere(5, $fn=100);

translate([0,0,5])

    sphere(5, $fn=100);







  1. Поворот

rotate([degX, degY, degZ])

об’єкт;

об’єкт обертається  на degX градусів  навколо осі абсцис, на degY градусів  навколо  осі ординат і на degZ градусів  навколо  осі аплікат. 

При застосуванні до групи об’єктів - цю групу потрібно взяти в фігурні дужки {}

rotate([degX, degY, degZ])

{

об’єкт1;

об’єкт2;

об’єкт3;



}

Напрямок повороту визначається за правилом “правої руки”

Якщо направити  великий палець правої руки вздовж додатнього напрямку відповідної осі - інші пальці покажуть напрямок обертання.

обертання навколо осі X від осі +Y до ​​осі +Z.

обертання навколо осі Y від осі +Z до осі +X.

обертання навколо осі Z від осі +X до осі +Y.

Приклад

cylinder(h=5, r=2);

rotate([90,0,0])

    cylinder(h=5, r=2);







Можливо комбінувати переміщення і поворот. При цьому порядок операцій впливає на кінцевий результат

Приклад

translate([0,0,3])  

   rotate([90,0,0])

      cylinder(h=5, r=2);

rotate([90,0,0])

  translate([0,0,3])  

     cylinder(h=5, r=2);





  1. Стиснення/розтяг

scale( [x, y, z]) 

об’єкт;

об’єкт стискається/розтягується  на х по осі абсцис, на y одиниць по осі ординат і на z  одиниць по осі аплікат. Числа x,y,z - коефіцієнти стиснення (лінійні розміри домножуються на коефіцієнти). Якщо коефіцієнти менші за 1 - відбувається стиснення, якщо більші за 1 - розтяг.

При застосуванні до групи об’єктів - цю групу потрібно взяти в фігурні дужки {}.

scale( [x, y, z]) 

{

об’єкт1;

об’єкт2;

об’єкт3;



}

Приклад

sphere(r=2, $fn=50);

scale([2, 4, 0.2])   

   sphere(r=2, $fn=50);








cylinder(h=7, r1=5, r2=0, $fn=50);

scale([2, 0.2, 1])   

   cylinder(h=7, r1=5, r2=0, $fn=50);





  1. Зміна розмірів

resize ([ x, y , z ]) 

об’єкт;

Змінює розмір дочірнього об’єкта відповідно до заданих x, y та z. Якщо x, y або z дорівнює 0, цей розмір залишається таким, яким він є.

При застосуванні до групи об’єктів - цю групу потрібно взяти в фігурні дужки {}.

resize ([ x, y , z ]) 

{

об’єкт1;

об’єкт2;

об’єкт3;



}

  1. Колір - параметри приймають значення від 0 до 1

color([R,G,B,alpha])
{


об’єкт1;

… 

}

Приклад

 cylinder(h=7, r1=4, r2=0, $fn=50);

 sphere(5);


resize([5,7,0])

{

   cylinder(h=7, r1=4, r2=0, $fn=50);

   sphere(5);

}






Побудова 3D моделі ялинки



cylinder(h=30,r1=30,r2=0);

translate([0,0,20])

    cylinder(h=30,r1=20,r2=0);

translate([0,0,45])

    cylinder(h=15,r1=10,r2=0);




Модифікація прикладу

color([0,0.5,0])

{

cylinder(h=30,r1=30,r2=0);

translate([0,0,20])

    rotate([10,0,0])

    {

        cylinder(h=30,r1=20,r2=0);

    translate([0,0,25])

        rotate([10,0,0])

            cylinder(h=15,r1=10,r2=0);

    }

}




Завдання на урок

Урок 3.  Логічні операції перетворення графічних примітивів

Об’єднання фігур

 union() {

об’єкт1;

об’єкт2;





Приклад

union()

{

    sphere(5);

    cylinder(h=10,r=1,$fn=6);

    }




Кількість обєктів може бути більше двох.


union()

{

    sphere(5);

    cylinder(h=10,r=1,$fn=6);

    color([0,0,1])

      translate([-6,-6,-1])

        cube([12,12,2]);

    }





Різниця об’єктів

 difference() {

об’єкт1;

об’єкт2;

}

Приклад

difference()

{

    sphere(5);

    cylinder(h=10,r=1,$fn=6);

    }





Якщо оператор difference() містить більше 2 об’єктів, то другий і всі наступні віднімаються від першого.

difference()

{

    sphere(5);

    cylinder(h=10,r=1,$fn=6);

    color([0,0,1])

      translate([-6,-6,-1])

        cube([12,12,2]);

    }





Якщо необхідно, щоб  difference() виконувалось від 2 чи більше об’єктів, застосовують  union() до цих об’єктів

difference()

{  union()

   {

       sphere(5);

       cylinder(h=10,r=1,$fn=6);

   }

    color([0,0,1])

      translate([-6,-6,-1])

        cube([12,12,2]);

    }





Переріз об’єктів

 intersection() {

об’єкт1;

об’єкт2;



Приклад

intersection()

{

    sphere(5,$fn=100);

    cylinder(h=10,r=3,$fn=100);

    }







intersection()

{

    sphere(6.5,$fn=50);

    color([0,0,1])

      translate([-6,-6,-1])

        cube([12,12,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.

$fn=50;

{ color([0,1,0])

    cube([4,4,1]);

  color([0,0,1])

    cylinder(h=1,r=1);

}




$fn=50;

minkowski()



  color([0,1,0])

    cube([4,4,1]);

  color([0,0,1])

    cylinder(h=1,r=1);

}




При виконанні суми Мінковського кольори фігур ігноруються

Приклад 2.


$fn=50;

{ color([0,1,0])

    cube([4,4,1]);

  color([0,0,1])

    sphere(1);

}




$fn=50;

minkowski()

{     cube([4,4,1]);

       sphere(1);

}





Приклад 3.


$fn=50;

minkowski()



    cube([4,4,1]);

    cylinder(h=1,r1=1,r2=0);

}




Опукла оболонка.

Опукла оболонка містить всі відрізки, які з’єднють довільну точку однієї фігури з довільною точкою іншої.



hull ()



   об’єкт;

   об’єкт;

}

Приклад 1.

$fn=50;

{ color([0,1,0])

    cylinder(h=1,r=1);

    

  translate([2,0,0])

      color([0,0,1])

        cylinder(h=1,r=1);

}




$fn=50;

hull ()

{ color([0,1,0])

    cylinder(h=1,r=1);

    

  translate([2,0,0])

      color([0,0,1])

        cylinder(h=1,r=1);

}




Приклад 2.

$fn=50;

{ color([0,1,0])

    cylinder(h=2,r=1);

    

  translate([2,0,0])

      color([0,0,1])

        cylinder(h=1,r=1);

}




$fn=50;

hull()



    cylinder(h=2,r=1); 

    translate([2,0,0])

        cylinder(h=1,r=1);

}



Робота на уроці





Пелюстка 

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

  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);

}

rotate([0,0,120])

  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);

}

rotate([0,0,-120])

  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);

}

module petal(){

    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);

}

}

petal();

rotate([0,0,120])

    petal();

rotate([0,0,-120])

    petal();


module petal(angle)

{

rotate([0,0,angle])

      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);

}

}

petal(0);

petal(120);

petal(-120);



Параметр angle визначає кут повороту фрагменту відносно осі аплікат.

Приклад 2




module petal(angle,scal)

{

rotate([0,0,angle])

   scale([scal,scal,1])

      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);

}

}
color([0,0.5,0])

{

petal(0,1);

petal(50,0.7);

petal(-50,0.7);

petal(100,0.4);

petal(-100,0.4);

}



Параметр scal визначає коефіцієнт стиснення/ростягу фрагменту відносно осі х та осі у. По осі аплікат розміри залишаються без змін.

Приклад 3.



$fn=50;

module leaf(scal,angle){

    color([0,0.5,0])

    rotate([0,0,angle])

    scale([scal,scal,0.1])  

    hull(){

       rotate([0,90,0])

          cylinder(5,0,1.5);

       translate([5,0,0])

          sphere(1.5);

      translate([6.5,0,1])

         rotate([0,90,0])

         cylinder(h=0.5,r1=0.2,r2=0,

                      center=true); 

}

}
leaf(1.2, 0);

leaf(1.1, 45);

leaf(1.1, -45);

leaf(0.8, 90);

leaf(0.8, -90);

leaf(0.4, 135);

leaf(0.4, -135);










Урок 6. 2D графічні примітиви

Хоча двомірні примітиви теоретично нескінченно тонкі, в OpenSCAD вони відображаються з товщиною 1 для зручності роботи з ними.

Квадрат

square(size = [x, y], center = true/false);

square (size = x, center = true / false);

Cтворює квадрат або прямокутник у першому квадранті. Коли значення центра дорівнює true, квадрат центрується на початку координат. Імена аргументів є необов'язковими, якщо вони задані у вказаному порядку.

square ([4,6], center = true);



square ([4,6]);




Круг

circle() створює коло на початку координат. Усі параметри, крім r, мають бути названі.

circle(r=radius | d=diameter);


circle(4);



circle(4, $fn=3);




Багатокутник

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]


polygon(points=[

[-6,6],[5,6],[-1,2],[-1,-4]]);
або
polygon(

points=[[-6,6],[5,6],[-1,2],[-1,-4]],

paths=[[0,1,2,3]]);



Координати внутрішніх точок

[-4,5],[1,5],[-2,3]

polygon(

points=[[-6,6],[5,6],[-1,2],[-1,-4],

[-4,5],[1,5],[-2,3]],

paths=[[0,1,2,3],[4,5,6]]);





Урок 7. Операція обертання

При обертанні навколо осі замкнутих кривих утворюється тіло обертання.



Обертальна екструзія rotate_extrude() обертає двовимірний контур навколо осі Z,  утворюючи тверде тіло.

Двовимірна фігура візуалізується OpenSCAD на площині XY, тому представити цю операцію можна наступним чином: відбувається обертання двовимірної фігури навколо осі Y, утворюючи тверде тіло. Отримане тверде тіло розміщуєть так, щоб його вісь обертання лежала вздовж осі Z.

rotate_extrude(angle = 360, convexity = 10)

 {...}



polygon(points=

[[0,0],[1,0],[3,3],[2,6],[3,8],[2,8],

[1,6],[2,3],[1,1],[0,1]]);




rotate_extrude(angle = 360, $fn=100)

polygon(points=[[0,0],[1,0],[3,3],[2,6],[3,8],[2,8],

[1,6],[2,3],[1,1],[0,1]]);





Вимоги:

  1. Двовимірна фігура повинна повністю перебувати або праворуч, або ліворуч від осі Y. Точніше кажучи, кожна вершина фігури повинна мати або x>=0, або x<=0. Якщо фігура перекриває вісь X, у вікні консолі з'являється попередження, а функція rotate_extrude()ігнорується.Приклад

rotate_extrude(angle = 360, $fn=100)

translate([-1,0,0])

polygon(points=[[0,0],[1,0],[3,3],[2,6],[3,8],[2,8],

[1,6],[2,3],[1,1],[0,1]]);

  1. Переміщення двовимірної фігури вздовж осі амплікат не впливає на результат екструзії

rotate_extrude(angle = 360, $fn=100)

translate([0,0,1])

polygon(points=[[0,0],[1,0],[3,3],[2,6],[3,8],[2,8],

[1,6],[2,3],[1,1],[0,1]]);

  1. Переміщення по Y призводить до зміщення кінцевого об'єкта в напрямку Z.

  1. Переміщення по X збільшує діаметр кінцевого предмета.


rotate_extrude(angle = 360, $fn=100)

translate([3,0,0])

circle(2.5);



Урок 8. Операція видавлювання.

linear_extrude(height = 5, 

center = true, 

convexity = 10, 

twist =angle, 

slices = 20, 

scale = 1.0, 

$fn = 16) {

оператори

}

color([0,0,0.7])

translate([6,0,1])

  circle(3,$fn=5);

  




color([0,0,0.7])

linear_extrude(height=6)

   translate([6,0,1])

      circle(3,$fn=5);

height=6 висота 3D фігури



color([0,0,0.7])

linear_extrude(height=6,

               center = true)

   translate([6,0,1])

      circle(3,$fn=5);




color([0,0,0.7])

linear_extrude(height=6,

               twist = 90 

)

   translate([6,0,1])

      circle(3,$fn=5);

 twist = 90  задає повороту верхньої грані відносно осі OZ



color([0,0,0.7])

linear_extrude(height=6,

               twist = 90,

               slices = 20

)

   translate([6,0,1])

      circle(3,$fn=5);

slices = 20 - кількість проміжних побудов



color([0,0,0.7])

linear_extrude(height=6,

               twist = 90,

               slices = 20,

               scale = 0.2 

)

   translate([6,0,1])

      circle(3,$fn=5);

 scale = 0.2  масштабування верхньої грані



color([0,0,0.7])

linear_extrude(height=6,

               twist = 90,

               slices = 20,

               scale = 0,

               $fn=50

)

   translate([6,0,1])

      circle(3);
  $fn=50 - гладкість тіла




Приклад

Урок 10. Оператор повторення

for (змінна=[діапазон]){

оператори;

}

Приклади

for (step=[3,6,10])

    translate([step,step,0])

        cube(3);
Якщо діапазон задано набором значень, розділених комами - змінна приймає всі значення послідовно.



for (angle=[1:6])

    rotate([0,0,angle*60])

        translate([2,0,0])   

           cube(3);

Якщо діапазон задано двома числами, розділеними двокрапкою,  вони інтерпретуються як початкове і кінцеве значення змінної, яка приймає також всі проміжні значення з кроком 1.





for (angle=[1:0.5:6])

    rotate([0,0,angle*60])

        translate([2,0,0])  

           color([angle/6,0,angle/6])

                cube(3);

Три числа, розділені двокрапкою, інтерпритуються як початкове значення:крок:кінцеве значення.





for (angle=[0:10:360])

    rotate([0,0,angle])

        translate([10,0,0])  

           color([angle/360,0,angle/360])

                sphere(1,$fn=50);




for (angle=[0:20:360])

    rotate([0,0,angle])

        color([angle/360,0,angle/360])

            linear_extrude(height=5, 

                                    slices=20, 

                                    scale=0)

                translate([10,0,0])  

                    circle(1,$fn=50);




for (angle=[1:20:360])

    rotate([0,0,angle])

        color([angle/360,0,angle/360])

            linear_extrude(height=5, slices=20, scale=0, twist=90)

                translate([5,0,0])  

                    circle(0.2,$fn=50);




for (angle=[1:20:360])

    rotate([0,0,angle])

        color([angle/360,0,angle/360])

            linear_extrude(height=5, slices=20, scale=0, twist=90)

                translate([5,0,0])  

                    circle(0.2,$fn=50);

for (angle=[1:20:360])

    rotate([0,0,angle])

        color([angle/360,0,angle/360])

            linear_extrude(height=5, slices=20, scale=0, twist= - 90)

                translate([5,0,0])  

                    circle(0.2,$fn=50);








Робота над проектами.

Завдання 1. Шахівниця



Завдання 2. Дизайн кімнати



Завдання 3. Сервірування стола.



Завдання 4. Машина


Завдання 5. Торт



Завдання 6. Робот
скачати

© Усі права захищені
написати до нас