Skip to main content

Headless CAD: генерація та розкрій DXF-розгорток через Chromium

· 2 min read
Yurii
Інженер з автоматизації CAD

Традиційні підходи до генерації креслень спираються на важке десктопне ПЗ і пропрієтарні 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), які миттєво видають готові до різання файли для лазерного різання.

LinkedInGitHub