Деталь має габаритні розміри
перевіряємоКожна панель повинна мати поле dimensions: [width, height]. Без нього експортер не знає габаритів заготовки.
Перед тим, як CatCut експортує ваш проект у цільовий формат, він проганяє його через набір перевірок: чи коректно описаний документ, чи всі інструменти у активному наборі інструментів, чи цільовий формат взагалі вміє все, що ви хочете. Кожна знайдена проблема стає попередженням або помилкою у панелі валідації біля деталей.
Нижче — повний перелік. Зелений значок означає «зараз перевіряємо», жовтий — «у планах». Цей перелік оновлюється разом із кодом, тому якщо щось у роботі — ви побачите це тут.
Базові перевірки самого GrakML-документа: чи є в кожній панелі контур, габарити, товщина. Без них експортер не зможе обробити проект взагалі.
Кожна панель повинна мати поле dimensions: [width, height]. Без нього експортер не знає габаритів заготовки.
Кожна панель повинна мати замкнутий contour із сегментів line/arc. Без контуру неможливо зрозуміти форму деталі.
Кожна панель повинна мати поле thickness — використовується як dz у XNC програмах і для вибору листа матеріалу.
Чи має активний набір інструментів всі діаметри сверл, фрез і пил, потрібні для машинних операцій у вашому проекті. Якщо чогось бракує — у звіті з'явиться попередження, а в майбутньому ми будемо автоматично пропонувати заміни.
Якщо в проекті є face/back drilling діаметром, якого немає в toolset.face_drills, цех не зможе його зробити цим інструментом. Перед перевіркою застосовуємо substitutions з набору — якщо є правило «5→4», то проект з 5мм пройде з info-повідомленням про заміну.
Аналогічно до face: якщо edge drilling має діаметр, якого немає в toolset.edge_drills — попередження. Substitutions для торцевих свердел теж застосовуються (це окремий список, бо торцевий станок зазвичай має свій набір патронів).
Кожен паз має ширину, яка дорівнює ширині пили (або фрези). Якщо такої ширини в toolset.groove_saws немає — цех не зробить паз точно тієї ж ширини. Перевіряємо після застосування substitutions.
Якщо в проекті є хоча б один вибірка або фрезерувальна обробка, в активному наборі інструментів повинна бути хоча б одна фреза. Інакше їх немає чим зробити.
На рівні набору інструментів можна задати правила заміни: «свердло 5мм → 4мм», «маркерне 3мм → 2мм» тощо. Перед перевіркою «чи є цей діаметр у наборі» валідатор спочатку прогоняє діаметр через список замін, і експортер фактично малює XNC-програму вже з підміненим діаметром. У звіт потрапляє info-попередження про кожну заміну.
Перевірки фізичної реалізованості: радіус кутка не менший за половину фрези, мінімальна стінка між отворами, глибина не більша за товщину тощо. Тут ще багато чого треба зробити — нижче перелік запланованих перевірок.
Якщо у вибіркаі мінімальний радіус закруглення R менший за половину діаметру обраної фрези, фреза фізично не пролізе в куток і реальний радіус буде більшим. Це не помилка, але треба попереджати, щоб юзер свідомо вибирав фрезу.
Якщо два сусідніх отвори стоять занадто близько, перемичка між ними може лопнути. Ми ще не перевіряємо цю відстань — буде налаштовуватись через набір інструментів (мінімальна стінка для конкретного матеріалу і свердла).
Якщо depth більше ніж thickness деталі — це наскрізне отвір, і його треба маркувати інакше. Поки що ми не перевіряємо, але буде додано як автоматична конвертація drilling → through-hole.
Коли на сегменті вирізу (внутрішнього або зовнішнього) задана крайка, експортер перед малюванням mill-path зсуває цей сегмент перпендикулярно тангенсу всередину матеріалу деталі на товщину крайки. Консекутивні зсунуті сегменти з'єднуються miter-стиковкою (для прямих), або коротким bevel-мостиком (для стиків з дугами). Завдяки цьому після ручного оклеювання вирізу реальний розмір збігається з design. Товщина бреться per-segment, тож виріз, у якого на сегментах різна крайка, компенсується коректно.
Деякі особливості GrakML просто не вміщуються в обраний цільовий формат. GibLab, наприклад, не вміє торцевих вибірок і зрізів під кутом — такі деталі мають бути попередженими і чекати окремого PDF-додатку.
GibLab формально не підтримує торцеві вибіркаи (вибірка на торці деталі). Найближчим часом ми будемо виносити такі деталі окремою сторінкою у PDF-додаток до експорту, щоб майстер міг зробити їх вручну. Поки що — попередження, ці вибіркаи в .project не потраплять.
GibLab не вміє представляти зрізи торця під кутом (miter). Як і торцеві вибіркаи, такі деталі підуть у PDF-додаток. Поки експортер їх просто пропускає з попередженням.
Якщо контур деталі не є прямокутником (зовнішній виріз, закруглені кути, вільна форма), експортер залишає в GibLab прямокутну заготовку з розмірами bounding box, а реальний контур вирізає фрезою через XNC mill-path з компенсацією c=1 (right — GrakML контур CCW, deталь залишається зліва). Фреза береться з preferred.contour_mill активного набору інструментів.
Деталі з внутрішніми вирізами (наприклад, отвір під раковину) експортуються як XNC mill-програма з компенсацією c=3 і глибиною на всю товщину деталі. Фреза обирається з preferred.cutout_mill активного набору інструментів. Наскрізні вибіркаи (pocket depth = товщина) автоматично розпізнаються як внутрішні вирізи.
«Зовнішній виріз» — це виріз, що відкушує частину зовнішнього контуру деталі (наприклад, пропил під трубу на краю полиці). У GrakML такі сегменти просто лежать у panel.contour разом із звичайними сторонами (spec §4.8), ми їх виявляємо за ознакою «сегмент не у panel.sides» і переносимо в mill-path зовнішнього контуру разом з іншими не-прямокутними деталями. Крайка на сегментах зовнішнього вирізу в GibLab не передається — йде в PDF-додаток окремим попередженням.