Headless CAD: генерація та розкрій DXF-розгорток через Chromium
Традиційні підходи до генерації креслень спираються на важке десктопне ПЗ і пропрієтарні API. Сучасний підхід переносить геометричне ядро у веб.
У цій статті розберемо, як використати рушій Chromium (через Puppeteer або Playwright) і JavaScript для автоматичної генерації, перевірки та розкрою (nesting) DXF-файлів.
:::tip Чому Chromium?
Для інженера браузер — це не просто переглядач сторінок, а потужний рушій векторного рендерингу (SVG/Canvas) з апаратним прискоренням.
Кросплатформність: генерація працює однаково на Windows, Linux-серверах і всередині Docker-контейнерів.
Візуальне налагодження: ви бачите рівно те, що піде на верстат.
Доступність бібліотек: екосистема NPM (Maker.js, OpenJSCAD) дозволяє працювати з 2D-геометрією швидше, ніж LISP або VBA.
:::
Архітектура рішення
Процес автоматизації розкрою або генерації розгортки виглядає так:
Frontend/логіка: JS-скрипт генерує геометрію деталі (SVG path) за параметрами.
Рушій (Chromium): headless-браузер рендерить геометрію, обчислює перетини (для розкрою) або перетворює криві Безьє на дуги/полілінії.
Вивід: серіалізація результату у формат DXF.
Технічна реалізація
Замість ручної побудови ліній ми використовуємо DOM для обчислень.
Стек:
Node.js — середовище виконання.
Puppeteer — керування headless Chromium.
Maker.js — бібліотека для CAD-операцій та експорту в DXF.
Приклад коду (Node.js)
const puppeteer = require('puppeteer');
const fs = require('fs');
(async () => {
// 1. Запускаємо «чистий» браузер
const browser = await puppeteer.launch();
const page = await browser.newPage();
// 2. Впроваджуємо логіку побудови (наприклад, розгортку короба)
// У реальному проєкті тут підключається maker.js
const dxfContent = await page.evaluate(() => {
// Припускаємо, що makerjs уже завантажено в контекст сторінки
const model = new makerjs.models.Rectangle(100, 50);
// Додаємо отвори або лінії згину
const hole = new makerjs.paths.Circle([10, 10], 5);
makerjs.model.addPath(model, hole, 'hole_1');
// Експорт у рядок DXF
return makerjs.exporter.toDXF(model, { units: 'mm' });
});
// 3. Зберігаємо файл для виробництва
fs.writeFileSync('flat-pattern.dxf', dxfContent);
console.log('DXF generated successfully.');
await browser.close();
})();
Інтерактивний приклад
Завдяки MDX інтерактивні елементи можна вбудовувати прямо в статтю. Запустіть генератор DXF-кола нижче, підправте фрагмент коду й миттєво завантажте оновлений DXF:
Застосування для розкрою (nesting)
Алгоритми розкрою (такі як SVGnest або Deepnest) потребують важких геометричних обчислень. Їх запуск у середовищі Chromium дозволяє використовувати модулі WebAssembly (WASM). Це суттєво прискорює розрахунок розміщення деталей порівняно з чистим JS і дає можливість одразу експортувати результат у DXF.
Підсумки
Використання Chromium для CAD-задач позбавляє залежності від серверних ліцензій SolidWorks чи AutoCAD. Це дозволяє будувати хмарні конфігуратори (CPQ), які миттєво видають готові до різання файли для лазерного різання.
