PythonScad в задачах и примерах
PythonScad в задачах и примерах

Полная версия

PythonScad в задачах и примерах

Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
5 из 6

Задача 13:Оболочка

Какая команда позволяет создать оболочку объекта?

1) offset()

2) expand()

3) outline()

4) thicken()

5) hollow()

Задача 14:Сглаживание

Какая операция позволяет сгладить края объекта?

1) minkowski()

2) smooth()

3) round()

4) bevel()

5) soften()

Задача 15:Сглаживание

Как можно сделать скруглённые края у куба?

1) minkowski() { cube([10,10,10]) sphere(2) }

2) round_cube()

3) smooth_cube(10, 2)

4) soften_cube(10, 2)

5) bevel_cube([10,10,10], 2)

Задача 16:Многократное повторение

Какая команда выполняет многократное повторение объекта?

1) clone()

2) repeat()

3) for()

4) array()

5) loop()

Задача 1:Команды

Какая команда выполняет перемещение объекта в заданную точку?

1) rotated = .rotate()

2) c = coil

3) diff = .difference()

4) inter = .intersection()

Задача 2:Передвижение кодом

Какой код сдвинет объект на 15 по X, -10 по Y и 5 по Z?

1) tr = .translate([15, -10, 5])

2) translate([15, -10, 5])

3) c = coil([15, -10, 5])

4) rotated = .rotate([15, -10, 5])

Задача 3:Масштабирование

Какая команда выполняет масштабирование объекта?

1) Scale = * ()

2) tr = .translate()

3) c = coil()

4) translate([15, -10, 5])

Задача 4:Масштабирование

Как уменьшить объект в 2 раза по всем осям?

1) scale = * -2

2) Sc = scale * -2

3) scale = * 2

4) Sc = scale * 2

Задача 5:Смещение

Как задать поворот объекта на 90 градусов вокруг оси Y?

1) rotated = .rotate([0,90,0])

2) rotated =([0,90,0])

3) x = ([0,90,0])

4) ([0,90,0]) = x

Задача 6:Отзеркаливание

Как выполнить зеркальное отражение объекта относительно плоскости XY?

1) mr = .mirror([0,0,1])

2) mirror([0,0,1])

3) mr = ([0,0,1])

4) mr = mirror

Задача 7:Задать размер объекта

Какая команда позволяет задать конкретные размеры объекта, а не масштабировать его?

1) re = .resize([])

2) c = coil([])

3) re = ([])

4) resize([])

Задача 8:Смешенный код

Какой код смешивает вычитание и задание размеров объектов?

1) diff = re.difference(cy)

2) c = re.coil(cy)

3) fusion = union([re, cu])

4) inter = re.intercection(cu)

Задача 9:Смешенный код

Какой код смешивает пересечение и задание размеров объектов?

1) inter = re.intersection(cy)

2) c = cu.coil(re)

3) diff = re.difference(cy)

4) fusion = union([re, cu])

Задача 10:Линейное Выдавливание

Какая команда создаёт линейное выдавливание 2D-фигуры?

1) l=linear_extrude(square(),[[],[], [],[]]);

2) path_extrude()

3) linear_extrude

4) l = linear_extrude()

Задача 11:Линейное Выдавливание

Как выдавить 2D-объект на 20 единиц вверх?

1) p=path_extrude(square(1),[[0,0,0],[0,0,20]]);

2) rotate_ extrude(square(1),[[0,0,0],[0,0,20]]);

3) l=linear_extrude(square(1),[[0,0,0],[0,0,20]]);

4) e=extrude(square(1),[[0,0,0],[0,0,20]]);

Задача 12:Вращательное Выдавливание

Как сделать вращательное выдавливание 2D-объекта?

1) circle(3).right(10).rotate_extrude(v=[0,0,20],angle=600).show()

2) linear_extrude()

3) path_extrude()

4) extrude()

Задача 13:Оболочка

Какая команда позволяет создать оболочку объекта?

1) .offset()

2) .clone()

3) .array()

4) .loop()

Задача 14:Сглаживание

Какая операция позволяет сгладить края объекта?

1) .fillet

2) .edge

3) .core

4) .ore

Задача 15:Сглаживание

Как можно сделать скруглённые края у куба?

1) .fillet

2) .edge

3) .core

4) .ore

Задача 16:Многократное повторение

Какая команда выполняет многократное повторение объекта?

1) con = .clone()

2) f = for()

3) loo = loop()

4) ar = array()

Модуль 5: Основы параметризации

Переменные

Переменные в PythonSCAD(OpenSCAD) задаются с помощью оператора = и хранят значения различных типов: числа, строки, списки и другие. Важно помнить, что PythonSCAD(OpenSCAD) является декларативным языком, поэтому переменные неизменяемы после первого присваивания.

Пример объявления переменных:

width = 10;

height = 20;

depth = 30;

cube([width, height, depth]);

Здесь переменные используются для задания размеров куба.

Особенности переменных

Листинг 1:Одноразовое присвоение

x = 5;

x = 10; // Это не изменяет x, значение остается 5

echo(x); // Выведет 5

Рис. 1. Одноразовое присвоение

Листинг 2:Порядок выполнения

y = x + 5; // Используется текущее значение x (например, 5)

echo(y); // Выведет 10

Рис. 2. Порядок выполнения

Константы

Хотя в PythonSCAD(OpenSCAD) отсутствует специальный механизм для объявления констант, часто используют соглашение: писать имена констант заглавными буквами (PI, GOLDEN_RATIO), чтобы отличать их от обычных переменных.

Пример констант:

PI = 3.141592;

GOLDEN_RATIO = 1.618;

RADIUS = 50;

circle(RADIUS);


Вычисляемые переменные

Переменные могут зависеть от других переменных, что делает возможным создание сложных моделей.

Листинг 1:Вычисляемые переменные

base_diameter = 40;

height = base_diameter / 2; // Высота зависит от диаметра

cylinder(d=base_diameter, h=height);

Рис. 3. Вычисляемые переменные

Локальные переменные (let)

Для ограничения области видимости переменной используется конструкция let().

openscad

let(r = 10) {

circle(r);

}

Здесь переменная r доступна только внутри блока let().

Отладка с помощью echo

Функция echo() полезна для вывода значений переменных в процессе отладки.

a = 5;

b = a * 2;

echo("Значение b:", b); // Выведет: ECHO: "Значение b:", 10


Выводы:

1) Переменные в PythonSCAD(OpenSCAD)неизменяемы после присвоения.

2) Константы обозначаются прописными буквами.

3) Локальные переменные создаются с помощью let().

4) Функция echo() удобна для отладки.


Переменные в PythonSCAD(Python) задаются с помощью оператора и хранят значения различных типов: числа, строки, списки и другие. Важно помнить, что PythonSCAD(Python) является декларативным языком, поэтому переменные неизменяемы после первого присваивания.

Пример объявления переменных:

width = 10;

height = 20;

depth = 30;

c = cube([width, height, depth]);

show(c)

Здесь переменные используются для задания размеров куба.

Особенности переменных

Листинг 1:Одноразовое присвоение

x = 5

x = 10 // Это не изменяет x, значение остается 5

cu = cube(x)

show(cu) // Выведет куб размером 5

Рис. 4. Одноразовое присвоение

Листинг 2:Порядок выполнения

x = 5

x = 10

y = x + 5 // Используется текущее значение x (например, 5)

cu = cube(y)

show(cu) // Выведет куб рамзером 10

Рис. 5. Порядок выполнения


Константы

Хотя в PythonSCAD(Python) отсутствует специальный механизм для объявления констант, часто используют соглашение: писать имена констант заглавными буквами (PI, GOLDEN_RATIO), чтобы отличать их от обычных переменных.

PI = 3.141592;

GOLDEN_RATIO = 1.618;

RADIUS = 50;

circle(RADIUS);


Вычисляемые переменные

Переменные могут зависеть от других переменных, что делает возможным создание сложных моделей.

Листинг 3: Вычисляемые переменные

base_diameter = 40;

height = base_diameter / 2; // Высота зависит от диаметра

cy = cylinder(d=base_diameter, h=height);

show(cy)

Рис. 6. Вычисляемые переменные

Локальные переменные (let)

Для ограничения области видимости переменной используется конструкция example().

Листинг 4: Локальные переменные (let)

def example():

x = 10

y = 20

return x + y

result = cube(example())

show(result)

Рис. 7. Локальные переменные (let)

Здесь переменная r доступна только внутри блока example().


Функция show() обязательна для вывода значений переменных в процессе отладки.

from openscad import *

a = 5

b = a * 2

cu = cube(b)

show(cu) // Выведет куб который имеет параметры b

Выводы:

Переменные в PythonSCAD(Python)неизменяемы после присвоения. Константы обозначаются прописными буквами. Локальные переменные создаются с помощью let().


Функции и аргументы в PythonSCAD(OpenSCAD)

PythonSCAD(OpenSCAD) позволяет использовать функции для вычисления значений и работы с геометрией. Эти функции действуют подобно математическим функциям и не способны изменять сцену напрямую, поскольку OpenSCAD является декларативным языком.

Листинг 1:Определение функций

Функции определяются с использованием ключевого слова function, принимают аргументы и возвращают результат. Они полезны для упрощения и повторной реализации вычислений.

function square(x) = x * x;

echo(square(5)); // ECHO: 25

Рис. 8. Определение функций

Эта функция square(x) возводит переданное ей число в квадрат.

Листинг 2:Функции с несколькими аргументами

function sum(a, b) = a + b;

echo(sum(10, 20)); // ECHO: 30

Рис. 9. Функции с несколькими аргументами

Листинг 3:Условные функции (тернарный оператор)

function abs_value(x) = x >= 0 ? x : -x;

echo(abs_value(-7)); // ECHO: 7

Рис. 10. Условные функции (тернарный оператор)

Функция abs_value(x) возвращает абсолютное значение переданного числа.

Листинг 4:Рекурсивные функции

OpenSCAD поддерживает рекурсию, хотя циклы отсутствуют.

Факториал

function factorial(n) = (n <= 1) ? 1 : n * factorial(n – 1);

echo(factorial(5)); // ECHO: 120

Рис. 11. Рекурсивные функции

Листинг 5: Работа с массивами

function sum_list(lst) = (len(lst) == 0) ? 0 : lst[0] + sum_list([for (i = 1; i < len(lst); i = i + 1) lst[i]]);

echo(sum_list([1, 2, 3, 4, 5])); // ECHO: 15

Рис. 12. Работа с массивами

Листинг 6:Передача функций как аргумента

function operation(type, x) = (type == "square") ? x * x : (type == "double") ? x * 2 : x;

echo(operation("square", 4)); // ECHO: 16

echo(operation("double", 4)); // ECHO: 8

Рис. 13. Передача функций как аргумента

Листинг 7:Использование функций в модулях

function diameter(radius) = radius * 2;

module custom_cylinder(r) {

cylinder(d = diameter(r), h = 10);


}

custom_cylinder(15);

Рис. 14. Использование функций в модулях

Функция diameter(r) вычисляет диаметр цилиндра, который затем передается в модуль custom_cylinder.

Заключение

Функции возвращают значения, но не влияют непосредственно на геометрию. Поддерживаются множественные аргументы, условные выражения, работа с массивами и рекурсия. Функции идеально подходят для параметрической настройки моделей.

Теперь давайте рассмотрим практический пример создания шестеренки с использованием функций.


Параметрическая шестеренка

Функция рассчитывает радиус зубца, а модуль создает трехмерную модель шестеренки.

Листинг 1:Рассчёт функции шестерни

// Функция для расчета радиуса зубцов шестеренки

function gear_radius(base_r, teeth, tooth_height) =

base_r + tooth_height * (teeth > 0 ? 1 : 0);

// Модуль для создания шестеренки

module gear(base_r, teeth, tooth_height) {


difference() {

// Основной диск шестеренки

circle(r = gear_radius(base_r, teeth, tooth_height), $fn = 100);

// Создание выемок для зубцов

for(i = [0:teeth-1]) {

angle = i * (360 / teeth);

translate([base_r * cos(angle), base_r * sin(angle)])

rotate(angle)

square([tooth_height * 2, base_r * 0.2], center = true);

}

}

}

// Вызов модуля шестеренки с заданными параметрами

gear(base_r = 20, teeth = 12, tooth_height = 3);

Рис. 15. Рассчёт функции шестерни

Описание работы шестеренки

Функция gear_radius вычисляет максимальный радиус шестеренки, включая выступающие зубья.

Модуль gear:

– Создается основной диск шестеренки.

– С помощью цикла for создаются выемки для зубцов.

Шестеренку можно вызвать с параметрами: gear(20, 12, 3), где задаются радиус основания, количество зубцов и высота зуба.

Улучшение шестеренки

Добавим возможность задавать диаметр центрального отверстия.

Листинг 2:Возможность задавать диаметр центрального отверстия

module gear(base_r, teeth, tooth_height, hole_r = 5) {

difference() {

// Основной диск шестеренки

circle(r = gear_radius(base_r, teeth, tooth_height), $fn = 100);

// Вырезание зубцов


for(i = [0:teeth-1]) {

angle = i * (360 / teeth);

translate([base_r * cos(angle), base_r * sin(angle)])

rotate(angle)

square([tooth_height * 2, base_r * 0.2], center = true);

}

// Центральное отверстие

circle(r = hole_r, $fn = 50);

}

}

// Пример вызова шестеренки с отверстием

gear(base_r = 20, teeth = 16, tooth_height = 3, hole_r = 6);

Рис. 16. Возможность задавать диаметр центрального отверстия

Теперь можно регулировать такие параметры, как количество зубцов, высоту зубьев и размер центрального отверстия.

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


Функции и аргументы в PythonSCAD(Python)

PythonSCAD(Python) позволяет использовать функции для вычисления значений и работы с геометрией. Эти функции действуют подобно математическим функциям и не способны изменять сцену напрямую, поскольку OpenSCAD является декларативным языком.

Листинг 1:Простая функция

Простая функция

def square(x):

return x * x

result = square(5)

print(result)

Рис. 17. Простая функция

Эта функция square(x) возводит переданное ей число в квадрат.

Листинг 2:Функции с несколькими аргументами

def sum(a, b):

return a + b

result = sum(10, 20)

print(result)

Рис. 18. Функции с несколькими аргументами

Листинг 3:Условные функции (тернарный оператор)

def absolute_value(x):

if x < 0:

return -x

return x

result = absolute_value(-7)

print(result)

Рис. 19. Условные функции (тернарный оператор)

Функция abs_value(x) возвращает абсолютное значение переданного числа.

Листинг 4:Рекурсивные функции

Факториал

def factorial(n):

if n < 0:

return "Факториал не определён для отрицательных чисел"

elif n == 0 or n == 1:

return 1

else:

result = 1

for i in range(2, n + 1):

result *= i

return result

result = factorial(5)

print(result)

Рис. 20. Рекурсивные функции

Листинг 5:Работа с массивами

def sum_list(lst):

total = 0

for element in lst:

total += element

return total

result = sum_list([1, 2, 3, 4, 5])

print(result)

Рис. 21. Работа с массивами

Эта функция суммирует элементы массива.

Листинг 6:Передача функций как аргумента

def operation(type, lst):

return [type(x) for x in lst]

def square(x):

return x * x

def double(x):

return x * 2

number = [4]

squared = operation(square, number)

doubled = operation(double, number)

print(squared)

print(doubled)

Рис. 22. Передача функций как аргумента

Листинг 7:Использование функций в модулях

def cylinder_module(radius, height):

output = f"""

module cylinder_module(r, h) {{

// Создаем цилиндр

translate([0, 0, 0])

cylinder(r = r, h = h, center = true);

}}

cylinder_module({radius}, {height});

"""

return output

radius = 5

height = 10

cylinder_code = cylinder_module(radius, height)

print(cylinder_code)

Рис. 23. Использование функций в модулях

Заключение

Функции возвращают значения, но не влияют непосредственно на геометрию. Поддерживаются множественные аргументы, условные выражения, работа с массивами и рекурсия. Функции идеально подходят для параметрической настройки моделей.

Теперь давайте рассмотрим практический пример создания шестеренки с использованием функций.


Параметрическая шестеренка

Функция рассчитывает радиус зубца, а модуль создает трехмерную модель шестеренки.

Листинг 1:Функция рассчитывает радиус зубца

import math


def gear_radius(base_r, teeth, tooth_height):

"""Функция для расчета радиуса зубцов шестеренки."""

return base_r + tooth_height * (1 if teeth > 0 else 0)


def gear(base_r, teeth, tooth_height):

"""Создает шестеренку с заданными параметрами."""

output = "difference() {\n"

# Основной диск шестеренки

output += f" circle(r = {gear_radius(base_r, teeth, tooth_height)}, $fn = 100);\n"

# Создание выемок для зубцов

for i in range(teeth):

angle = i * (360 / teeth)

x = base_r * math.cos(math.radians(angle))

y = base_r * math.sin(math.radians(angle))

output += f" translate([{x}, {y}])\n"

output += f" rotate({angle})\n"

output += f" square([{tooth_height * 2}, {base_r * 0.2}], center = true);\n"

output += "}\n"

return output


# Вызов функции с заданными параметрами

gear_code = gear(base_r=20, teeth=12, tooth_height=3)

print(gear_code)

Рис. 24. Функция рассчитывает радиус зубца

Объяснение кода

1. gear_radius


– Эта функция считает радиус зубцов шестеренки.

2. gear


– Главный модуль, который создает шестеренку.


– Использует `difference()` для вычитания зубцов из основного круга.

3. Цикл for


– Генерирует зубцы шестеренки, вычисляя их расположение на основе угла.

4. translate и rotate


– Перемещают и поворачивают зубцы в нужные позиции.

5. Вывод


– Функция возвращает сгенерированный код, который можно использовать в PythonSCAD.

Улучшение шестеренки

Добавим возможность задавать диаметр центрального отверстия.

Листинг 1:Возможность задавать диаметр центрального отверстия

def cos(angle):

import math

return math.cos(math.radians(angle))

def sin(angle):

import math

return math.sin(math.radians(angle))

def radians(degrees):

import math

return degrees * (math.pi / 180)

def circle(r, fn=100):

return f'circle(r={r}, $fn={fn})'

def square(size, center=False):

return f'square(size={size}, center={center})'

def translate(vector):

return f'translate({vector})'

def rotate(angle):

return f'rotate(angle={angle})'

def difference(*shapes):

return 'difference() {' + ''.join(shapes) + '}'

def gear_radius(base_r, teeth, tooth_height):

return base_r + tooth_height

def create_gear(base_r, teeth, tooth_height, hole_r=5):

gear_shape = difference(

circle(gear_radius(base_r, teeth, tooth_height), fn=100)

)

for i in range(teeth):

angle = i * (360 / teeth)

x = base_r * cos(angle)

y = base_r * sin(angle)

tooth = translate([x, y, 0])(

rotate(angle)(

square([tooth_height * 2, base_r * 0.2], center=True)

)

)

gear_shape += tooth

# Центральное отверстие

central_hole = circle(hole_r, fn=50)

gear_shape += central_hole

return gear_shape

# Пример вызова шестеренки с отверстием

gear_model = create_gear(base_r=20, teeth=16, tooth_height=3, hole_r=6)

Конец ознакомительного фрагмента.

На страницу:
5 из 6