Вирази та параметри
Ескіз стає справді параметричним, коли його розміри керуються іменованими значеннями замість жорстко заданих чисел. Ця сторінка описує повний робочий процес: створення параметрів, керування геометрією за допомогою виразів та призначення значень для кожного екземпляра з головного вікна. Також тут розглядаються шаблонні вирази в текстових блоках.
Додавання та редагування параметрів
Кожен ескіз має власний список параметрів, показаний у панелі Параметри ескізу ліворуч в редакторі ескізів. Натисніть Додати параметр, щоб створити новий, обравши ціле число, число з плаваючою комою, повзунок або один рядок тексту.

Кожен параметр — це рядок, який можна розгорнути. Клацніть на нього, щоб побачити поля визначення:
- Label (Мітка) — назва, зрозуміла людині, що показується у списках.
- Key (Ключ) — ідентифікатор, на який посилаються вирази (автоматично похідний від мітки, якщо
ви не введете його самостійно). Залиште його дійсним іменем Python, напр.
widthабоwall_thickness. - Description (Опис) — необов'язкове пояснення, що показується під рядком.
- Default Value (Значення за замовчуванням) — значення, з якого починається параметр.
- Minimum / Maximum Value (Мінімальне / Максимальне значення) — необов'язкові межі (увімкніть перемикач для кожної). Параметр-повзунок завжди має скінченний діапазон.
Типове налаштування для коробки зі змінною товщиною стінки — два параметри: width та thickness.
Нічого ще не обмежує геометрію; параметри — це лише імена для чисел, поки їх не використає вираз.
Використання параметрів у виразах
Двічі клацніть розмірне обмеження (див. Обмеження) та введіть вираз замість простого числа:
width / 2
Значення обмеження стає результатом цього виразу, який переобчислюється щоразу під час розв'язання
ескізу. У прикладі нижче лівий край обмежений до width / 2 — його маркер та підпис малюються
оранжевим, що позначає керування виразом — тоді як верхній край зберігає просте числове
обмеження:
Змініть параметр width — і обмежена геометрія підлаштується: одне редагування тепер оновлює кожен
розмір, що посилається на нього.
Вирази можуть поєднувати параметри з арифметикою та стандартними математичними функціями Python:
width - 2 * thickness
sqrt(area) / 2
2 * pi * radius
Функції на кшталт sqrt, sin, cos і tan, а також константи на кшталт pi, походять з модуля
math Python — саме цей модуль разом з параметрами є тим, на що може посилатися вираз обмеження.
Можна посилатися і на строкові параметри, що найкорисніше в текстових блоках.
Призначення значень у головному вікні
Параметри, визначені в ескізі, слугують значеннями за замовчуванням для його меж. Коли ескіз
розміщується в документі, кожна деталь зберігає власну копію кожного значення параметра, а група
Параметри ескізу в правій панелі властивостей дозволяє перевизначити їх для кожного екземпляра —
той самий ескіз можна використовувати в різних розмірах на аркуші, кожен зі своїми width та
thickness.
Виберіть ескіз у головному вікні — і група з'явиться у панелі властивостей, один рядок на параметр, кожен зі значенням, яке використовує цей екземпляр. Введьте або змініть значення; деталь перегенерується негайно.
Редагування визначень параметрів (додавання параметра, зміна значення за замовчуванням або перейменування ключа) відбувається всередині редактора ескізів, як описано вище. Панель головного вікна лише змінює значення для вибраного екземпляра — вона завжди віддзеркалює набір параметрів ескізу, а новий екземпляр використовує значення за замовчуванням, поки ви їх не перевизначите.
Шаблонні вирази в текстових блоках
Текстові блоки вирішують вирази, укладені у фігурні дужки, під час розв'язання, тому підписи та гравійований текст показують живі значення:
W = {width}, H = {height}
Будь-який параметр можна підставити за іменем, а результат можна відформатувати специфікатором формату Python після двокрапки:
{width}— поточне значення параметраwidth{name}— значення строкового параметра{width:.1f}— одна десяткова{timestamp():.0f}— без десяткових у результаті функції
Математика працює і тут: як вираз на кшталт {width * 2}, так і через функцію на кшталт
{sqrt(area):.2f}. Порівняно з виразами обмежень, текстові шаблони мають багатший набір
інструментів: разом з математичним модулем вони надають вбудовані функції нижче, а для них можна
реєструвати кастомні функції (див. нижче).
Вбудовані шаблонні функції
| Функція | Тип повернення | Опис |
|---|---|---|
{today()} | date | Поточна дата UTC (напр., 2026-08-26) |
{date()} | date | Псевдонім для today() |
{now()} | datetime | Поточна дата та час UTC |
{time()} | time | Поточний час UTC (напр., 15:30:00.123456+00:00) |
{timestamp()} | float | Мітка часу Unix (секунди з епохи) |
{uuid4()} | str | 8-символьний шістнадцятковий рядок (напр., a1b2c3d4) |
{uuid8()} | str | Псевдонім для uuid4() |
{uuid()} | str | Повний рядок UUID v4 (36 символів) |
Типові застосування включають унікальні серійні номери при кожному розв'язанні
(Деталь #{uuid4()}), живі мітки розмірів (Ш={width:.1f} В={height:.1f}), датування кожної деталі
(Дата: {today()}), лічильники виробництва ({name} - {count:.0f}шт) або мітки часу Unix для
виробничого журналу ({timestamp():.0f}).
Кастомні функції шаблонів
Ви можете зареєструвати власні функції для використання у шаблонах текстових блоків. Це корисно для отримання серійних номерів з бази даних, читання зовнішніх даних або створення кастомних міток.
Написання скрипту реєстрації
Створіть Python файл (напр. ~/.config/rayforge/my_functions.py):
"""Register custom template functions for text box expressions."""
import sqlite3
from sketcher.core.template_functions import register_template_function
DB_PATH = "/home/you/production.db"
def next_serial() -> str:
"""Fetch and reserve the next serial number from the database."""
conn = sqlite3.connect(DB_PATH)
try:
cur = conn.execute(
"UPDATE counters SET value = value + 1 "
"WHERE name = 'serial' RETURNING value"
)
row = cur.fetchone()
conn.commit()
return f"SN-{row[0]:06d}"
finally:
conn.close()
register_template_function("next_serial", next_serial)
Викличте register_template_function(name, callable) для кожної функції. Функція може робити все,
що може Python: відкривати файли, з'єднуватися з базами даних, викликати API — і вона викликається
при кожному рендерингу, тому має бути швидкою (використовуйте кешування, якщо вихідні дані не
змінюються між рендерингами). Функції є thread-safe, якщо ваш callable є таким.
Запуск Rayforge зі скриптом
Використовуйте прапор --script, щоб завантажити ваші функції перед відкриттям вікна:
rayforge --script ~/.config/rayforge/my_functions.py mydoc.ryp
Це запускає ваш скрипт на початку запуску — до завантаження аддонів та до створення головного вікна — щоб функція була доступна, коли ескіз розв'язується вперше.
Використання функції у текстовому блоці
В ескізері створіть текстовий блок з:
{next_serial()}
Специфікації формату також працюють:
{next_serial():>20}
Реєстрація функцій програмно
Якщо ви пишете аддон або бібліотеку для повторного використання, ви можете викликати
register_template_function з будь-якого Python коду, який виконується перед розв'язанням ескізу:
from sketcher.core.template_functions import register_template_function
register_template_function("part_number", lambda: f"P-{hash('x') % 10000:04d}")
Вбудовані функції не можна видалити
Вбудовані функції (today, now, uuid тощо) не можуть бути видалені. Якщо вам потрібно змінити
їхню поведінку, зареєструйте функцію з іншою назвою.