Как стать автором
Обновить

Обработка DXF файлов: конвертация в SVG и анализ

Время на прочтение2 мин
Количество просмотров4.8K

В сфере металлообработки есть популярная операция - лазерная резка. Узким местом в цикле обработки заказа здесь может являться расчет. Он хоть и не сложный, но обычно выполняется вручную. А это означает, что помимо необходимости участия человека, он еще и затягивается на время коммуникации - отправки информации туда сюда.

Если вы захотите автоматизировать расчет стоимости заказа, вам придется иметь дело с DXF файлами - в некотором роде стандартном способе передачи чертежей нужных деталей. В этой задаче вам может помочь моя разработка.

Хочу сказать, что предложенное решение не является законченным. Оно корректно работает на конечном множесте тестовых файлов. Однако CAD системы есть разные. Люди, которые их используют - тоже разные. В совокупности на выходе вполне могут быть такие чудеса в DXF файле(вы видите 4000 отрезков на снежинке выше? а они там есть :), что мое решение выдаст или ошибку или неверный результат.

Решение может обрабатывать конечный набор примитивов - LINE, CIRCLE, ARC, POLYLINE. Если в dxf файле будут примитивы типа SPLINE - обработка не выполнит расчет параметров (Не осилил. Но CAD системы позволяют трансформировать SPLINE в POLYLINE).

Собственно вот само решение

Обработка dxf может занять длительное время. Чтобы не блокировать поток, решение выполнено как отдельный скрипт, который можно запустить асинхронно отдельным процессом. Скрипт получает на вход имя файла, обрабатывает его, формирует два файла - svg с картинкой и json с информацией.

Для расчета стоимости нужен периметр всех контуров (длина реза), общая площадь (чтоб рассчитать вес - критично для доставки) и ширина и высота минимального прямоугольника (расход металла). Все это вы найдете в результирующем json файле. Ну и разумеется на выходе будет svg картинка - чтоб показать клиенту, что мы посчитали именно то, что он хотел.

Обработка использует dxf-parser чтобы получить из DXF JavaScript объект, потом пытается соединить примитивы в замкнутые контуры, после чего, используя библиотеку flatten-js, сделать полигоны, выполнить расчет нужных цифр и сгенерировать svg. Исходник по сути на JS, хоть и TS (типы описаны по минимому - для собственного удобства).

Как запускать обработку написано в README в репозитории. Буду рад, если она вам пригодиться.

P.S. Если вы захотите сделать хаб (маркетплейс) по металлообработке - напишите мне в личку - возможно нам будет что обсудить.

Теги:
Хабы:
Всего голосов 7: ↑6 и ↓1+7
Комментарии8

Публикации

Истории

Работа

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань