Перейти до основного вмісту

Вирази та параметри

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

Додавання та редагування параметрів

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

Панель параметрів ескізу в редакторі ескізів

Кожен параметр — це рядок, який можна розгорнути. Клацніть на нього, щоб побачити поля визначення:

  • 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()}str8-символьний шістнадцятковий рядок (напр., 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 тощо) не можуть бути видалені. Якщо вам потрібно змінити їхню поведінку, зареєструйте функцію з іншою назвою.