Текстові шаблони
Текстові блоки підтримують шаблонні вирази, укладені у фігурні дужки. Вони вирішуються під час розв'язання з використанням поточних значень параметрів, тому текст оновлюється автоматично при зміні розміру або вхідної змінної.
Підстановка змінних
Посилайтеся на будь-який параметр ескізу або вхідну змінну за ім'ям:
{width}— поточне значення параметра "width"{name}— значення строкового вхідного параметра{count:.0f}— відформатоване зі специфікатором формату Python (без десяткових)
Математичні вирази
Ви можете використовувати математичні функції у шаблонах:
{sqrt(area):.2f}— квадратний корінь з "area", відформатований до 2 знаків{width * 2}— арифметичні вирази
Доступні стандартні математичні функції (sqrt, sin, cos, tan, pi тощо).
Вбудовані функції
| Функція | Тип повернення | Опис |
|---|---|---|
{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 символів) |
Специфікації формату
Специфікації формату Python працюють з будь-яким результатом виразу:
{width:.1f}— одна десяткова{timestamp():.0f}— без десяткових у мітці часу{today()}— стандартне рядкове представлення
Приклади використання
Деталь #{uuid4()}— унікальний серійний номер при кожному розв'язанніШ={width:.1f} В={height:.1f}— живі мітки розмірівДата: {today()}— датування кожної деталі{name} - {count:.0f}шт— комбінування строкових та числових параметрів{timestamp():.0f}— мітка часу Unix для виробничого журналу
Кастомні функції шаблонів
Ви можете зареєструвати власні функції для використання у текстових шаблонах. Це корисно для отримання серійних номерів з бази даних, читання зовнішніх даних або створення кастомних міток.
Написання скрипту реєстрації
Створіть Python файл (напр.
~/.config/rayforge/мої_функції.py):
"""Реєстрація кастомних функцій для шаблонів тексту."""
import sqlite3
from sketcher.core.template_functions import (
register_template_function,
)
ШЛЯХ_ДО_БД = "/home/ви/виробництво.db"
def наступний_серійний() -> str:
"""Отримати наступний серійний номер з бази."""
conn = sqlite3.connect(ШЛЯХ_ДО_БД)
try:
cur = conn.execute(
"UPDATE лічильники SET значення = значення + 1 "
"WHERE назва = 'serial' RETURNING значення"
)
row = cur.fetchone()
conn.commit()
return f"SN-{row[0]:06d}"
finally:
conn.close()
register_template_function(
"наступний_серійний", наступний_серійний
)
Ключові моменти:
- Викличте
register_template_function(назва, callable)для кожної функції. - Ваша функція може робити все, що може Python: відкривати файли, з'єднуватися з базами даних, викликати API тощо.
- Функція викликається при кожному рендерингу, тому має бути швидкою.
- Функції є thread-safe, якщо ваш callable є таким.
Запуск Rayforge зі скриптом
Використовуйте прапор --script для завантаження ваших
функцій перед відкриттям вікна:
rayforge --script ~/.config/rayforge/мої_функції.py \
мій_документ.ryp
Це запускає ваш скрипт на початку — до завантаження аддонів та до створення головного вікна — щоб функція була доступна, коли ескіз вирішується вперше.
Використання функції у текстовому полі
Створіть текстове поле з:
{наступний_серійний()}
Специфікації формату також працюють:
{наступний_серійний():>20}
Реєстрація функцій програмно
Якщо ви пишете аддон або бібліотеку, ви можете викликати
register_template_function з будь-якого Python коду, який
виконується перед розв'язанням ескізу:
from sketcher.core.template_functions import (
register_template_function,
)
register_template_function(
"номер_деталі",
lambda: f"P-{hash('x') % 10000:04d}"
)
Вбудовані функції не можна видалити
Вбудовані функції (today, now, uuid тощо) не можуть
бути видалені. Якщо вам потрібно змінити їхню поведінку,
зареєструйте функцію з іншою назвою.