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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

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

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

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

Собственно вот само решение: https://github.com/romannep/dxf-handler

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

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

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

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

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

Источник: https://habr.com/ru/post/659929/


Интересные статьи

Интересные статьи

В статьях мы регулярно повторяем важную мысль: статический анализатор должен использоваться регулярно. В этом случае многие ошибки выявляются на самом раннем этапе, а их исправление мак...
Если вы регулярно отлаживаете производительность запросов к PostgreSQL, а EXPLAIN (ANALYZE, BUFFERS) ... — любимый инструмент познания особенностей работы этой СУБД, то новые полезные «фи...
Здравствуй, дорогой читатель! Сегодня мы начнем с того, что в один момент я решил вместо того, чтобы тренироваться на уязвимых машинах, протестировать свой собственный Wi-Fi роутер...
Когда вы сталкиваетесь с новой уязвимостью, какая мысль приходит первой? Конечно, отреагировать как можно быстрее. Однако, скорость — всего лишь одно из условий эффективной борьбы с ИБ-угрозами. ...
Скорее всего, из названия статьи вы уже догадались, что в центре внимания ошибки в исходном коде. Но это вовсе не единственное, о чем пойдет речь в этой статье. Если кроме С++ и ошибок в чужом ...