Перейти к основному содержимому

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

· 2 мин. чтения
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