Gava DSL — Документація

Gava DSL (Domain Specific Language) — це формат конфігурації фурнітури на основі YAML. Він дозволяє описувати схеми свердління, операції обробки та правила автоматичного розміщення для єврогвинтів (конфірматів), ексцентрикових стяжок, завісів та іншої фурнітури.

Вступ

Для чого використовується

  • Опис геометрії свердлінь для кожного типу фурнітури
  • Налаштування автоматичного розміщення вздовж ребер панелей
  • Задання обмежень (constraints) для валідації
  • Використання формул замість фіксованих значень

Одиниці виміру

Всі розміри в Gava DSL вказуються в міліметрах (мм).

Системи прив'язки

Gava використовує різні системи прив'язки (Reference Systems) залежно від типу з'єднання:

Тип з'єднанняСистема прив'язкиОпис
Торцеве (єврогвинти, стяжки)Edge ContactТорець Panel A торкається пласті Panel B
Завісове (завіси)HingeПанелі паралельні/перпендикулярні з offset та gap
Кожна система має свої особливості іменування граней та розрахунку позицій. Детальний опис — у відповідних розділах.

Типи фурнітури

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

Торець до пласті (Edge Contact)

Фурнітура для з'єднань, де торець Panel A торкається пласті Panel B.

ТипНазваОпис
confirmatЄврогвинтиКонфірмати різних розмірів (5×40, 7×50, 7×70)
dowelШкантиДерев'яні або пластикові шканти для з'єднань
tieСтяжкиЕксцентрикові стяжки (мініфікс)
double_tieПодвійні стяжкиСпарені ексцентрикові стяжки
corner_bracketУголкиМеталеві куточки для кутових з'єднань

Завісове з'єднання (Hinge)

Фурнітура для завісових з'єднань, де панелі паралельні або перпендикулярні.

ТипНазваОпис
hingeЗавісиМеблеві петлі (накладні, вкладні, напівнакладні)
hinge_180Завіси 180°Петлі з кутом відкривання 180 градусів

Фурнітура однієї панелі

Фурнітура, що кріпиться на одну панель без з'єднання з іншою.

ТипНазваОпис
shelf_supportПолицетримачіШтифти або кліпси для полиць (без кріплення до полиці)
knobРучки-кнопкиКруглі меблеві ручки
handleРучки-скобиДовгі меблеві ручки

Базові концепції

Panel A та Panel B

Кожна конфігурація фурнітури описує з'єднання двох панелей:

ПанельРольОпис
Panel AВедучаВизначає базову систему прив'язки. Від неї відраховуються всі позиції.
Panel BВеденаВ Edge Contact — використовує ту саму систему прив'язки (проекція з Panel A). В Hinge — має власну незалежну систему.

Грані панелі

ГраньАнглійська назваОпис
Торецьedge_faceВузька грань (товщина панелі)
Пластьbase_face / surfaceШирока плоска грань панелі (лицьова або тильна сторона)
РеброedgeЛінія на перетині двох граней. Використовується як базова лінія для відліку.

Base Edge (Базове ребро)

Лінія, від якої відраховуються всі позиції свердлінь. Знаходиться на перетині торця (edge_face) та пласті (base_face).

Positions (Позиції)

Розраховані позиції для розміщення фурнітури вздовж base_edge. Кількість та розташування визначаються параметрами auto_placement.

Типи позицій:

  • Base positions — стандартні позиції з auto_placement (edge_offset, spacing)
  • Grid positions — позиції для вільного розміщення (при Alt, кожні N мм)
Стандартна позиція

Стандартна позиція (auto_placement)

Grid позиція

Grid позиція (при натисканні Alt)

Формули та змінні

Замість фіксованих значень можна використовувати формули:

ЗміннаОпис
$thickness_aТовщина Panel A (мм)
$thickness_bТовщина Panel B (мм)
$panel_a.<hole>.<prop>Властивість отвору Panel A
$panel_b.<hole>.<prop>Властивість отвору Panel B
# Базові приклади
inset: "$thickness_a / 2"  # Z: центр товщини
offset: "$panel_a.main_hole.offset"  # Y: посилання на позицію іншого отвору

Торець до пласті (Edge Contact)

Використовується для: confirmat, dowel, tie, double_tie, corner_bracket

Принцип роботи

Edge Contact System призначена для з'єднань, де торець Panel A торкається пласті Panel B. Контакт може бути частковим — панелі можуть мати свіси одна над одною.

Система автоматично:

  1. Знаходить пятна контакту (contact patches) між панелями
  2. Будує систему прив'язки на основі base_edge
  3. Проектує base_edge Panel A на поверхню Panel B
  4. Розраховує позиції (positions) вздовж лінії контакту
Кожне пятно контакту обробляється окремо. Відступи від країв (edge_offset), інтервали (spacing) та інші параметри розраховуються для кожного пятна незалежно.

Panel A (Ведуча панель)

Панель, торець якої з'єднується з іншою панеллю.

ГраньОпис
edge_faceТорець панелі
base_faceБазова пласть
opposite_faceПротилежна пласть
Визначення базової пласті: При першому виборі панелі базова пласть визначається за положенням камери — та, що ближче до камери. Це запам'ятовується, і при повторному виборі база залишається. Перемкнути можна кнопкою «змінити базу».

Panel B (Ведена панель)

Панель, до пласті якої приєднується торець Panel A.

ГраньОпис
contact_faceПласть, що торкається торця Panel A
opposite_faceПротилежна пласть

Параметри позиціонування

ПараметрОпис
shiftЗміщення вліво/вправо вздовж базового ребра
offsetВідступ вглиб панелі від торця
insetПозиція по товщині панелі (від базового ребра)

Завісове з'єднання (Hinge)

Використовується для: hinge, hinge_180

Принцип роботи

Hinge System призначена для з'єднань, де панелі паралельні або перпендикулярні одна одній. Кожна панель має власну незалежну систему прив'язки.

Ключові відмінності від Edge Contact:

  1. Кожна панель має свій base_edge (не проекція)
  2. Додаткові параметри: gap, door_offset (для компенсації позицій свердлінь)
  3. Panel A = Дверка, Panel B = Боковина

Параметри компенсації: gap та door_offset

ПараметрОпис
gapВідстань від торця фасаду до лицевої пласті боковини (мм)
door_offsetВідстань від тильної пласті фасаду (hinge_base_a) до торця боковини (мм)
Ці параметри можуть бути нульовими. Навіть якщо панелі торкаються (gap=0), система працює однаково — просто з нульовим значенням.

Типи завісів

Gava автоматично визначає тип завісу за геометрією з'єднання:

ТипОписГеометрія
overlayНакладна — дверка накриває торець боковиниТорець боковини проектується на тил дверки
insetВкладна — дверка всередині каркасуТорець дверки проектується на пласть боковини
half_overlayНапівнакладнаЯк overlay, але з меншим значенням overlay
parallelРівнолежача — тильні грані співпадаютьТильні пласті копланарні

Panel A (Дверка)

Панель дверцят, що відкривається на завісах.

ГраньПризначення
back_faceВнутрішня пласть (тильна сторона дверки)
front_faceЗовнішня пласть (видима при закритих дверцятах)
edge_faceТорець з боку завісу

Panel B (Боковина)

Бічна панель корпусу, на яку кріпиться монтажна планка завісу.

Чому НЕ front_face/back_face? Боковина стоїть перпендикулярно до користувача — немає "переду" і "заду". Тому використовуємо base_face (де кріпиться фурнітура) та opposing_face (протилежна).
ГраньПризначення
base_faceПласть боковини, де кріпиться монтажна планка (контактує з дверкою)
opposing_faceПротилежна пласть боковини
edge_faceТорець боковини

Параметри свердлінь (Довідник)

Загальні параметри

ПараметрТипОбов'язковийОпис
namestringТакУнікальний ідентифікатор. Тільки a-z, A-Z, 0-9, _
diameternumberТакДіаметр отвору (мм)
depthnumber/stringТакГлибина свердління (мм) або through

Параметри позиціонування

ПараметрОпис
shiftЗміщення вліво/вправо вздовж базового ребра
offsetВідступ вглиб панелі від торця
insetПозиція по товщині панелі (від базового ребра)

Параметр countersink

Зенківка (конус 45°) на вході отвору. Використовується для потайних головок гвинтів.

# Простий варіант
- name: through_hole
  diameter: 7
  depth: "$thickness_b"
  inset: 9  # Z: центр товщини 18мм
  countersink: true

# З вказанням глибини
- name: through_hole
  diameter: 7
  depth: "$thickness_b"
  inset: 9
  countersink:
    depth: 3

Auto Placement

Визначає, як фурнітура автоматично розподіляється вздовж ребер панелі.

auto_placement:
  mode: edge_spacing
  edge_offset: 50
  spacing: 300
ПараметрТипОпис
modestringАлгоритм розміщення
edge_offsetnumberВідступ від кутів панелі до першої фурнітури (мм)
spacingnumberМінімальна відстань між одиницями фурнітури (мм)

Режими (mode)

РежимОпис
edge_spacingРівномірний розподіл з мінімальним spacing та відступом від країв
system_32Вирівнювання по сітці 32мм (меблевий стандарт)
center_symmetricСиметричне розміщення від центру

Constraints

Обмеження, які можуть бути задані у форматі. Як саме плагін їх обробляє — визначається валідатором.

constraints:
  panel_a_thickness:
    min: 16
    max: 25
  panel_b_thickness:
    min: 16
    max: 25
  min_material_wall: 3
ПараметрОпис
panel_a_thickness.minМінімальна товщина Panel A (мм)
panel_a_thickness.maxМаксимальна товщина Panel A (мм)
panel_b_thickness.minМінімальна товщина Panel B (мм)
panel_b_thickness.maxМаксимальна товщина Panel B (мм)
min_material_wallМінімальна товщина стінки навколо отвору (мм)

Структура файлу

gava_dsl: "1.0"

# Ідентифікація
id: confirmat_7x50
name: "Конфірмат 7x50"
type: screw

# Опціонально
article: "CF-7x50"
manufacturer: "Hettich"

# Автоматичне розміщення
auto_placement:
  mode: edge_spacing
  edge_offset: 50
  spacing: 300

# Обмеження
constraints:
  panel_a_thickness:
    min: 16
    max: 25
  panel_b_thickness:
    min: 16
    max: 25

# Свердління Panel A
panel_a_drillings:
  edge_face:
    - name: main_hole
      diameter: 5
      depth: 50
      inset: "$thickness_a / 2"

# Свердління Panel B
panel_b_drillings:
  opposite_face:
    - name: through_hole
      diameter: 8
      depth: through
      inset: "$thickness_a / 2"

Обов'язкові поля

ПолеОпис
gava_dslВерсія формату (завжди "1.0")
idУнікальний ідентифікатор (lowercase, без пробілів)
nameНазва для відображення
typeТип фурнітури: screw, connector, hinge

Глосарій

base_edge

Базове ребро, від якого відраховуються позиції свердлінь.

contact_face

(Edge Contact) Пласть Panel B, що торкається Panel A.

opposite_face

(Edge Contact) Пласть Panel B, протилежна до contact_face.

edge_face

Торець панелі (вузька грань).

back_face

Тильна пласть панелі. В Hinge: тильна сторона дверки (Panel A).

front_face

Лицьова пласть панелі. В Hinge: видима сторона дверки (Panel A).

base_face

(Hinge Panel B) Пласть боковини, де кріпиться монтажна планка.

opposing_face

(Hinge Panel B) Протилежна пласть боковини.

gap

(Hinge) Відстань від торця фасаду до пласті боковини.

door_offset

(Hinge) Відстань від тильної пласті фасаду до торця боковини.

shift

Зміщення вздовж base_edge (вісь X).

offset

Відступ від торця вглиб пласті (вісь Y).

inset

Зміщення поперек товщини панелі (вісь Z).

through

Спеціальне значення depth для наскрізного отвору.

Приклади (Default Hardware)

Готові конфігурації фурнітури, які входять до базового пакету Gava.

Конфірмат 7×50

Стандартний меблевий єврогвинт для панелей 16-25мм.

# Конфірмат 7×50 - стандартний меблевий шуруп
# Gava DSL v1.0

id: confirmat_7x50
name: "Конфірмат 7×50"
type: screw
gava_dsl: "1.0"

constraints:
  panel_a_thickness:
    min: 16
    max: 25
  panel_b_thickness:
    min: 16
    max: 25

auto_placement:
  mode: edge_spacing
  edge_offset: 50
  spacing: 300

# Panel A: отвір в торець
# Параметри позиціонування:
# - shift:  X (вздовж base_edge)
# - offset: Y (відступ від торця вглиб пласті) - не використовується для edge_face
# - inset:  Z (зміщення по товщині панелі)
panel_a_drillings:
  edge_face:
    - name: confirmat_body
      diameter: 5
      depth: 50
      inset: "$thickness_a / 2"  # центр по товщині панелі (Z)

# Panel B: наскрізний отвір на opposite_face (там де головка шурупа)
panel_b_drillings:
  opposite_face:
    - name: through_hole
      diameter: 7
      depth: "$thickness_b"  # наскрізний = товщина панелі
      inset: "$panel_a.confirmat_body.inset"  # центр по товщині (Z)

Конфірмат 5×40

Для тонких панелей 12-18мм.

# Конфірмат 5×40 - для тонких панелей
# Gava DSL v1.0

id: confirmat_5x40
name: "Конфірмат 5×40"
type: screw
gava_dsl: "1.0"

constraints:
  panel_a_thickness:
    min: 12
    max: 18
  panel_b_thickness:
    min: 12
    max: 18

auto_placement:
  mode: edge_spacing
  edge_offset: 40
  spacing: 250

# Panel A: отвір в торець
panel_a_drillings:
  edge_face:
    - name: confirmat_body
      diameter: 4
      depth: 40
      inset: "$thickness_a / 2"  # центр по товщині панелі (Z)

# Panel B: наскрізний отвір на opposite_face (там де головка шурупа)
panel_b_drillings:
  opposite_face:
    - name: through_hole
      diameter: 5
      depth: "$thickness_b"  # наскрізний
      inset: "$panel_a.confirmat_body.inset"  # центр по товщині (Z)

Шкант + Конфірмат

Спарена фурнітура: шкант D8 та конфірмат D5 з використанням shift для зміщення.

# Шкант + Конфірмат - спарена фурнітура
# Два отвори з shift від якоря: шкант D8 та конфірмат D5
# Gava DSL v1.0

id: dowel_confirmat
name: "Шкант + Конфірмат"
type: screw
gava_dsl: "1.0"

constraints:
  panel_a_thickness:
    min: 16
    max: 25
  panel_b_thickness:
    min: 16
    max: 25

auto_placement:
  mode: edge_spacing
  edge_offset: 50
  spacing: 300

# Panel A: два отвори в торець
# ВАЖЛИВО: основний конфірмат стоїть на якорі (shift = 0),
#          шкант має shift від якоря
panel_a_drillings:
  edge_face:
    - name: confirmat_body
      diameter: 5
      depth: 50
      inset: "$thickness_a / 2"  # центр по товщині панелі (Z)
      # shift = 0 (за замовчуванням) - рівно на якорі
    - name: dowel_hole
      diameter: 8
      depth: 20
      inset: "$thickness_a / 2"  # центр по товщині панелі (Z)
      shift: 32  # 32мм від якоря вздовж ребра (система 32)

# Panel B: отвори на різних сторонах
panel_b_drillings:
  # opposite_face - протилежна сторона (де шляпка конфірмата)
  opposite_face:
    - name: through_hole
      diameter: 7
      depth: "$thickness_b"  # наскрізний
      inset: "$panel_a.confirmat_body.inset"  # центр по товщині (Z)
      # shift = 0 - на якорі, як і confirmat_body
  # contact_face - сторона Panel B, яка торкається торця Panel A (для шканта)
  contact_face:
    - name: dowel_hole
      diameter: 8
      depth: 12
      inset: "$panel_a.dowel_hole.inset"   # центр по товщині (Z)
      shift: "$panel_a.dowel_hole.shift"   # 32мм від якоря (X)

Blum Clip Top 110° Накладна (Overlay)

Накладна петля для фасадів.

# Blum Clip Top 110° Накладна (Overlay)
# Gava DSL v1.0

id: blum_clip_top_110_overlay
name: "Blum Clip Top 110° Накладна"
type: hinge
gava_dsl: "1.0"
hinge_type: overlay
opening_angle: 110

constraints:
  panel_a_thickness:
    min: 16
    max: 22
  panel_b_thickness:
    min: 16
    max: 19

auto_placement:
  mode: edge_spacing
  edge_offset: 100
  spacing: 300        # Мінімальна відстань між петлями (мм)
  count: 2            # Мінімальна кількість петель (fallback)

# Panel A (дверка): чашка петлі + кріплення на back_face
# Параметри позиціонування:
# - shift:  X (вздовж base_edge)
# - offset: Y (відступ від торця вглиб пласті)
# - inset:  Z (зміщення по товщині панелі)
panel_a_drillings:
  back_face:
    - name: hinge_cup
      diameter: 35
      depth: 13
      offset: 21.5  # boring distance від краю дверки (Y)
    - name: hinge_mounting_1
      diameter: 8
      depth: 10
      offset: 21.5  # той самий offset що і чашка (Y)
      shift: -24    # 24мм вліво від центру чашки (X)
    - name: hinge_mounting_2
      diameter: 8
      depth: 10
      offset: 21.5
      shift: 24     # 24мм вправо від центру чашки (X)

# Panel B (боковина): монтажна планка на base_face
# base_face = грань боковини, що контактує з дверкою (де кріпиться планка)
panel_b_drillings:
  base_face:
    - name: mounting_plate_hole_1
      diameter: 5
      depth: 12
      offset: 37    # відстань від краю боковини (Y)
      shift: -16    # перший отвір планки (X)
    - name: mounting_plate_hole_2
      diameter: 5
      depth: 12
      offset: 37
      shift: 16     # другий отвір планки (32мм між отворами) (X)

Blum Clip Top 110° Вкладна (Inset)

Вкладна петля для фасадів всередині корпусу.

Особливість INSET: door_offset буде від'ємним (напр. -18мм для фасаду 18мм), оскільки вимірюється від тильної пласті фасаду. Якщо креслення виробника показує offset від лицевої пласті фасаду, додайте $thickness_a.
# Blum Clip Top 110° Вкладна (Inset)
# Gava DSL v1.0

id: blum_clip_top_110_inset
name: "Blum Clip Top 110° Вкладна"
type: hinge
gava_dsl: "1.0"
hinge_type: inset
opening_angle: 110

constraints:
  panel_a_thickness:
    min: 16
    max: 22
  panel_b_thickness:
    min: 16
    max: 19

auto_placement:
  mode: edge_spacing
  edge_offset: 100
  spacing: 300        # Мінімальна відстань між петлями (мм)
  count: 2            # Мінімальна кількість петель (fallback)

# Panel A (дверка): чашка петлі + кріплення на back_face
panel_a_drillings:
  back_face:
    - name: hinge_cup
      diameter: 35
      depth: 13
      offset: 21.5  # boring distance від краю дверки (Y)
    - name: hinge_mounting_1
      diameter: 8
      depth: 10
      offset: 21.5
      shift: -24
    - name: hinge_mounting_2
      diameter: 8
      depth: 10
      offset: 21.5
      shift: 24

# Panel B (боковина): монтажна планка на base_face
# base_face = грань боковини, що контактує з дверкою (де кріпиться планка)
#
# ВАЖЛИВО: Виробники петель часто вказують offset від ЛИЦЕВОЇ пласті фасаду.
# Gava вимірює door_offset від ТИЛЬНОЇ пласті (hinge_base_a).
# Для INSET з фасадом 18мм: door_offset = -18мм
#
# Якщо в кресленні виробника offset=37мм від лицевої пласті фасаду,
# то треба додати товщину фасаду: offset = "37 + $thickness_a"
panel_b_drillings:
  base_face:
    - name: mounting_plate_hole_1
      diameter: 5
      depth: 12
      offset: "37 + $thickness_a"  # 37мм від лицевої пласті фасаду (Y)
      shift: -16
    - name: mounting_plate_hole_2
      diameter: 5
      depth: 12
      offset: "37 + $thickness_a"
      shift: 16