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

Текстові шаблони

Текстові блоки підтримують шаблонні вирази, укладені у фігурні дужки. Вони вирішуються під час розв'язання з використанням поточних значень параметрів, тому текст оновлюється автоматично при зміні розміру або вхідної змінної.

Підстановка змінних

Посилайтеся на будь-який параметр ескізу або вхідну змінну за ім'ям:

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