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), которые мгновенно выдают готовые к резке файлы для лазерной резки.
