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 позиція (при натисканні 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. Контакт може бути частковим — панелі можуть мати свіси одна над одною.
Система автоматично:
- Знаходить пятна контакту (contact patches) між панелями
- Будує систему прив'язки на основі base_edge
- Проектує base_edge Panel A на поверхню Panel B
- Розраховує позиції (positions) вздовж лінії контакту
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:
- Кожна панель має свій base_edge (не проекція)
- Додаткові параметри: gap, door_offset (для компенсації позицій свердлінь)
- Panel A = Дверка, Panel B = Боковина
Параметри компенсації: gap та door_offset
| Параметр | Опис |
|---|---|
| gap | Відстань від торця фасаду до лицевої пласті боковини (мм) |
| door_offset | Відстань від тильної пласті фасаду (hinge_base_a) до торця боковини (мм) |
Типи завісів
Gava автоматично визначає тип завісу за геометрією з'єднання:
| Тип | Опис | Геометрія |
|---|---|---|
| overlay | Накладна — дверка накриває торець боковини | Торець боковини проектується на тил дверки |
| inset | Вкладна — дверка всередині каркасу | Торець дверки проектується на пласть боковини |
| half_overlay | Напівнакладна | Як overlay, але з меншим значенням overlay |
| parallel | Рівнолежача — тильні грані співпадають | Тильні пласті копланарні |
Panel A (Дверка)
Панель дверцят, що відкривається на завісах.
| Грань | Призначення |
|---|---|
| back_face | Внутрішня пласть (тильна сторона дверки) |
| front_face | Зовнішня пласть (видима при закритих дверцятах) |
| edge_face | Торець з боку завісу |
Panel B (Боковина)
Бічна панель корпусу, на яку кріпиться монтажна планка завісу.
base_face (де кріпиться фурнітура) та opposing_face (протилежна).| Грань | Призначення |
|---|---|
| base_face | Пласть боковини, де кріпиться монтажна планка (контактує з дверкою) |
| opposing_face | Протилежна пласть боковини |
| edge_face | Торець боковини |
Параметри свердлінь (Довідник)
Загальні параметри
| Параметр | Тип | Обов'язковий | Опис |
|---|---|---|---|
| name | string | Так | Унікальний ідентифікатор. Тільки a-z, A-Z, 0-9, _ |
| diameter | number | Так | Діаметр отвору (мм) |
| depth | number/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: 3Auto Placement
Визначає, як фурнітура автоматично розподіляється вздовж ребер панелі.
auto_placement:
mode: edge_spacing
edge_offset: 50
spacing: 300| Параметр | Тип | Опис |
|---|---|---|
| mode | string | Алгоритм розміщення |
| edge_offset | number | Відступ від кутів панелі до першої фурнітури (мм) |
| spacing | number | Мінімальна відстань між одиницями фурнітури (мм) |
Режими (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)
Вкладна петля для фасадів всередині корпусу.
# 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
CatCut